如何解决智能体频繁幻觉、编造资料和工具参数乱填?
“不要胡说”不是一个可执行的智能体治理方案。
如果希望减少幻觉和工具参数错误,需要把自然语言任务拆成几个可验证的阶段:
用户输入 ↓ 任务和字段拆解 ↓ 证据与字段校验 ↓ 工具参数预检 ↓ 人工确认 ↓ 工具执行今天在 Haoee 上搭建了一个“采购申请提交前校验助手”,用来演示这套方法。
一、先限定智能体的职责
这个智能体不负责:
- 采购决策;
- 询价;
- 订单提交;
- 库存确认;
- 供应商确认;
- 生成订单号。
它只负责:
- 提取采购字段;
- 识别缺失和冲突;
- 检查工具参数;
- 输出人工确认提示。
职责越清晰,幻觉空间越小。
二、Planner:先拆解,不要直接执行
第一节点负责把自然语言拆成字段。
用户输入:
帮我采购 A4 纸 10 箱,下周送到办公室,价格按市场价。
拆解结果应该是:
物品:A4纸 数量:10 单位:箱 供应商:待补充 交付日期:不明确 交付地点:办公室,地址待补充 单价:不明确 申请人:待补充Planner 不应该主动补全:
- 某个常用供应商;
- 某个市场价格;
- 下周具体日期;
- 默认申请部门。
否则后续节点拿到的已经是被污染的数据。
三、Validator:对字段进行硬校验
第二节点负责校验字段。
可以把校验分成三类。
完整性校验
检查必填字段是否存在:
供应商 物品 数量 单位 交付日期 申请人类型校验
检查字段类型是否正确:
- 数量必须是数字;
- 数量必须大于 0;
- 交付日期必须是明确日期;
- 单位不能是“差不多”“一些”。
冲突校验
如果用户输入:
数量 10 箱,后面又说改成 20 箱。
系统不能自行选择一个值,而应该返回:
数量存在冲突,请人工确认最终数量。四、工具调用必须设置门禁
工具调用前可以定义三种状态:
BLOCKED 缺少字段、字段冲突或类型错误,禁止调用 READY_FOR_HUMAN_CONFIRMATION 参数完整,但仍需授权人员确认 EXECUTABLE 已完成授权,可进入正式调用本次 Demo 只实现到第二种状态,不执行真实采购工具。
这是有意为之,因为客户还没有确认:
- 采购系统;
- 工具接口;
- 授权人员;
- 供应商编码;
- 审批流程。
五、Reporter:只报告发生过的事情
第三节点负责输出最终报告。
如果没有真正执行采购工具,就不能出现:
- 采购已提交;
- 订单号已生成;
- 供应商已确认;
- 库存充足;
- 预计已送达。
更合适的表达是:
当前参数预检未通过,缺少供应商和明确交付日期,暂不允许进入提交环节。
六、知识库、Skills 和 MCP 怎么配置?
本次 Demo 没有配置知识库,因为重点是字段完整性和参数格式。
正式项目中,知识库可以提供:
- 供应商目录;
- 物品编码;
- 采购制度;
- 审批规则;
- 价格有效期。
本次没有配置 Skills 和 MCP Server,因为还没有接入真实采购工具。
等接口确认后,再将工具接入到校验节点之后,并增加:
- Schema 校验;
- 权限校验;
- 人工确认;
- 调用日志;
- 错误回滚。
七、今日实际搭建状态
智能体已经完成三段式编排并发布。
但发布对话测试时,测试环境出现模型路由未匹配问题,正常、缺失和越权三组对话均未完成端到端测试。
所以当前只能确认:
- 结构已配置;
- 字段规则已写入;
- 工具门禁逻辑已设计;
- 真实对话结果尚未验收通过。
这也说明交付中必须区分:
配置完成,不等于测试通过;测试通过,也不等于生产可用。