AdaCoder:面向多样化大语言模型的自适应规划式多智能体代码生成框架

@莫得名字 2025-12-25 17:01:41

近年来,基于大语言模型(LLM)的多智能体代码生成框架(如 MapCoder、AgentCoder)在 HumanEval 等基准上取得了显著进展。然而,现有工作几乎全部围绕 ChatGPT 系列闭源模型(如 GPT-4)进行设计与验证,其在开源 LLM 上的泛化能力(generalizability)尚缺乏系统研究。

来自重庆大学与浙江大学的研究团队在最新论文《AdaCoder: An Adaptive Planning and Multi-Agent Framework for Function-Level Code Generation》中首次系统评估了四种 SOTA 多智能体框架(AgentCoder、MapCoder、INTERVENOR、Self-Collaboration)在六种开源 LLM(CodeLlama-Python 7B/13B/34B、DeepSeek-Coder 1.3B/6.7B/33B)上的表现,并发现:

🔴 现有框架泛化性极不稳定:AgentCoder 与 Self-Collaboration 在多数开源模型上性能反而下降;MapCoder 虽表现最佳,但推理成本极高(平均 token 消耗 ↑23×,推理时间 ↑15.7×)。

基于此,作者提出 AdaCoder —— 一种自适应规划(Adaptive Planning)的多智能体框架。AdaCoder 通过动态选择是否启用规划机制,在保持高泛化性的同时显著降低计算开销。实验表明:

  • 性能更强:在 10 种 LLM(6 开源 + 4 闭源)上平均 Pass@1 提升 50.0%超越 MapCoder 27.69%
  • 成本更低:相比 MapCoder,token 消耗减少 12×推理速度提升 16 倍
  • 设计更合理:通过消融实验证明其四个智能体(编程助手、代码评估器、调试专家、规划工程师)均不可或缺。

动机:现有框架为何难以泛化?

作者首先对四个 SOTA 多智能体框架在 HumanEval 上进行系统评估(见 Table I),揭示两大核心问题:

1. 迭代修复机制普遍失效

多数框架依赖 LLM 进行多轮“生成 → 测试 → 修复”循环。然而在开源模型上,这种迭代几乎无效:

  • 45.46% 的修复属于无效操作(如代码不变、错误类型不变、函数体变空)。
  • 即使增加迭代次数(k=1→5),Pass@1 平均仅提升 1.6%,却带来数倍 token 与时间开销。

 

2. 规划机制高度依赖模型能力,且成本高昂

MapCoder 之所以表现最好,因其采用 Multi-Plan Coding:先生成多个相似子任务,再为每个子任务生成执行计划。但该机制存在严重缺陷:

  • 生成的子任务与计划高度重复(见 Figure 3),多样性不足;
  • 引入额外规划步骤,使时间复杂度从 O(k) 升至 O(kt)
  • 在低能力模型上提升显著(CodeLlama-34B ↑68.76%),但在高能力模型上增益有限(DeepSeek-33B 仅 ↑4.72%)。

 

更关键的是,作者发现:规划与非规划机制具有互补性(见 Figure 4 的 Venn 图):

  • 规划方法独占解决 41 个样本,非规划方法独占解决 21 个;
  • 二者交集 56 个,总覆盖 97 vs 77 —> 联合使用可覆盖更多场景

 

AdaCoder 方法论:自适应规划 + 轻量修复

AdaCoder 的核心思想是:仅在必要时启用规划机制,并用规则式调试替代 LLM 修复以降低成本。其包含四个智能体(见 Figure 5):

Phase-1:无规划初始生成(Unleash Native Power)

  • Programming Assistant:直接根据任务描述生成代码(无 plan)。
  • Code Evaluator:使用 HumanEval 提供的真实测试用例(而非 LLM 生成)进行轻量执行验证。
    • 若通过 → 结束;
    • 若失败 → 提取具体错误信息(如 SyntaxError、AssertionError),进入 Phase-2。

⚠️ 关键设计:避免 LLM 生成测试用例,防止“用错误测试引导错误修复”。

Phase-2:自适应规划式修复(仅在 Phase-1 失败时触发)

  • Debug Specialist(规则式):
    • 修复三类常见简单错误:缩进不一致函数截断缺失 import
    • 基于作者前期工作 LlmFix,平均修复耗时仅 10ms。
  • Code Evaluator(再次测试):
    • 若仍失败 → 判断为逻辑错误(in-depth error),交由 Prompt Engineer
  • Prompt Engineer(LLM-based):
    • 根据实际错误反馈生成针对性执行计划(而非 MapCoder 的通用子任务);
    • 例如:“上次返回了最小质因数,但任务要求最大 → 改用 while 循环不断除尽因子”。
  • Programming Assistant:基于新 plan 重新生成代码。


实验结果:全面超越 SOTA

主实验(RQ3)

在 HumanEval + MBPP 上,AdaCoder vs 基线(Table V, VI):

框架

HumanEval Avg Pass@1

MBPP Avg Pass@1

总提升

Direct(无框架)

51.0%

56.0%

MapCoder

73.5%

61.3%

+32.2%

AdaCoder

78.9%

81.4%

+50.0%

  • 在 GPT-4o 上达 98.17% Pass@1,在 CodeLlama-34B 上提升 85.5%
  • 对所有 10 个 LLM 均有稳定提升,证明其强泛化性。

成本分析(Table IX, X)

框架

Token 消耗(vs Direct)

推理时间(vs Direct)

MapCoder

↑26.8×

↑16.0×

AdaCoder

↑2.2×

↑1.0×

🚀 AdaCoder 比 MapCoder 快 16 倍,token 少用 12 倍!

消融实验(RQ4,Table XI)

移除任一组件均导致性能显著下降:

  • 移除 Prompt Engineer:↓16.87%
  • 移除 Debug Specialist:↓9.60%
  • 同时移除两者:↓23.98%

证明 AdaCoder 的自适应规划规则调试均不可或缺。


启示与贡献

  1. 不要盲目迭代:对大多数 LLM,多轮 LLM 自修复收益极低,应优先考虑其他机制。
  2. 规划需自适应:仅在初始生成失败时启用规划,并基于真实错误反馈生成 plan,而非预设模板。
  3. 简单错误用规则修复:缩进、缺失 import 等问题无需 LLM,规则方法更快更稳。
  4. 测试用例质量至关重要:应使用任务自带的真实测试,避免 LLM 生成不可靠测试。

开源地址https://github.com/YXingo/AdaCoder

...全文
142 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

109

社区成员

发帖
与我相关
我的任务
社区描述
本社区由重庆大学与云从科技联合发起并共同运营,旨在打造一个开放、前沿、务实的知识共享与交流平台。 我们聚焦于两大前沿技术领域:通用语言大模型 (LLM)与知识协同技术。
软件工程 个人社区 重庆·沙坪坝区
社区管理员
  • 阿大abcd
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