跳转至

Self-Evolving Coding Rules for AI Coding Agents

会议: NeurIPS 2026
arXiv: 2610.00650
代码: https://github.com/anomalyco/opencode
领域: 代码智能
关键词: AI编码智能体、编码规范自进化、提示词优化、最优计算预算分配、代码精简

一句话总结

本文提出针对 AI 编码智能体系统规则的自演化优化框架 RuleEvolve,利用 LLM 变异器、执行判别器与基于最优计算预算分配(OCBA)的战略变异机制,在保证代码功能正确率不降的前提下大幅压缩生成代码长度与推理 Token 开销。

研究背景与动机

随着 OpenHands、Cursor 和 Claude Code 等 AI 编码智能体(AI Coding Agents)的普及,软件开发模式正从底层手工编码转向高层系统编排。在这些智能体架构中,存放在代码仓库根目录的编码规则文件(例如 AGENTS.md 或 .cursorrules)被直接前置拼接在底层大模型的系统提示词中,对智能体生成代码的风格范式、逻辑结构、模块边界与上下文开销起着决定性作用。

然而,现存的智能体编码规范几乎完全依赖人工经验撰写。这种静态的人工规则不仅耗时耗力,而且往往缺乏针对特定开发任务或基座模型的精细适配;经验性研究甚至表明,冗余或不恰当的人工规则会诱导智能体生成过度防御性脚手架、冗长文档字符串甚至引发上下文幻觉,从而反向损害代码执行通过率与执行时延。

现有的自动化提示词优化技术(如 Prompt-Ops、DSPy、EvoPrompt 等)主要面向仅由数个简短句子构成的通用文本分类或推理指令。相比之下,AI 智能体的系统编码规范通常包含十几项结构化模块,其搜索空间呈现指数级膨胀;同时,智能体评测需要执行多轮工具调用、环境沙箱交互与单元测试验证,极度昂贵的单次验证成本使传统的随机变异或全量均匀搜索在计算上难以承受。核心 idea:将编码规则建模为带正确性下界约束的长度与推理成本双重优化问题,通过维护动态规则候选池并结合最优计算预算分配(OCBA)自适应偏置变异资源,实现规则集合在执行反馈下的闭环自演化。

方法详解

整体框架

RuleEvolve 的核心流程是一个由大模型驱动的变异器(Mutator)、代码执行判别器(Judge)以及候选规则池(Rule Pool)构成的闭环自演化流水线。框架以包含 \(m\) 个初始编码规则的候选池为起点,在每一轮演化迭代中,首先利用基于最优计算预算分配理论的策略性变异分配机制,将总计 \(N\) 个变异配额自适应分配给当前最具探索价值或平均表现最接近当前最佳的规则候选;随后利用变异器生成 \(N\) 个新规则变体并由判别器在基准沙箱中评测打分;最后执行剪枝,仅保留得分最高的 \(m\) 个规则进入下一轮迭代。

%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["初始规则输入与冷启动规则池<br/>大小 m 继承评估历史"] --> B["战略性变异配额分配<br/>基于 OCBA 动态权衡均值差距与方差"]
    B --> C["大模型驱动变异器<br/>自然语言指令指导语法重排与精简"]
    C --> D["沙箱执行判别器<br/>正确性惩罚项与代码字符长度联合打分"]
    D --> E["规则池更新与剪枝<br/>保留 Top-m 最优规则进入下一轮循环"]
    E -->|未达到最大迭代轮数 T| B
    E -->|完成 T 轮迭代| F["输出平均得分最高的最优自演化规则"]

关键设计

1. 约束优化判别目标:用负字符长度逼近推理成本并施加功能正确性硬惩罚

在智能体开发场景下,生成的代码必须首先是可运行且满足测试用例的,在此前提下降低代码长度与生成耗时才能真正转化为生产力。传统提示词优化往往采用标量加权或单纯奖励精简,极易诱导模型偷换逻辑生成极短的残缺代码。RuleEvolve 引入严格的单边正确性惩罚项,确保自演化过程绝不以牺牲功能正确性为代价:

