事情本身不复杂,线索都在日志里。日志里同一个查询工具被调用了七次,参数几乎相同,最后仍然没给出结论,token 消耗远超预期。
第一反应是「工具描述与模型理解不一致」,验证下来不成立。
真正麻烦的地方在于,几个原因的现象几乎一样。工具返回内容为空,Agent 以为没执行成功。还有一种是提示词没有说明何时停止。
少数情况下是没有对重复调用做去重保护。
动手时先确认工具真实返回内容
python -c "print(tool.invoke({'q':'测试'})[:200])"
随后在提示词里写明终止条件
prompt = '若工具已返回结果,直接总结,不要重复调用'
接着对相同参数的调用做缓存
python -c "from functools import lru_cache;print('wrap tool with cache')"
剩下的就是加上最大步数并记录轨迹
python -c "print(agent.max_iterations)")
恢复的判定其实很直接。同一任务的工具调用次数降到两三次,能正常给出结论,token 消耗回落到合理区间。
容易忽略的是,工具返回空字符串是最常见的诱因,让工具在无结果时返回明确提示,比在提示词里反复强调更有效。报错文案容易误导,真正的原因往往在相邻那一层的日志里。