基于LLM的代码生成Agent综述

0 阅读17分钟

基于LLM的代码生成Agent综述

原文:A Survey on Code Generation with LLM-based Agents 作者:Yihong Dong 等(北京大学) 来源:arXiv:2508.00083v2, 2025


摘要

由大语言模型(LLM)驱动的代码生成Agent正在彻底变革软件开发范式。与以往的代码生成技术不同,代码生成Agent具有三个核心特征:

  1. 自主性:能够独立管理从任务分解到编码和调试的完整工作流程
  2. 任务范围扩展:能力从生成代码片段扩展到覆盖完整的软件开发生命周期(SDLC)
  3. 工程实用性增强:研究重点从算法创新转向实际工程挑战,如系统可靠性、流程管理和工具集成

本文系统性地综述了基于LLM的代码生成Agent领域,追溯了该技术从诞生到现在的发展轨迹,系统分类了其核心技术(包括单Agent和多Agent架构),详细阐述了其在完整SDLC中的应用,总结了主流评测基准和指标,并整理了代表性工具。最后,通过分析主要挑战,提出了若干基础性的长期研究方向。


1. 引言

随着ChatGPT等大语言模型的出现,代码生成从简单的"代码补全"发展到"AI Agent主导开发",经历了以下演进阶段:

传统代码生成(规则/模板)
    ↓
预训练语言模型(CodeBERT、CodeT5)
    ↓
大语言模型(GPT-4Code Llama)
    ↓
基于LLM的代码生成Agent(2024-至今)

代码生成Agent 与传统LLM代码生成的本质区别:

特性传统LLM代码生成代码生成Agent
自主性需要人工逐步引导自主规划、执行、调试
任务范围函数级代码片段完整软件项目
工具使用集成编译器、测试框架、浏览器等
反馈循环单次生成多轮迭代自我修复
环境感知仅输入上下文感知文件系统、终端、代码库

2. 背景知识

2.1 传统代码生成技术

  • 归纳编程:从输入输出示例推导程序,适用范围窄
  • 基于语法的方法:利用抽象语法树(AST),如TreeGen
  • 检索增强方法:从代码库检索类似片段辅助生成

2.2 预训练代码模型

模型类型特点
CodeBERT编码器双模态预训练(NL+PL)
GraphCodeBERT编码器引入数据流图结构
CodeT5编码器-解码器标识符感知的统一预训练
Codex/GPT-4解码器大规模参数,强大的代码生成能力
Code Llama解码器Meta开源,支持代码填充

2.3 LLM时代的代码生成

LLM开启了代码生成的新篇章:

  • GPT-4/Claude等闭源模型展现出接近人类的编程能力
  • Code Llama/DeepSeek-Coder等开源模型不断缩小差距
  • 关键技术进步:指令微调(SFT)、人类反馈强化学习(RLHF)

2.4 从LLM到Agent:关键范式转变

Agent = LLM + 感知 + 规划 + 行动 + 记忆

            ┌─────────────┐
            │   LLM大脑    │
            │ (推理与决策)  │
            └──────┬──────┘
                   │
     ┌─────────────┼─────────────┐
     │             │             │
  ┌──▼──┐     ┌──▼──┐     ┌──▼──┐
  │感知  │     │规划  │     │行动  │
  │(环境) │     │(分解) │     │(工具) │
  └─────┘     └─────┘     └──┬──┘
                              │
                        ┌─────▼─────┐
                        │  记忆系统  │
                        │(短期/长期) │
                        └───────────┘

3. 单Agent核心技术

3.1 规划与任务分解

Agent需要将复杂的编程任务分解为可管理的子任务:

3.1.1 链式推理与分步规划

  • Self-Planning:首个让Agent自动进行任务分解并制定执行步骤的工作,降低复杂需求的编码难度
  • CodeChain:利用链式自修正机制实现模块化代码生成
  • Self-Edit / Self-Debug:生成-编辑-验证的链式循环