\[S(r) = -|\mathcal{A}_{\theta}(x, r)| - \lambda \cdot \mathbb{E}_{x \in \mathcal{X}}\left[\mathcal{V}(x, \mathcal{A}_{\theta}(x, \emptyset)) - \mathcal{V}(x, \mathcal{A}_{\theta}(x, r))\right]_{+}\]

其中 \(|\mathcal{A}_{\theta}(x, r)|\) 表示智能体在规则 \(r\) 指导下生成代码的字符数;\(\mathcal{V}(x, y) \in \{0, 1\}\) 为测试用例验证器;\(\mathcal{A}_{\theta}(x, \emptyset)\) 为智能体在无外部规则时的基线表现;\([z]_{+} = \max(z, 0)\) 为截断算子;\(\lambda\) 为超参数(实验中设为 3,000)。由于实证显示代码字符数与模型生成阶段消耗的 Token 数量具有极高的线性相关性,该目标函数用纯文本字符长度直接代理推理成本,避免了在判别阶段对不同模型 API 计费细节的复杂耦合。

2. 基于 OCBA 的战略性变异分配:兼顾竞争候选探索与高不确定性方差削减

在每一轮迭代中,如何将有限的 \(N\) 次变异机会分配给现存的 \(m\) 个候选规则是演化效率的核心。均分分配或单纯依据平均得分比例分配的朴素策略容易陷入次优局部解或在明显低劣的规则上浪费昂贵的沙箱评估。RuleEvolve 引入随机仿真优化领域的最优计算预算分配(OCBA)准则,将最大化正确选择概率(Probability of Correct Selection, PCS)作为核心数学目标。

对于规则池中除当前最佳规则 \(b = \arg\max_{i} \hat{\mu}_i\) 之外的任意候选 \(i \neq b\),其变异权重按其相对均值差距与方差进行自适应分配:

\[w_i \propto \left(\frac{\hat{\sigma}_i}{\max(\hat{\mu}_b - \hat{\mu}_i, \epsilon)}\right)^2\]

而分配给当前最佳候选 \(b\) 的权重则整合所有竞争对手的不确定性:

\[w_b = \hat{\sigma}_b \sqrt{\sum_{i \neq b} \frac{w_i^2}{\hat{\sigma}_i^2}}\]

最终离散变异次数由各权重归一化后四舍五入得出:\(n_i = \text{round}\left(N \cdot \frac{w_i}{\sum_j w_j}\right)\)。这种设计确保了:一方面,均值极度接近最佳规则的“强劲挑战者”能够获得更多变异机会以实现超越;另一方面,方差较大的候选得到更多采样来消除随机评测噪声。为了解决新突变规则的冷启动评估问题,变异体直接继承父代候选的得分历史,保证统计样本量一致。

3. 语法结构与风格变异机制:针对长文档规则的多维度自然语言扰动

不同于短提示词的词汇替换,编码规范包含角色设定、技术栈要求、接口规范、测试策略与性能要求等多重层级。变异器 \(\mathcal{M}\) 依赖专门构造的元指令提示,要求模型在保持技术指导语义完整性的同时,对规则执行以下操作:重构表达句式使其更加紧凑、合并或重组冗余步骤、剥离不必要的过度防御性要求(如强制生成数百行 Google Style 详细文档字符串或无关配置),以及强化直接输出可执行核心逻辑的紧凑风格。

一个完整示例

假设初始规则池规模 \(m=3\),单轮变异总预算 \(N=10\)。初始候选经第一轮评测后得到得分分布:候选 \(r_1\)(当前最佳)均值 \(\hat{\mu}_1 = -650\),方差 \(\hat{\sigma}_1 = 50\);候选 \(r_2\)(强竞争者)均值 \(\hat{\mu}_2 = -670\),方差 \(\hat{\sigma}_2 = 40\);候选 \(r_3\)(落后候选)均值 \(\hat{\mu}_3 = -1200\),方差 \(\hat{\sigma}_3 = 60\)。

