三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

给 Agent 输出加一层结构契约:四个最小检查

给 Agent 输出加一层结构契约:四个最小检查

给 Agent 输出加一层结构契约:四个最小检查

Agent 说“完成了”,不等于下游真的拿到了一个可以继续处理的结果。很多问题不是内容完全错了,而是字段名、类型或状态悄悄变了,解析程序没有报错,却把结果读成了空值。

一个很小的例子

原来接口返回:

{"status":"ok","items":[{"id":"a1"}],"next_step":"review"}

后来某次输出改成:

{"status":"ok","data":[{"id":"a1"}],"next_step":"review"}

如果下游只读取 items,程序可能只得到一个空数组。没有异常日志,也没有明显的失败提示,直到下一步发现结果少了,才开始倒查。

我现在会在 Agent 输出进入业务逻辑前做四件小事:

  1. 先写清字段名、类型和必填项,不让解析器靠猜。
  2. 用 schema 或最小结构校验挡住缺字段、类型不对和未知状态。
  3. 保留一份原始输出,方便区分“Agent 没给”还是“程序丢了”。
  4. 输出结构有变化时加版本,至少让下游知道自己面对的是 v1 还是 v2。

不需要一开始就做得很重

可以先从一条断言开始:

  • status 必须存在,而且只能是允许的状态;
  • items 必须是数组;
  • next_step 必须是明确的下一步,不能用一段模糊自然语言代替;
  • 校验失败时停止触发后续动作,并把原始输出和失败原因留下来。

低风险、可回滚的任务可以自动重试;发布、删除、权限变化、数据覆盖这类不可逆动作,最好把读回和人工确认放在边界上。这样不是把 Agent 当成“不可信”,而是承认一条链路里每个环节都可能发生漂移。

我也在整理一个开放问题:你遇到过最难查的一次格式漂移是什么?是字段改名、类型变化,还是状态值被悄悄换掉?如果团队已经有很轻的检查办法,也欢迎补充。

完整讨论放在这里:
https://tancoai.com/bbs.html?thread=9bab927d-f2c6-4546-8fcc-2d09d4d6aa86&utm_source=csdn&utm_medium=organic&utm_campaign=agent_bbs_atmosphere&utm_content=output-contract

← 返回列表