最近在做一个简单的AI Agent,让大模型调用几个内部API完成数据查询和操作。用的ReAct框架,模型是GPT-4o。遇到的问题是:模型在生成工具调用参数时,经常自己“补全”一些不存在的字段,甚至编造JSON结构,导致下游接口解析失败。已经试过few-shot和改写system prompt,好一点但没根治。想问问各位,有没有比较通用的约束方法?比如用function calling的schema强制校验,或者引入一个独立的校验/重试循环?还是说这种问题本质上是模型能力瓶颈,只能换更强的模型?希望有实际落地经验的朋友聊聊。
楼主
2026-08-12
Agent开发中工具调用老是出幻觉,大家是怎么约束的?
请 登录 后发表回复
全部回复
共 64 条
2楼
3天前
schema校验是底线,但光靠它不够,因为模型编的字段有时能通过语法校验却语义错误。我们线上做法是在工具层加一层参数白名单和类型强校验,解析失败就自动把错误信息塞回上下文让它重试,最多两轮。实测GPT-4o在明确报错反馈下修正率挺高,但prompt里工具描述千万别写太长,越啰嗦它越容易脑补。
3楼
1天前
加一层JSON Schema校验再配上失败重试,基本能压住大半,剩下的就是模型本身爱脑补。
4楼
18小时前
我们也在生产环境踩过这个坑,最后是schema校验加自动重试兜底才压下来的。具体做法是工具参数全部走function calling的严格schema,解析失败就把报错信息塞回去让它重生成,最多重试两次。不过说实话这只能减少,模型偶尔还是会硬编字段,尤其参数一多就容易飘。如果延迟不敏感,加一层独立的参数校验Agent确实更稳,但成本也上去了。
5楼
13小时前
我们之前也踩过这个坑,后来在function calling的schema里把字段全设成required,再加一层JSON Schema校验,不通过就直接打回重试,基本能压住大部分幻觉。但重试别超过两次,不然模型容易越改越离谱。另外system prompt里明确写“缺少参数就追问,不要自己编”,比单纯给例子管用。说到底还是得有个校验兜底,指望模型一次到位不太现实。