3.1.2 树搜索与探索策略

  • LATS(语言Agent树搜索):将蒙特卡洛树搜索与LLM结合,以规划、行动和推理为一体
  • CodeTree:采用树结构搜索和验证机制,降低处理复杂代码生成任务的失败率
  • SWE-Search:基于搜索的软件工程Agent,通过树搜索方法高效定位和修复缺陷

3.1.3 反馈驱动的迭代优化

  • Self-Refine:Agent通过自我反馈迭代改进输出
  • DARS:动态调整策略,根据代码执行反馈调整生成结果,在SWE-Bench Lite上比线性生成方法高出47%的Pass@1
  • Agentless:无需复杂Agent框架的两阶段方法(定位+修复)

3.2 工具使用与环境交互

Agent通过外部工具扩展能力边界:

工具类型示例用途
代码执行器Python解释器、终端运行和验证代码
搜索工具代码库搜索、网络搜索检索信息和依赖
文件操作读写文件、目录浏览操作项目文件
测试框架pytest、JUnit自动化测试
版本控制Git操作代码管理

代表性工作:

  • SWE-Agent(普林斯顿):首个端到端自主解决GitHub Issue的Agent,设计了Agent-Computer Interface(ACI),定义了Agent与开发环境交互的标准接口
  • CodeAgent:集成5种编程工具,使Agent能在多文件结构中检索第三方依赖并实现跨模块函数调用
  • ToolGen:构建具有插件能力的Agent,可根据场景自动选择和调用工具
  • HyperAgent:覆盖从问题分解到补丁验证的完整生命周期

3.3 上下文工程

在真实软件开发中,信息分散在多个文件、模块和文档中:

  • 检索增强生成(RAG):动态检索相关代码上下文
  • 长上下文建模:处理大型代码库中的长距离依赖
  • 上下文压缩:将关键信息压缩到有限的上下文窗口中

上下文的四类典型问题:

  1. 上下文中毒:错误或幻觉信息污染后续推理
  2. 上下文干扰:冗余信息淹没关键信号
  3. 上下文混淆:格式不一致导致误解
  4. 上下文冲突:矛盾信息导致决策错误

4. 多Agent核心技术

4.1 工作流设计与角色分配

多Agent系统模拟真实软件团队的协作模式:

4.1.1 顺序流水线模式

需求分析Agent → 架构设计Agent → 编码Agent → 测试Agent → 代码审查Agent

代表:Self-Collaboration — 首个将黑板模型引入代码生成任务的系统

4.1.2 循环迭代模式

     编码Agent
        ↑↓
审查Agent ← → 测试Agent

代表:ChatDev — 通过Agent间代码片段交流减少幻觉问题

4.1.3 完整团队模拟

产品经理Agent → 架构师Agent → 工程师Agent → QA Agent → 项目经理Agent

代表:MetaGPT — 模拟完整软件公司组织结构,自动分配资源和调度开发序列

4.2 上下文管理与记忆技术

多Agent系统需要共享和引用任务描述、历史修改和中间产物等长距离依赖信息:

  • 黑板模型(Self-Collaboration):建立显式共享记忆空间,所有Agent可读写
  • 冯诺依曼架构(L2MAC):解耦指令寄存器和文件存储模块,突破上下文窗口限制
  • 仿生记忆系统(Cogito):借鉴神经生物学的三阶段认知-记忆-成长模型
    • 短期记忆:任务执行期间的即时状态维护
    • 长期知识库:通用知识的积累
    • 进化成长单元:抽象能力的持续增强
  • 自组织Agent(SoA):根据任务复杂度自动扩展Agent池,每个Agent在固定大小的上下文窗口内工作

4.3 多Agent协同优化

