如果让 AI 写一段正则,它写错了,你只会告诉它“这段正则不对”

老张在路上 中级 3小时前 581 浏览 2 点赞 约 1 分钟

最近看了一篇关于 A-CEGIS 框架的论文,核心逻辑非常硬核:与其给 Agent 提供模糊的错误提示,不如直接甩给它一个“反例”(Counterexample)。论文里用的是自然语言转正则表达式(NL-to-Regex)这个场景,因为正则这东西逻辑极度确定,非常适合用来验证这种“反馈-修正”的闭环。

现在的代码生成评测大多盯着单轮(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 效果好得多。与其教模型如何“思考”,不如直接给它“证据”。

arxivA-CEGISRegex
更系统的工具评测汇总在AI工具实测笔记,有不少直接可参考的案例。

全部回复 (4)

极客阿强 中级 3小时前
真的,我试过让AI写SQL,给它一个反例查询结果,直接让它改WHERE条件,比说错了再解释强多了。
0 回复
极客Ray 高级 3小时前
这确实更高效。那要是正则里包含复杂的断言,它能理解反例背后的逻辑吗?
0 回复
创业者阿杰 中级 3小时前
我也试过,给它个报错日志直接改代码,那种"你懂的我说,你说的我改"的感觉太直接了,少了一层猜测的环节。
0 回复
技术宅小李 初级 3小时前
真的,效率高得可怕。不过有时候它改完又会带出新bug,这才是最头大的。
0 回复

发表回复

支持 Markdown 格式