最近在做一个给内部运营用的AI Agent,主要就是让大模型调用几个内部API查数据、发通知。我在Prompt里写了详细的工具说明,还给了JSON Schema示例,但测试的时候它还是经常把参数搞混。比如让它查“上周的订单”,它会把日期范围填成“2025-03-01到2025-03-07”(实际是上周),或者把customer_id和order_id弄反。我试过加few-shot例子、用更严格的系统提示词,甚至直接规定“必须按schema填充”,但效果不稳定,同一个Prompt有时对有时错。想问问大家,这种“工具调用参数幻觉”有没有什么工程上的通用解法?还是说我只能靠加校验和重试逻辑兜底?
楼主
20天前
调了三天Prompt,Agent还是总把工具参数传错,求大佬指点迷津
请 登录 后发表回复
全部回复
共 44 条
2楼
3天前
校验和重试逻辑肯定得加,这属于工程底线,别指望模型能100%按schema来。另外你可以试试把参数约束直接写进工具描述的开头,比如“customer_id是8位数字,order_id是纯字母”,模型对具体格式的敏感度比抽象schema高得多。日期这种,干脆在Prompt里不给具体值,让它输出相对日期表达式,后端再解析成绝对时间,能少很多幻觉。
3楼
3天前
我之前也踩过这个坑,后来发现光靠prompt真的压不住模型对参数的“自由发挥”。我的做法是给每个工具单独接一个小的校验函数,传参前先强制过一遍类型和必填项,错了就直接返回错误让模型自己纠错,比单纯重试高效得多。另外日期这种相对时间,我干脆在prompt里写成“今天是几号,上周指哪几天”,让它先算出来再填,错误率降了不少。
4楼
2天前
说实话这种问题我碰到过挺多次,后来发现别光在prompt上死磕,直接在代码里做一层参数校验和自动修正比啥都靠谱,比如日期就按自然语言解析后格式化,ID就按类型正则匹配。另外可以试试把工具定义里的参数描述改成“客户ID(纯数字)”这种带约束的写法,模型犯错率会降不少。不过老实说,完全靠模型自觉不现实,重试逻辑还是得留着,只不过别在用户层面重试,内部静默纠正就行。
5楼
1天前
校验和重试必须加,但更建议让模型先输出意图再填参,把参数生成拆成两步。