Agent工具静默失败:当401错误变成自信的回答

一个让人不安的失败场景
想象一个处理客户发票查询的 Agent。它只有一个工具——调用内部 API 查询数据,一次任务需要四次查询。前两次调用正常,第三次开始,API 凭证过期,返回 401。接下来发生的事情才是真正的问题:Agent 反复重试,每次微调参数,仿佛 API 对措辞有意见。几轮之后它放弃了工具,然后写出一段条理清晰、语气自信的回答,覆盖了全部四个客户的信息。
运行状态显示成功,仪表盘一片绿色。没有人知道工具在第三次调用后就彻底失效了。
这就是所谓的静默失败——它不像账单爆炸或缺少业务论证那样引人注目,所以能在生产环境中存活很久。
为什么更聪明的模型解决不了这个问题
行业讨论中,Gartner 预测到 2027 年底超过 40% 的 Agentic AI 项目会被取消,主要原因是成本失控、业务价值不清晰和风险管控薄弱。这些都是显性失败——最终会在某个会议上暴露出来。
凭证过期是另一种问题。普通软件遇到 401 会抛异常、告警、停止。但 Agent 没有这种本能。对语言模型来说,错误信息只是上下文中的更多文本,如果指令要求回答用户问题,它总会找到一种方式完成回答——不管有没有真实数据。
更聪明的模型只会让编造的回答更逼真,让问题更难发现。真正该问的是:模型周围的系统,在工具死亡时做了什么?
不是所有错误都值得重试
把所有工具错误一视同仁是危险的起点。错误至少可以分成三类:
- 可重试错误:超时、连接断开、429 限流、503 服务不可用。等一会儿再试大概率能成功。
- 不可重试错误:401 认证失败、403 权限不足、404 资源不存在。重试一百次结果都一样,只是在白白消耗 token。
- 模糊状态:调用部分成功(比如支付可能已执行也可能没有)。代码无法判断,只能停止并交给人工处理。
模型本身无法区分这三类——对它来说都是错误字符串。所以分类决策必须在模型看到错误之前,用普通代码完成。
实战:错误分类与重试封装
以下是一个可以直接作为起点的工具调用封装:
import logging, random, time, requests
log = logging.getLogger("agent.tools")
# 4xx 中除 429 外的错误不会自行恢复,不重试
RETRYABLE = {429, 500, 502, 503, 504}
MAX_TRIES = 3
class ToolDown(Exception):
def __init__(self, status):
super().__init__(f"tool failed with status {status}")
self.status = status
def call_api(url, headers, params=None):
for attempt in range(1, MAX_TRIES + 1):
try:
resp = requests.get(url, headers=headers, params=params, timeout=10)
except (requests.Timeout, requests.ConnectionError):
status = 0 # 无响应,按不稳定的 5xx 处理
else:
if resp.ok:
return resp.json()
status = resp.status_code
if (status and status not in RETRYABLE) or attempt == MAX_TRIES:
raise ToolDown(status)
# 指数退避 + 随机抖动,避免大量 Agent 同时重试
time.sleep(2 ** attempt + random.random())
几个关键设计点:
- 重试次数有硬上限,防止不稳定的工具变成无限循环。
- 超时和连接断开被视为类似不稳定的 5xx,允许重试。
- 不可重试错误直接抛出
ToolDown,让上层 Agent 知道该停止。 - 指数退避加随机抖动,避免大规模部署时所有 Agent 同时重试打垮下游。
对开发者的实用建议
- 不要让 Agent 直接处理工具错误。在工具调用层做错误分类,把「是否继续」的决定权从模型手中收回来。
- 区分失败类型:401/403 立刻停止并告警,不要重试;5xx 和超时可以有限重试。
- 模糊状态交给人工:涉及支付、状态变更等不可逆操作,代码无法判断时,停止执行并升级。
- 监控工具健康度:当某个工具连续失败时,自动熔断,而不是让 Agent 反复尝试。
静默失败之所以危险,是因为它看起来像成功。在 Agentic AI 走向生产的过程中,围绕模型的系统设计——而不是模型本身的能力——才是决定可靠性的关键。
本文目录(5 节)
本文基于 Towards Data Science 的公开内容,由 AI 辅助整理改写后发布。
原标题:Agentic AI in Production: Why Your Agent Keeps Answering After Its Tools Fail
阅读原文