基于LLM的代码生成Agent综述
原文:A Survey on Code Generation with LLM-based Agents 作者:Yihong Dong 等(北京大学) 来源:arXiv:2508.00083v2, 2025
摘要
由大语言模型(LLM)驱动的代码生成Agent正在彻底变革软件开发范式。与以往的代码生成技术不同,代码生成Agent具有三个核心特征:
- 自主性:能够独立管理从任务分解到编码和调试的完整工作流程
- 任务范围扩展:能力从生成代码片段扩展到覆盖完整的软件开发生命周期(SDLC)
- 工程实用性增强:研究重点从算法创新转向实际工程挑战,如系统可靠性、流程管理和工具集成
本文系统性地综述了基于LLM的代码生成Agent领域,追溯了该技术从诞生到现在的发展轨迹,系统分类了其核心技术(包括单Agent和多Agent架构),详细阐述了其在完整SDLC中的应用,总结了主流评测基准和指标,并整理了代表性工具。最后,通过分析主要挑战,提出了若干基础性的长期研究方向。
1. 引言
随着ChatGPT等大语言模型的出现,代码生成从简单的"代码补全"发展到"AI Agent主导开发",经历了以下演进阶段:
传统代码生成(规则/模板)
↓
预训练语言模型(CodeBERT、CodeT5)
↓
大语言模型(GPT-4、Code 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):动态检索相关代码上下文
- 长上下文建模:处理大型代码库中的长距离依赖
- 上下文压缩:将关键信息压缩到有限的上下文窗口中
上下文的四类典型问题:
- 上下文中毒:错误或幻觉信息污染后续推理
- 上下文干扰:冗余信息淹没关键信号
- 上下文混淆:格式不一致导致误解
- 上下文冲突:矛盾信息导致决策错误
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编程任务 |
| 编程竞赛级 | APPS | 10,000题,三个难度级别 |
| 编程竞赛级 | CodeContests | 13,328题,真实编程竞赛 |
| 编程竞赛级 | LiveCodeBench | 持续更新,避免数据污染 |
| 真实场景 | SWE-Bench | 大规模GitHub Issue解决基准(千级真实Issue) |
| 真实场景 | SWE-Bench-Lite | 300个更自包含的功能缺陷修复任务 |
| 真实场景 | SWE-Bench-Verified | OpenAI人工验证的500个高质量实例 |
| 真实场景 | CodeAgentBench | 5个真实Python项目,101个任务 |
| 真实场景 | Web-Bench | 从零开始的Web项目开发任务 |
| 真实场景 | Aider | 225道高难度多语言编程练习 |
6.2 评测指标
功能正确性指标:
- Pass@k:最常用指标,k次采样中至少一个通过所有测试的概率
其中 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] | Cursor | AI原生IDE,向量语义索引 |
| [166] | Claude Code | 终端原生,200K超长上下文 |