如何解决智能体频繁幻觉、编造资料和工具参数乱填?

“不要胡说”不是一个可执行的智能体治理方案。

如果希望减少幻觉和工具参数错误,需要把自然语言任务拆成几个可验证的阶段:

用户输入 ↓ 任务和字段拆解 ↓ 证据与字段校验 ↓ 工具参数预检 ↓ 人工确认 ↓ 工具执行

今天在 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 校验;
  • 权限校验;
  • 人工确认;
  • 调用日志;
  • 错误回滚。

七、今日实际搭建状态

智能体已经完成三段式编排并发布。

但发布对话测试时,测试环境出现模型路由未匹配问题,正常、缺失和越权三组对话均未完成端到端测试。

所以当前只能确认:

  • 结构已配置;
  • 字段规则已写入;
  • 工具门禁逻辑已设计;
  • 真实对话结果尚未验收通过。

这也说明交付中必须区分:

配置完成,不等于测试通过;测试通过,也不等于生产可用。