验证器给什么反馈,决定 Agent 能不能修好チャプター1×0:08事件播报1:10反馈字段2:12技术拆解2:40落地建议0:003:470:08host今天的主线不是昨夜的产品更新,而是一篇 7 月 15 日提交到 arXiv 的软件工程论文,标题是《Structured Feedback Improves Repair in an LLM Agent Loop》。它研究一个很具体的问题:Agent 第一次生成的方案失败以后,验证器到底应该把什么交给下一次模型调用?0:29host论文作者做了一个叫 VeriHarness 的代码控制循环。模型负责生成候选方案,外部验证器负责决定接受还是拒绝,预算、调用次数、失败反馈和每一步 trace 都由代码保存。模型自己说「我完成了」,不能当成验收结果。0:46host实验不是让 Agent 写一篇漂亮的解释,而是让它在 TextWorld 里完成任务。研究者准备了 50 个固定游戏,每个游戏有三个房间、四个物体和两步任务,Agent 输出最多四条命令的 JSON 计划,最多调用四次。测试了 Qwen2.5-Coder 14B 和量化版 Llama 3.1 8B 两个模型。1:10host论文比较了四种反馈。第一种只把原始报错丢回去,叫 RawDiag。第二种用自然语言说清失败位置、模型实际给出的值和可接受的替代项。第三种只给位置和观测值,不给替代项。第四种把这些信息写成稳定字段,也就是 TypedFields。1:28host结果很直接。对 Qwen,原始报错的成功率是 50 个任务里完成 14 个,也就是 28%。加上结构化的修复信息后,完成 36 个,成功率 72%,提高 44 个百分点。Llama 从 8 个提高到 29 个,从 16% 到 58%,提高 42 个百分点。1:49host这里最值得注意的地方,不是 JSON 这三个字。自然语言反馈只要包含同样的修复值,Qwen 也能到 70%,Llama 也能到 58%。把自然语言换成带键名的字段,增益只有 Qwen 多 2 个百分点,Llama 没有增加。真正有用的是告诉模型「哪里错了、实际是什么、可以换成什么」,不是把报错包装得更像接口文档。2:12host论文还做了一个很重要的边界实验。在 HumanEval 检查里,验证器只暴露一个可见测试。如果第一版答案通过这个测试,系统就没有修复机会;即使它随后在隐藏测试里失败,任何反馈策略也看不到问题。结果是,Qwen 的 15 个任务里有 14 个通过隐藏测试,剩下 1 个就是「可见测试通过、隐藏测试失败」。结构化反馈救不了验证器没有检测到的错误。2:40host第二步,把「模型是否满意」从控制面拿出去。模型可以提出修复,但接受权应该交给外部规则、测试或人工审批。每次调用保存候选、验证结果、反馈内容和耗时,下一次失败时看到的就不是一串聊天记录,而是一条可以回放的执行轨迹。2:59host第三步,别默认字段化一定优于自然语言。可以比较原始报错、自然语言修复信息和字段化修复信息,分别测成功率、重试次数、成本和隐藏错误。论文的边界也要记住:它只测了 50 个 TextWorld 游戏和两种量化模型,没有覆盖代码仓库级修复或生产 Agent。3:21host今天带走一个问题:你的 Agent 下一次重试时,拿到的是「失败了」,还是「第几步、看到了什么、有哪些合法替代、还剩多少预算」?这四类信息如果不在系统的显式契约里,所谓的自我修复,很可能只是让模型重复猜测。