如果让 AI 写一段正则,它写错了,你只会告诉它“这段正则不对”
最近看了一篇关于 A-CEGIS 框架的论文,核心逻辑非常硬核:与其给 Agent 提供模糊的错误提示,不如直接甩给它一个“反例”(Counterexample)。论文里用的是自然语言转正则表达式(NL-to-Regex)这个场景,因为正则这东西逻辑极度确定,非常适合用来验证这种“反馈-修正”的闭环。
这说明对于逻辑密集型的任务,Agent 并不缺“意识到错了”的能力,它缺的是“知道错在哪”的具体证据。论文提到在经过 hardening(强化)的完整运行中,隐藏测试集的所有任务最终都被解决了,平均只需要 2.7 轮就能搞定。
下一篇
Cloudflare 这次用 Zstandard 搞出的 Cache →
现在的代码生成评测大多盯着单轮(Single-turn)的成功率,但实际用 Agent 的时候,真正的能力在于它能不能根据反馈把错的代码改对。A-CEGIS 的做法是:
1. Agent 提议: 模型先根据需求写出一个正则表达式。
2. 确定性校验: 用一个确定的 Oracle(判定器)去跑全匹配语义检查。
3. 精准喂料: 如果正则错了,系统不会只说“Error”,而是直接把导致错误的具体样本(比如一个本该匹配却没匹配上的字符串,或者一个不该匹配却匹配上的字符串)作为 witness 丢回给模型。
我比较看重论文里给出的这组对比数据,这直接体现了“精准反馈”和“泛泛而谈”的区别:
- Zero-shot(直接生成): 成功率只有 17%。
- Generic self-correction(通用的自我修正,即只告诉它错了): 成功率只有 27%。
- Error-only feedback(只给错误类型): 成功率也才 23%。
- A-CEGIS(带反例的诊断反馈): 在 4 轮对话的限制内,成功率直接拉到了 90%。
这说明对于逻辑密集型的任务,Agent 并不缺“意识到错了”的能力,它缺的是“知道错在哪”的具体证据。论文提到在经过 hardening(强化)的完整运行中,隐藏测试集的所有任务最终都被解决了,平均只需要 2.7 轮就能搞定。
这种思路如果应用到更复杂的代码 Debug 或者逻辑推理任务里,可能会比现在单纯堆 Prompt 效果好得多。与其教模型如何“思考”,不如直接给它“证据”。
免费 AI 工具箱 · 全部完全免费
更系统的工具评测汇总在AI工具实测笔记,有不少直接可参考的案例。