论文From Code Foundation Models to Agents and Applications: A Practical Guide to Code Intelligence可以看成是一部“从模型到智能体再到落地应用”的代码智能实战指南,既是大规模代码模型(Code LLM)的全景综述,又非常强调工程实践和训练细节。
文章作者为Jian Yang(杨健,北京航空航天大学), Xianglong Liu, Weifeng Lv, Ken Deng, Shawn Guo, Lin Jing, Yizhi Li, Shark Liu, Xianzhen Luo, Yuyu Luo, Changzai Pan, Ensheng Shi, Yingshui Tan, Renshuai Tao, Jiajun Wu, Xianjie Wu, Zhenhe Wu, Daoguang Zan, Chenchen Zhang, Wei Zhang, He Zhu, Terry Yue Zhuo, Kerui Cao, Xianfu Cheng, Jun Dong, Shengjie Fang, Zhiwei Fei, Xiangyuan Guan, Qipeng Guo, Zhiguang Han, Joseph James, Tianqi Luo, Renyuan Li, Yuhang Li, Yiming Liang, Congnan Liu, Jiaheng Liu, Qian Liu, Ruitong Liu, Tyler Loakman, Xiangxin Meng, Chuang Peng, Tianhao Peng, Jiajun Shi, Mingjie Tang, Boyang Wang, Haowen Wang, Yunli Wang, Fanglin Xu, Zihan Xu, Fei Yuan, Ge Zhang, Jiayi Zhang, Xinhao Zhang, Wangchunshu Zhou, Hualei Zhu, King Zhu, Bryan Dai, Aishan Liu, Zhoujun Li, Chenghua Lin, Tianyu Liu, Chao Peng, Kai Shen, Libo Qin, Shuangyong Song, Zizheng Zhan, Jiajun Zhang, Jie Zhang, Zhaoxiang Zhang, Bo Zheng,来自BUAA-SKLCCSE, Alibaba, ByteDance, M-A-P, BJTU, OPPO, HKUST (GZ), BUPT, TeleAI, Shanghai AI Lab, Manchester, StepFun, UoS, SCU, CASIA, NJU, Kuaishou, HIT, Huawei Cloud, Tencent, Monash/CSIRO, NTU, ZJU, BIT, Ubiquant, NUS, HNU, PKU, CSU。
一、这篇综述的动机与主要贡献
作者先回顾了从人工写代码、IDE 辅助、框架驱动开发,一直到今天的 AI-辅助、AI-驱动再到未来 AI-自主编程的演进历程,认为如今已经进入“代码智能时代”。像 Copilot、Cursor、Claude Code、Trae 这类工具说明:把自然语言直接翻译成可运行代码已经从实验室概念变成了日常生产力工具。
但同时存在几个明显的“鸿沟”:
- 研究 vs 实践:学术界主要在 HumanEval、APPS 等小函数基准上追分,而工业界面对的是安全性、跨文件依赖、大仓库上下文、CI/CD 流程集成等复杂问题。
- 泛化 vs 专精:通用 LLM 在代码上惊艳,但在严格 API 约束、安全策略、超大工程项目上,表现仍不稳定。
- 模型能力 vs 训练配方缺乏系统总结:大家都在堆数据、堆算力、调 RL,但缺少“从数据到预训练、SFT、RL、Agent、评测、安全”的完整工程经验。
因此,论文的目标是:
- 提出一个统一的代码 LLM 分类和技术框架;
- 系统梳理从数据、模型到对齐、RL 的完整技术链路;
- 总结代码任务和基准体系,分析它们的优缺点;
- 专门用一大章讲软件工程智能体(SWE Agents);
- 专门用一大章建构代码安全与红队评估框架;
- 最后给出训练配方与实践指南,包括规模定律、超参数、框架选型与实验结果。
二、代码基础模型:从通用 LLM 到专用 Code LLM
- 通用 LLM 的基础与局限
论文先从 Transformer 起步,梳理了密集模型、MoE、复发/状态空间模型(如 RWKV、Mamba)、扩散式语言模型以及混合架构的发展,说明这些架构如何支撑今天强大的语言与代码能力。
接着重点点出通用 LLM 在代码上的几个不足:
- 专业度不够:容易生成“看起来对、实际不对”的代码,细节上不满足 API 合约、安全策略或项目约束。
- 安全性薄弱:大规模评估显示,大约一半左右的自动生成代码含有已知安全漏洞,即便通过了功能测试。
- 仓库级理解有限:长上下文下,关键信息不在开头/结尾时性能明显下降,跨文件依赖和全局不变量经常被忽略。
- 多模态/Agent 场景下的工具使用容易“幻觉”:选错工具、错误调用时机、虚构工具输出等。
这些问题直接推动了专门面向代码的 LLM 发展。
- 代码专用大模型(Code LLM)谱系
论文按闭源/开源梳理:
- 闭源方面:
- GPT 系列从 GPT-3 到 Codex,再到 GPT-4、o 系列以及 GPT-5 / GPT-5-Codex,能力从函数级生成一路扩展到仓库级修复与 Agent 式开发,在 SWE-Bench Verified 等基准上达到领先表现。
- Gemini / PaLM 系列:从 PaLM 的大规模解码器预训练,到 PaLM2 的多语言与 UL2 去噪,再到 Gemini 1.x/2.x 的原生多模态、稀疏 MoE 与百万级上下文,强调“代码 + 工具使用 + 长上下文推理”的统一。
- Claude 系列:与代码相关的亮点是长上下文、多模态、函数调用,以及带终端、编辑器、包管理器、浏览器的“电脑使用栈”,特别在仓库级修复和 Agent 安全策略上有详细系统卡描述。
- 其他如 Grok、PanGu-Coder、AlphaCode / AlphaCode2 等,分别在长上下文、多语种、竞赛编程和进化式代码搜索上提出各自的方案。
- 开源方面:
- 以 StarCoder、Code LLaMA、DeepSeek-Coder、Qwen2.5-Coder / Qwen3-Coder、IBM Granite-Code 等为代表,覆盖从几亿到数百亿乃至 MoE 数百 B 规模,支持几十种编程语言、十几万以上上下文,并普遍支持 FIM(中间填充)等代码特有任务。
- 论文列了一大表,从层数、隐藏维度、中间层大小、注意力类型(GQA/MQA/MLA)、上下文长度、MoE 激活参数等维度对比各家模型,方便工程选型。
- 预训练数据与未来趋势
论文对开源代码预训练数据进行了系统梳理:
- GitHub 大规模抓取与清洗;
- StarCoderData 针对许可证、语言覆盖和质量做了精细设计;
- The Pile、RedPajama 等通用语料中的代码部分;
- 语言特定数据集如 CodeParrot 只聚焦 Python,并通过大规模去重暴露出公共代码中惊人的重复率。
作者强调,数据工程从“多抓点代码”发展为“带许可证过滤、去重、隐私脱敏和质量标注的一整套透明管线”,这是现代开源 Code LLM 能够复现与迭代的基础。
在未来趋势上,这一章提炼了三个方向:
- 从通用 LLM 向专门 Code LLM 深度分化,在仓库级任务、复杂调试和多步开发流程上形成碾压优势;
- 从静态文本生成走向Agent 化训练:通过执行反馈、课程学习、工具使用等机制,让模型能在复杂、多步的软件场景中自主探索;
- 用规模定律指导“科学化训练”,针对代码任务系统研究参数规模、数据量、算力与性能的关系,而不再是纯经验堆料。
三、代码任务、基准与评测体系
论文第三章对“我们到底拿什么来评估代码 LLM”做了一个全盘梳理,包括:
- 函数级任务:补全、生成、修复、翻译、效率优化、代码问答、测试生成等;
- 仓库级任务:多文件生成与补全、领域专用复杂生成(如 SQL、配置)、重构与 Agent 协作、提交说明生成、软件工程全流程任务;
- Agent 任务:工具使用、深度检索、网页搜索、GUI 操作、终端操作等。
在评测指标上,作者区分:
- 传统指标(如基于测试用例的通过率),进一步衍生各种扩展与统计分析;
- LLM-as-a-Judge:用更强的模型来打分代码质量,但要注意一致性与偏差;
- 执行式指标:通过运行代码、分析运行轨迹来评估正确性与鲁棒性;
- 多智能体与高级推理框架:通过多轮、自反思、协作来衡量模型在复杂任务中的表现;
- 一些更独特的范式,例如在交互式环境中评估 agent 的成功率、稳定性和工具使用可信度。
总体观点是:“只看是否通过单测远远不够”,需要同时关注可维护性、安全性、效率和长期演化能力。
四、对齐(Alignment):SFT、多语言/多模态与强化学习
这一大章聚焦于“如何把一个基础 Code LLM 调教成真正好用、安全的开发助手”:
- 监督微调(SFT)
分为单轮、多轮、仓库级 SFT,以及带推理过程的 SFT。论文给出构造推理数据的冷启动流程:
- 数据来源:竞赛题、OJ、真实仓库 issue 等;
- 清洗与去污染:去掉和评测集合重合的题目,过滤低质量数据;
- 题目筛选与难度评估;
- 生成“思路 + 解答”的推理链;
- 过滤与修正,最终构造高质量的推理-代码数据集。
- 多语言、多模态代码理解
文章系统回顾了多语言 Code LLM(多种编程语言、多自然语言指令)以及“图像 + 代码”的多模态模型,比如看 UI 截图自动生成前端代码、看设计稿生成网页、解析软件工程文档和 UML 图等。作者把这看作代码 LLM 真正走进“真实开发场景”的关键能力。
- 强化学习与可验证奖励(RL & RLVR)
在代码领域,强化学习的一个天然优势是有大量“可自动判分”的信号——编译是否通过、测试是否通过、性能是否改善等。论文梳理了:
- 各类 RL 算法在代码生成、理解、软件工程任务中的应用;
- RL with Verifiable Rewards(RLVR):利用单测、执行结果等可验证信号来定义奖励,避免纯主观偏好;
- 奖励塑形:不仅奖励“是否通过”,还对代码风格、可读性、效率等设置更精细的奖励,结合安全约束。
作者强调,RLVR 正在成为代码后训练的核心技术之一,因为它把“真实世界的运行结果”直接引入训练闭环。
五、软件工程智能体(SWE Agents)
这部分是整篇论文的一个亮点,专门把软件工程拆成需求、开发、测试、维护、端到端五个阶段,分析各阶段的 Agent 形态:
- 需求工程:从需求文本、用户对话中抽取规格,自动生成用例、用户故事或初始设计文档。
- 软件开发:从生成函数、模块,到按 issue 修改代码、跨文件 refactor,再到仓库级“读-改-测-提 PR”的全流程。
- 软件测试:自动生成单元测试/集成测试,设计覆盖更高的测试集,执行回归测试并分析失败原因。
- 软件维护:定位 bug、修复遗留问题、处理依赖升级、阅读与更新旧代码。
- 端到端软件 Agent:如 ChatDev、MetaGPT、AgileCoder,将一个软件项目从需求、设计、编码、测试到部署以“多智能体流水线”的方式串起来。
在训练技巧上,论文提出一个很重要的思路:
- 用 RL 或大规模交互在环境中“探索出好策略”(例如 SWE-Exp 的修复轨迹、自进化的 SE-Agent 推理路径);
- 再把这些成功案例与失败案例中的经验回灌到 SFT 数据中,用监督学习巩固;
- 形成 “RL 探索 + SFT 巩固”的自进化闭环。
未来趋势部分,则把研究方向指向:
- 从分散小 Agent 走向覆盖整个生命周期的完整编排系统;
- 通过知识图谱和项目长期记忆,构建对大仓库的“心智模型”,结合版本历史、运行日志等信息;
- 从单智能体转向多智能体生态,强调角色分工和协作、自进化与自我改进。
六、代码在通用智能体中的三种角色
论文还专门提出“Code for Generalist Agents”的视角,把代码看成:
- 交互协议:通过工具调用(Tool Use)、模型上下文协议(MCP)、多智能体协作协议,让各工具、服务、Agent 可以用代码或类似 DSL 的形式进行标准化交互。
- 能力本身:智能体可以“用代码思考”(写小脚本测试假设)和“用代码行动”(调用终端、API、仿真环境),从而大幅增强可验证性和可组合性。
- 环境接口:在仿真环境或“电脑使用”场景中,代码直接就是环境操作接口,智能体通过写脚本、执行命令来操控系统。
这部分的核心观点是:会写代码的 Agent,天然更适合作为通用数字世界的操作系统。
七、代码 LLM 的安全问题与防护框架
安全章节首先指出现实问题:
- 大规模评估表明,即便功能正确,大量自动生成代码仍含已知漏洞,开源模型如 Qwen3、DeepSeek-R1 等也难以幸免;
- 高级攻击可以诱导模型生成“功能正确但暗藏后门”的代码,普通 prompt 工程难以察觉。
文章给出了一个四大模块的安全框架:
- 安全预训练
- 数据来源可信与许可证合规;
- 数据审计与清洗,过滤恶意模式;
- 规避隐私泄露、减少偏见;
- 对抗式代码变换下保持鲁棒。
- 安全后训练
- 构造安全相关训练数据集(包含安全/不安全示例及解释);
- 进行专门的安全向 SFT;
- 用偏好优化和 RL 进一步削弱“本地缺陷”,例如偏好安全实现;
- 将安全性纳入 RL 奖励设计。
- 红队测试(Red-teaming)
- 提示级操控:各种绕过安全策略的 prompt ;
- 语义与上下文操控:通过复杂场景诱导模型输出危险代码;
- Agent 工作流攻击:借助工具调用链、文件系统操作等放大危害。
- Agent 系统层面的防护
- 安全沙箱和隔离执行环境;
- 执行前静态检测与规则验证;
- 运行时的监控与意图校验,必要时中断或回滚。
论文强调,安全不只是模型层面的过滤,而是模型、数据、工具和执行环境的协同工程问题。
八、训练配方与实践指南
作者用一整章总结训练实践:
- 简要介绍分布式训练框架和并行策略,为超大 Code LLM 的训练搭好工程支架;
- 给出预训练阶段的指导,包括:
- 数据清洗与去重的必要性;
- 代码与自然语言的比例、不同编程语言的配比;
- 学习率、批大小、上下文长度等超参的典型设置思路;
- 如何结合规模定律设计“在算力预算下最划算”的模型规模与训练步数。
- SFT 阶段则强调:指令数据质量、任务多样性、代码/非代码混合策略以及训练稳定性控制。
- RL 阶段给出:何时值得上 RL、如何构造可验证奖励、如何兼顾性能与安全、如何处理训练不稳定与探索-利用权衡。
九、应用层:从 IDE 助手到云平台与终端 Agent
最后一章回到应用视角,系统梳理 Code LLM 在工程实践中的几类典型形态:
- IDE 集成开发助手:补全、重构、解释、生成测试与文档,深度嵌入 VS Code、JetBrains 等环境;
- 云原生编码平台:在浏览器或云 IDE 中提供协作式编码、自动环境配置与一键部署;
- 终端型 Agent:在命令行中通过 LLM 接收自然语言指令,自动执行命令、编辑文件、运行测试;
- 代码修复与验证平台:把 LLM 与静态分析、形式化验证工具结合,做自动修复、PR 审查和质量保证。
作者希望通过这一节,把前面所有关于模型、训练、Agent、安全的讨论落到“怎么在真实团队里用起来”的层面。
十、整体评价
综合来看,这篇论文的价值在于:
- 覆盖全面:从基础模型、预训练数据、对齐、RL、安全,到 SWE Agent、通用 Agent、训练配方和实际应用,几乎把目前 Code LLM 的关键话题都系统捋了一遍。
- 工程导向强:不是简单罗列论文,而是明确给出“从数据到 Agent”的工程流水线与实践建议。
- 强调未来方向:特别是在 Agent 化训练、长上下文知识建模、集成全生命周期的 SWE 生态和安全治理方面给出了清晰的研究路线图。