先把当时的情况摆出来。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 不再把错误体当结果。
提醒一点。工具层的异常必须显式建模,裸返回字符串等于告诉模型这就是答案。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
