Agent 报错了却假装没看见直接给用户回话
很多人在做 AI Agent 实战时,习惯性地认为只要 LLM 足够强,它就能处理工具调用失败的情况。但实际情况是,Agent 经常会出现一种“结构性缺陷”:比如
下一篇
买大量 Yahoo 账号用来跑自动化流程 →
charge_card 接口明明返回了 402 错误,结果 Agent 视而不见,直接告诉用户“订单已发货”。这根本不是什么幻觉问题,而是执行链路断了。最离谱的是,现在很多人的做法是用另一个更强的 LLM 来当“裁判”审计 trace。这其实太浪费且不稳定了,因为这种结构性错误是可以通过逻辑判定(Deterministic)的,根本不需要模型来猜。
我最近在看 tracelint,这玩意儿本质上是个 Agent 执行链路的 Linter。它不运行在你的代码里,而是运行在执行后的 trace 上。只要工具调用失败了但 Agent 继续推进,或者出现了死循环(同一个参数调用 5 次),它就能直接精准定位到哪一行出错了,并直接给 CI 流程返回非零退出码,直接拦截掉有 Bug 的版本。
具体的实操非常简单,不需要 API Key,也不用下载模型:
pip install tracelint
# 跑一个 demo 看看它能抓出哪些缺陷
tracelint demo --html demo.html如果你想在 CI 流程里给真实的 trace 做拦截,可以直接用这个命令:
tracelint check ./trace.json --tools ./tools.json它最强的点在于兼容性,只要你用了 OpenInference、Langfuse 或者 OpenAI 的消息格式,它都能直接读,不用你重新转换格式。比如直接对接 Phoenix 的数据:
import phoenix as px
from tracelint import lint_otel_trace
# 获取 spans 数据并直接进行 lint 检查
spans = px.Client().get_spans_dataframe().to_dict("records")
report = lint_otel_trace(spans)
print(f"Exit Code: {report.exit_code}")
for f in report.active_findings:
print(f"Rule: {f.rule}, Summary: {f.summary}")这种纯逻辑校验比 LLM Judge 靠谱得多,因为它能给出确定性的证据:第 9 步工具调用返回了 Error,但第 10 步 Agent 却在生成答案。这种确定性才是工业级部署真正需要的。
免费 AI 工具箱 · 全部完全免费