先看现象。自研 Agent 用 gpt-4o 输出 JSON 计划,提示词要求 step 从 1 递增,模型给出 1、2、2、4,执行器按编号去重,第三步被跳过,日志里只有三条记录。

排查方向其实有限,先把可能性排一排。提示词没有约束编号必须唯一。另一种情况是执行器拿编号当字典键,重复项被覆盖。

还有一种情况,模型复制了上一条内容,没有重新编号。

另外,计划没有做顺序和完整性校验。

动手时先把模型返回的计划原样打印出来

python -c "import json;print(json.load(open('plan.json')))"

再往下执行器改用数组下标而不是 step 字段

python -c "print('for i, s in enumerate(steps): run(i, s)')"

接着用 Pydantic 校验编号唯一且连续

python validate_plan.py --unique-step true

末了重跑同一任务确认四步都执行

python run_plan.py --input plan.json --trace

怎么算真的好了,看的是同一批现象。四步都出现在执行日志里,编号校验通过,重跑三次结果一致。

让模型生成带序号的列表时,序号不可信,执行顺序应该由数组位置决定,编号只作为展示字段保留。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189