计算相对差距:\(\Delta_2 = -650 - (-670) = 20\),\(\Delta_3 = -650 - (-1200) = 550\)。 各非最优候选权重比值: $\(w_2 \propto \left(\frac{40}{20}\right)^2 = 4.0, \quad w_3 \propto \left(\frac{60}{550}\right)^2 \approx 0.012\)$ 计算最佳候选权重 \(w_1 = 50 \times \sqrt{\frac{4.0^2}{40^2} + \frac{0.012^2}{60^2}} = 50 \times 0.1 = 5.0\)。 归一化计算各候选分配的变异配额:\(w_1 + w_2 + w_3 \approx 9.012\)。计算得 \(n_1 \approx 5\),\(n_2 \approx 5\),\(n_3 \approx 0\)。资源完全聚焦于最有潜力的 \(r_1\) 与 \(r_2\),避免在 \(r_3\) 上浪费沙箱执行测试。

实验关键数据

主实验

论文在 BigCodeBench (BCB)、BigCodeBench-Hard (BCB-H) 和 HumanEval (HE) 三大基准上,针对 OpenAI SDK 框架(以最先进的 gpt-5.3-codex 为底座)与 OpenHands 智能体框架进行了系统评测。主要评价指标包括通过率(Pass Rate, PR)、平均代码行数(CLn)、平均代码字符数(CC)、平均耗时(Time)及平均 Token 开销(Tok)。

框架与基准 方法 通过率 PR ↑ 代码行数 CLn ↓ 代码字符数 CC ↓ 生成耗时 Time (s) ↓ Token 用量 Tok ↓
OpenAI SDK (BCB) No rule 0.47 35.7 1156 6.00 623.5
OpenAI SDK (BCB) Manual rule 0.45 69.0 2372 8.75 1022.0
OpenAI SDK (BCB) Prompt-Ops 0.48 13.8 474.4 2.30 581.7
OpenAI SDK (BCB) RuleEvolve 0.49 12.6 453.1 3.02 544.5
OpenAI SDK (BCB-H) No rule 0.25 42.3 1406 5.44 666.5
OpenAI SDK (BCB-H) Manual rule 0.23 84.8 2946 10.50 1147.0
OpenAI SDK (BCB-H) Prompt-Ops 0.23 15.7 583.0 2.90 588.7
OpenAI SDK (BCB-H) RuleEvolve 0.26 20.8 745.3 2.90 595.8
OpenHands (BCB) No rule 0.49 35.4 1060 10.60 1143.0
OpenHands (BCB) Manual rule 0.49 42.9 1350 12.20 1293.0
OpenHands (BCB) Prompt-Ops 0.43 20.1 615.2 40.20 903.1
OpenHands (BCB) RuleEvolve 0.52 26.6 814.6 9.76 1016.0

在跨仓库的 SWE-Bench Lite(100 个真实 GitHub 缺陷修复任务)拓展实验中,以 GPT-4.1-mini 为底层驱动模型,RuleEvolve 同样展现了优异的泛化能力:

方法 通过率 PR ↑ 代码行数 CLn ↓ 代码字符数 CC ↓ 耗时 Time (s) ↓ Token 用量 Tok ↓
No rule 0.330 8.5 380 131.17 911
Public rule 0.190 9.1 413 166.45 867
Prompt-Ops 0.080 5.4 236 175.24 684
RuleEvolve 0.340 5.7 254 297.46 722

消融实验

论文系统评估了变异分配策略对最终演化效果的影响(在 GPT-4.1-mini 底座与 BigCodeBench 上测试),并探究了规则各功能模块对代码长度的具体贡献归因。

变异分配策略变体 通过率 PR 平均代码行数 CLn ↓ 平均代码字符数 CC ↓ 平均耗时 Time (s) ↓ Token 用量 Tok ↓
均匀分配(Even) 0.500 23.4 753.2 16.82 998.4
按分值比例分配(Proportional) 0.500 23.9 781.3 17.15 1012.0
战略性分配(OCBA) 0.500 22.6 736.2 15.48 975.2

各规则模块在 GPT-4.1-mini 上的字符削减归因分析显示(无规则生成基线为 1,040.6 字符,全量演化规则生成 454.1 字符):

