先把当时的情况摆出来。Agent 调订单查询接口,接口 500 返回 error internal,Agent 把这串 JSON 当成查询结果,直接回给用户您的订单 internal,连兜底话术都没走。

真正麻烦的地方在于,几个原因的现象几乎一样。工具封装层没判断 HTTP 状态码。还有一种是错误对象被序列化后当成正常返回值。

还有一种情况,提示词没定义工具失败时的话术。另外,Agent 没有失败分支 只能继续生成。

上来先打印工具函数的原始返回

python -c "import json;print(json.load(open('tool_out.json')))"

然后在工具里判断状态码并抛结构化异常

python -c "print({'ok': False, 'code': 500, 'msg': 'internal'})"

随后统一返回 ok 字段并写进提示词规则

python patch_prompt.py --append rules/tool_fail.txt

剩下的就是用 mock 500 连跑二十轮看输出

python mock_server.py --status 500 --rounds 20

命令输出我都留了记录,免得改完记不清原来的值。

怎么算真的好了,看的是同一批现象。接口 500 时用户收到稍后再试,日志里保留完整错误码,Agent 不再把错误体当结果。

提醒一点。工具层的异常必须显式建模,裸返回字符串等于告诉模型这就是答案。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189