引入团队级协作建模机制来联合优化多个Agent的行为:

  • Lingma SWE-GPT:模拟真实软件开发流程(代码库理解→故障定位→补丁生成),通过监督微调优化多阶段协作
  • CodeCoR:在4个专用Agent之间建立生成-测试-修复循环,通过互评机制裁剪低质量输出
  • SyncMind:解决多Agent更新共享代码库时的"状态不同步"问题
  • CANDOR:通过群组讨论策略和多审查Agent共识来减少幻觉传播

5. 应用场景

5.1 自动化代码生成与实现

函数级代码生成:

  • Self-Planning、CodeChain、FlowGen、PairCoder、CodeTree、CodeCoR
  • QualityFlow:引入想象执行机制快速检查代码质量
  • DARS:在SWE-Bench Lite上达到47% Pass@1

仓库级代码生成:

  • ChatDev:多Agent通信减少幻觉
  • MetaGPT:模拟真实开发团队
  • CodeS:通过预生成仓库结构草图克服端到端生成的结构混乱
  • SoA:无需手动中央调度器的多Agent系统
  • GameGPT:从自然语言描述到可运行游戏的自动构建

5.2 自动化调试与程序修复

  • RepairAgent:提供14种常用修复工具,在Defects4J上自动修复164个缺陷
  • SWE-Agent:端到端自主解决GitHub Issue
  • MAGIS:多Agent模拟GitHub Issue解决流程,解决率达13.94%
  • HyperAgent:覆盖从问题分解到补丁验证的完整生命周期
  • AutoSafeCoder:通过静态安全检测和模糊测试双重反馈,漏洞率降低约13%
  • PatchPilot:高效定位策略,减少token消耗
  • Thinking-Longer:让小模型通过增加思考复杂度接近大模型的修复能力

5.3 自动化测试代码生成

单元测试:

  • TestPilot:为JavaScript API自动生成测试用例,在25个npm包上达到52.8%分支覆盖率
  • CANDOR:端到端生成Java单元测试,超越EvoSuite

集成测试:

  • XUAT-Copilot:实现微信支付等移动支付应用的自动化集成测试
  • LogiAgent:自动检测业务逻辑问题

安全测试:

  • SeedMind:通过LLM自动生成高质量种子输入用于灰盒模糊测试
  • ACH(Meta):通过LLM生成符合程序语义的变异体,提高变异测试效率

测试流程自动化:

  • AUITestAgent:通过纯自然语言测试需求执行全流程GUI操作和功能验证
  • HEPH(NVIDIA):验证C/C++嵌入式系统的正确性

5.4 自动化代码重构与优化

结构性代码重构:

  • EM-Assist:为过长函数提供提取方法建议
  • iSMELL:自动检测多种代码异味并生成重构建议

性能优化:

  • LASSI-EE / SysLLMatic:分析性能和能耗指标,通过多轮诊断和优化提升性能

5.5 自动化需求澄清

  • ClarifyGPT:通过检查多次生成结果的一致性判断是否存在歧义需求
  • TiCoder:通过自动生成测试用例引导用户澄清需求
  • InterAgent:验证Agent在识别不明确指令和主动澄清方面的能力

6. 评测方法与基准

6.1 评测基准

类别基准描述
函数/类级HumanEval(OpenAI, 2021)里程碑意义,将评测标准从文本相似度转向可执行测试
函数/类级MBPP(Google)入门级Python编程任务
编程竞赛级APPS10,000题,三个难度级别
编程竞赛级CodeContests13,328题,真实编程竞赛
编程竞赛级LiveCodeBench持续更新,避免数据污染
真实场景SWE-Bench大规模GitHub Issue解决基准(千级真实Issue)
真实场景SWE-Bench-Lite300个更自包含的功能缺陷修复任务
真实场景SWE-Bench-VerifiedOpenAI人工验证的500个高质量实例
真实场景CodeAgentBench5个真实Python项目,101个任务
真实场景Web-Bench从零开始的Web项目开发任务
真实场景Aider225道高难度多语言编程练习

