如何解决 Agent 工具调用时的幻觉问题,如编造 API 或 传错参数?
幻觉是怎么产生的?
工具幻觉本质上是“模型自由发挥空间太大”,从另一个维度来看,就是你没有告诉他应该怎么做,给他规定怎么做
我的做法
- 收缩并明确限定使用工具:所有工具先注册成白名单,让Agent 只能从注册过的 tool 列表里去选择,并且每一个工具都有给模型明确的 JSON Schema,比如必填字段、枚举值、类型、参数范围。之前我做工具调用链路时,会在真正执行前先做一次参数校验,如果缺某个字段、字段名写错、类型不对就直接拦截,不让它进入真实 API
- 工具调用前还会做一层业务校验。通过schema校验仅仅是模型生成的参数“可以用”,并不是说参数一定正确,同样还需要对于模型调用工具时机进行检查。比如模型想发布任务,我会在调用后端前加一层业务校验 hook,如果任务还没上传题目数据,就直接拦截。如果奖励字段类型不对或者金额超范围,也不会请求后端。这里的 hook 是规则化代码,不依赖模型判断,所以能减少 Agent 乱调接口带来的风险
- 拦截后返回结构化错误给 Agent,让它修正参数,而不是让错误请求打到真实系统。最后我会做调用日志和回放评测,记录每次工具名、参数、校验结果和最终状态。这样如果出现“点立即发布却变成草稿”这种问题,可以很快定位到底是模型选错工具、参数传错,还是后端状态映射有问题,这样可以方便排查对应错误Agent
Agent 开发八股 文章被收录于专栏
立志于收录所有的 Agent 开发八股文~
