Agent 工具调用可靠性——为什么 70% 的工具调用会失败
Agent 工具调用可靠性——为什么 70% 的工具调用会失败
我统计过自己 Agent 项目的工具调用日志——70% 的失败率让人崩溃。怎么救?
真实失败率
我做的一个 Agent 项目,累计 10000 次工具调用统计:
| 状态 | 占比 |
|---|---|
| 成功 | 28% |
| 参数错误 | 32% |
| 工具选错 | 18% |
| 超时/异常 | 12% |
| 死循环(同工具反复调) | 7% |
| 其他 | 3% |
首轮成功率只有 28%——意味着 72% 的调用需要”补救”。
这和很多 Agent 演示给人的”丝滑”印象差距巨大。
七大类失败原因
1. 参数错误(32%)
最常见的失败——模型生成的参数不对。
例子:
get_weather(city="上海")→ 实际 schema 要求location: str,应该传"Shanghai"search(query="AI")→ 参数太模糊,实际需要更具体的 query
根因:
- Tool description 不清晰
- 参数 schema 类型不明确(enum / optional / default)
- 模型对业务术语理解不准
2. 工具选错(18%)
模型调了不该调的工具。
例子:
- 用户问”今天天气” → 模型调了
get_news而不是get_weather - 用户问”查订单” → 模型调了
search_docs而不是query_orders
根因:
- 工具之间功能边界模糊
- 工具 description 写得像”另一个工具”
3. 超时/异常(12%)
工具本身慢或挂了。
根因:
- 后端 API 慢
- 网络问题
- 工具代码 bug
4. 死循环(7%)
模型反复调同一工具,陷入循环。
1 | 调 get_weather(city="上海") → 返回结果 |
根因:
- 模型没意识到已经调过了
- 工具返回结果没被”消化”
5. 工具本身设计问题
- 工具能力太弱(返回信息不全)
- 工具能力太强(能做太多事,模型不知道用哪个)
- 工具 schema 设计不合理(嵌套过深)
提升可靠性的 8 个实战技巧
技巧 1:写好 Tool Description
最有效的一招——能直接提升 20%+ 准确率。
差的写法:
1 | "name": "search", |
好的写法:
1 | "name": "search_internal_knowledge", |
关键:
- 明确”什么时候用 / 什么时候不用”
- 给出参数示例
- 用自然语言描述,而不是功能列表
技巧 2:参数验证 + 自动重试
1 | def safe_tool_call(func, validator, max_retries=2): |
思路:参数错时,把错误信息反馈给模型,让它修正后重试。
技巧 3:工具数量控制
单个 Agent 的工具不要超过 20 个——多了模型选择困难。
我做过测试:
| 工具数 | 选对工具的准确率 |
|---|---|
| 5 个 | 92% |
| 10 个 | 85% |
| 20 个 | 68% |
| 50 个 | 41% |
超过 20 个工具,准确率断崖式下降。
解决:用 “Router Agent” 分流——多个小 Agent,每个管 10 个工具。
技巧 4:工具分组 + Router
1 | # 顶层 Router Agent:决定调哪个子 Agent |
比单 Agent 100 个工具好得多。
技巧 5:循环检测
1 | def detect_loop(state, threshold=3): |
检测到循环时,主动打断,让模型”换个思路”。
技巧 6:超时 + 降级
1 | def execute_with_timeout(func, args, timeout=10, fallback=None): |
超时不要让 Agent 卡死——降级返回简化结果。
技巧 7:工具测试覆盖
每个工具必须有单元测试:
1 | def test_get_weather(): |
工具不可靠,Agent 一定不可靠。
技巧 8:可观测性
每次工具调用必须记录:
1 | logger.info({ |
没有日志,出问题就是黑盒。
进阶:让 Agent 自己修复错误
Self-Healing Agent——Agent 调工具失败时,自己诊断、修正、重试。
1 | RECOVERY_PROMPT = """ |
实测:Self-Healing 能把首轮成功率从 28% 提升到 65%——接近 2.5 倍提升。
我的 Agent 优化记录
我做了 6 个月的 Agent 优化,首轮成功率提升:
1 | Month 1: 28% (baseline) |
2.5 倍提升——全是工程优化,没有”模型魔法”。
写在最后
Agent 的可靠性,不是 LLM 决定的——是工程决定的。
模型准确率再高,工程不做好,Agent 还是不可用。
这是”AI 工程化”和”AI 演示”的根本区别——演示里 Agent 跑得丝滑,生产里 Agent 跑得崩溃。
Agent 工程的本质,是”在 70% 不可靠的工具上,搭建 99% 可靠的系统”。