6.2 评测指标

功能正确性指标:

  • Pass@k:最常用指标,k次采样中至少一个通过所有测试的概率

Pass@k=Eproblems[1(nck)(nk)]\text{Pass@k} = \mathbb{E}_{\text{problems}} \left[ 1 - \frac{\binom{n-c}{k}}{\binom{n}{k}} \right]

其中 n 为总采样数,c 为正确样本数。

Agent专用评测指标:

  • 任务成功率:Agent能否解决给定问题
  • 效率与成本:API调用成本、token消耗、延迟
  • 轨迹效率:完成任务所需步骤数
  • 工具使用准确率:能否正确选择和使用工具

软件质量指标:

  • 安全性(SEC-bench)
  • 代码可读性与复杂度
  • 可维护性(模块间耦合度)
  • 测试覆盖率

7. 已部署的代码生成Agent工具

工具演进的三个阶段

阶段一:副驾驶(Co-pilot) → 阶段二:协作伙伴(Collaborator) → 阶段三:自主团队(Autonomous Team)

主流工具对比

工具核心范式集成方式上下文引擎最佳场景优势局限
GitHub Copilot编程助手IDE扩展插件检索增强代码补全广泛采用,擅长常规任务需人工监督,可能忽略全局上下文
Devin自主开发团队独立在线平台沙箱知识库端到端代码生成高自主性,处理完整任务生命周期实际可靠性低,结果不可预测,易陷入循环
Cursor协作伙伴AI原生IDE向量语义索引代码补全/开发/问答深度代码库理解,优秀交互体验自主Agent能力较弱
通义灵码协作伙伴企业级平台集成仓库知识图谱代码开发系统化探索解决方案空间更聚焦企业级应用
Claude Code自主开发团队命令行界面超长上下文窗口+Agent搜索端到端代码生成/问答强大的代码Agent,全局代码库理解成本可能较高

各工具技术要点:

  • GitHub Copilot:技术核心在于RAG动态构建上下文 + GitHub Actions云端沙箱安全执行
  • Devin:2024年初发布,号称首个AI软件工程师。但实际使用暴露出成功率低、频繁循环、幻觉难以解决等问题
  • Cursor:通过深度定制VS Code实现本地优先的Agent架构,关键技术是代码库的持久化向量嵌入索引
  • 通义灵码:基于CodeQwen构建代码库知识图谱,创新使用蒙特卡洛树搜索进行系统性导航和故障定位
  • Claude Code:使用高达200K token的超长上下文窗口实现整体语义理解,结合混合推理引擎和扩展思考模式

8. 挑战与未来方向

8.1 Agent核心能力的局限性

领域特定任务处理

  • 当前Agent在需要深度领域知识和复杂专业推理的任务中表现出明显局限
  • 缺乏结构化领域知识库和专业化训练,容易产生领域相关的理解偏差

意图理解与上下文感知

  • 人类指令往往具有非正式和模糊的特征
  • Agent需要提升意图推理和上下文感知能力,引入交互式澄清机制

大规模复杂代码库处理

  • 在长上下文建模、跨文件依赖分析和整体软件架构理解方面能力有限

多模态理解与生成

  • 现代软件开发是多模态过程(UI设计图、架构图、流程图)
  • 当前Agent无法充分理解和利用多模态信息进行代码生成

上下文工程

  • 信息分散在多个文件、模块和文档中
  • 上下文工程不仅是提示词设计的延伸,而是一种动态方法论——核心目标是在正确的时间、以适当的格式,将正确的信息和工具传递给模型

8.2 Agent系统的鲁棒性与可更新性

错误级联效应

  • 在多Agent系统中,上游Agent的微小偏差(如一个错误的API调用参数)被下游Agent作为输入
  • 偏差沿协作链逐级放大,形成错误级联效应,最终导致整个任务的系统性失败