规则功能类别 对应规则章节数 贡献削减字符数 单章节平均削减字符
输出格式 / 自包含性约束 3 153.0 51.0
算法知识 / 算法范式指导 4 83.0 20.7
简洁风格要求 1 61.6 61.6
API / 第三方库惯用法 2 22.8 11.4
正确性策略 2 9.9 5.0
流程 / 预算类限制指令 4 -5.0 -1.2

关键发现

  • 人工公开规则的负迁移现象:直接使用社区流行的开源规则(如 awesome-cursorrules)往往显著损害性能。例如在 SWE-Bench Lite 上,公开规则使通过率从无规则基线的 0.330 暴跌至 0.190,且增加了代码行数与字符数;在 OpenAI SDK 上也会大幅增加代码长度与 API 响应延迟。
  • Prompt-Ops 的正确性崩塌:通用提示词优化基线由于缺乏严谨的沙箱回归约束,倾向于过度压缩代码,导致在 OpenHands BCB 上 PR 下降近 10 个百分点,在 SWE-Bench Lite 上 PR 甚至崩溃至 0.080。
  • 规则维度的“负向约束”效应:消融归因表明,“流程与预算”类指令(如要求智能体汇报步骤进度或自我监控预算)具有负收益,去除它们反而能进一步压缩无用输出;而明确的“输出格式约束”和“紧凑风格指令”是降低 Token 开销的最关键驱动力。
  • 演化收敛速度快:前 5 轮迭代即可完成 80% 以上的代码长度压缩与 Token 优化,并在后续迭代中保持极高通过率的平稳收敛。

亮点与洞察

  • 引入 OCBA 优化仿真预算:巧妙利用统计仿真领域的计算预算分配算法,依据均值相对差距与方差动态分配变异算力,在有限的沙箱评估成本下将探索效率最大化。
  • 将软件工程开销转化为系统提示词演化目标:首次将智能体系统提示规则作为一等公民进行自动化闭环调优,避免了过去仅靠开发者手工猜测修改 AGENTS.md 的局限。
  • 可复用的通用迁移性:演化出的规则具有跨模型与跨架构的强通用性,基于轻量模型训练出的精简规则迁移至更强大的基座时依然能保持高通过率与低资源消耗。

局限与展望

  • 作者承认的局限:代码极度精简在面对极端复杂的重构任务时可能轻微影响边界处理;演化过程高度依赖变异大模型的指令理解与改写质量;目前评估函数主要依赖字符数逼近成本,未深度整合软件工程中的长期可维护性与圈复杂度指标。
  • 潜在改进方向:可进一步将模块化的 AST 静态语法树分析与测试用例执行耗时纳入评分函数,建立多目标帕累托前沿筛选,同时探索跨任务自适应动态切分规则的演化机制。

相关工作与启发

  • vs Prompt-Ops:Prompt-Ops 适用于短文本分类提示词,在处理包含几十条复杂约束的长规则时变异空间过大,且缺乏针对长程任务执行失败的单边惩罚机制,极易以牺牲正确率为代价换取简洁性;RuleEvolve 引入严格正确性约束和 OCBA 预算分配,全面保障功能完备性。
  • vs 人工手写规则(Awesome-cursorrules):人工规则普遍偏向防御性编程、完整类型标注与冗长注释,诱导智能体在简单的生成任务中堆砌模板代码;RuleEvolve 通过真实测试反馈闭环,剪除了所有无用的防御性膨胀代码。

评分

  • 新颖性: ⭐⭐⭐⭐☆ [首次将 AI Coding Agent 的系统级长文档编码规范纳入闭环自演化框架,并引入 OCBA 动态分配变异资源]
  • 实验充分度: ⭐⭐⭐⭐⭐ [覆盖 2 大智能体框架、4 种主力模型、3 个单元测试级基准与真实仓库 SWE-Bench Lite,包含 multi-seed 与细粒度规则归因]
  • 写作质量: ⭐⭐⭐⭐⭐ [问题形式化严谨,数学公式与算法流程完备,实验设计层次清晰]
  • 价值: ⭐⭐⭐⭐⭐ [对当下工程落地中 Cursor/Claude Code 等智能体规则的自动化构建与低成本部署具有重要实用价值]