多Agent协调与管理复杂性

  • Agent数量增加时,交互关系呈指数增长
  • 可能出现通信瓶颈、职责模糊和目标漂移等问题

Agent知识更新与持续学习

  • 软件开发环境本质上是动态的,新的编程语言特性和框架版本不断涌现
  • LoRA等高效微调方法可增量调整参数,但学习新知识效果有限且会遗忘旧知识
  • RAG依赖外部向量数据库,需持续维护且缺乏与模型内部知识的深度整合

8.3 工具集成与部署的挑战

工具使用的灵活性与安全性

  • 如何让Agent超越静态工具的约束,实现按需灵活的工具发现和集成
  • 同时确保工具执行的安全性,防止潜在的恶意操作

Agent系统的高运营成本

  • 每次Agent间交互和LLM调用都产生大量开销
  • 随着任务复杂度增加和交互轮次增长,总成本急剧攀升

边缘设备上的轻量化部署

  • 需要模型压缩和推理加速技术:量化、知识蒸馏、推理剪枝

8.4 可信度、安全性与伦理风险

Agent系统的可靠性与可调试性

  • LLM固有的幻觉问题使其容易生成看似合理但实际错误的内容
  • 复杂的内部决策链和非确定性输出使调试和故障排除特别困难

恶意代码生成

  • 用户可能构造提示绕过安全机制
  • Agent可能记忆并复制包含安全漏洞的历史数据
  • 需要在生成前后引入全面的安全审查机制

代码版权与所有权

  • Agent训练数据可能包含受版权保护的代码
  • 生成内容的法律责任目前缺乏统一标准
  • 未来需要引入"数字水印"等技术追溯生成内容来源

8.5 评测体系完善与软件范式演变

评测方法的有效性和全面性不足

  • 现有方法过于关注Pass@k等指标,忽视了人类认知负担和协作干预成本
  • 需要更全面的评测框架:任务效果与效率、人机交互质量、系统安全性与可解释性、用户体验与认知需求

软件范式转型

当前范式                           未来范式
─────────────                    ─────────────
人类开发者 + Agent辅助              Agent自主 + 人类监督
Agent = 高级生产力工具              Agent = 任务交付者
人类 → 写代码                      人类 → 定义问题
交付物 → 静态软件制品               交付物 → 按需服务

用户将从"软件构建者"转变为"问题陈述提供者",Agent系统解释意图、动态生成代码、内部执行动作并直接返回结果——即"软件即按需服务"。


9. 结论

本文将基于LLM的代码生成Agent作为软件开发的一种新范式进行了全面研究。该技术以三个关键特征区别于传统代码生成方法:自主性、更广泛的任务覆盖和工程实用性。

展望未来,随着现有挑战的逐步解决,代码生成Agent将从根本上变革软件工程领域。这些Agent有望将开发者从重复繁琐的编码任务中解放出来,使他们能够更多地专注于创造性的问题定义和系统级设计。


关键参考文献

编号论文关键贡献
[10]Self-Planning (2024)首个自动任务分解和执行步骤规划
[11]CodeChain (2023)链式自修正的模块化代码生成
[15]Self-Collaboration (2024)首个引入黑板模型的代码生成框架
[16]ChatDev (2023)多Agent通信驱动的软件开发
[17]MetaGPT (2023)模拟真实开发团队的多Agent框架
[51]HumanEval (2021)代码生成评测的里程碑基准
[85]DARS (2024)动态调整策略,SWE-Bench Lite 47% Pass@1
[125]SWE-Agent (2024)首个端到端自主解决GitHub Issue
[150]SWE-Bench (2024)大规模真实GitHub Issue解决基准
[162]GitHub Copilot最广泛使用的AI编程助手
[163]Devin (2024)首个号称AI软件工程师
[164]CursorAI原生IDE,向量语义索引
[166]Claude Code终端原生,200K超长上下文