一分钟读论文:CGM让AI像程序员一样理解整个代码库
📝 论文概览
论文标题:Code Graph Model (CGM)
作者:蚂蚁集团研究团队
会议:NeurIPS 2025
🎯 核心问题
想象一下,你面对一个拥有数千个文件、数百万行代码的大型项目,要修复一个bug。你需要:理解问题、找到相关文件、梳理函数调用关系、修改代码。这对经验丰富的程序员来说都是挑战,更别说AI了。
但现在,来自蚂蚁集团的研究团队在NeurIPS 2025上发表的Code Graph Model(CGM),让开源AI也能像资深程序员一样,处理这种仓库级别的软件工程任务。
🔬 核心技术
什么是代码图?
把代码库想象成一张地图:
- 节点:文件、函数、类
- 边:它们之间的关系——谁调用了谁、谁继承了谁、谁导入了谁
比如,文件A里的函数X调用了文件B里的函数Y,那么X和Y之间就有一条”调用关系”的边。
通过这种方式,整个代码库的结构就被清晰地表示出来了。
R4链:四个步骤解决问题
CGM采用了一个叫R4链的框架,由四个组件组成,就像一个流水线:
问题 → Rewriter(重写)→ Retriever(检索)→ Reranker(重排)→ Reader(生成)→ 代码补丁
第一步:Rewriter - 理解问题,提取关键信息
就像程序员拿到bug报告后,先会搞清楚:问题在哪里?涉及哪些文件?
Rewriter分两个阶段工作:
- 提取器:分析问题描述,找出相关的文件、类或函数
- 推理器:基于问题,生成搜索查询,找出可能需要修改的代码
比如问题是”用户登录时出现空指针异常”,Rewriter可能会找出:
- 相关文件:
auth.py,user.py - 相关函数:
login(),validate_user() - 关键词:”空指针”、”登录”、”用户验证”
第二步:Retriever - 找到相关的代码子图
有了关键词,Retriever就去代码图里找相关的部分。
它不是只找单个文件,而是:
- 找到锚点节点(比如
login()函数) - 从锚点出发,扩展成一个连通的子图(包含调用
login()的、被login()调用的所有相关函数和文件) - 把这个子图序列化成JSON格式
这样,AI就能看到完整的上下文,而不是孤立的代码片段。
第三步:Reranker - 找出最相关的文件
Retriever可能会找出很多相关文件,但不是每个都同等重要。Reranker的任务就是给它们打分。
评分很有意思,是1-5分:
- 1分:几乎肯定无关
- 2分:可能间接相关,但修改它解决不了问题
- 3分:有一定相关性,可能间接交互
- 4分:可能相关,包含直接交互的代码
- 5分:很可能是根本原因,修改它应该能直接解决问题
通过这种方式,AI能把注意力集中在最关键的文件上。
第四步:Reader - 生成代码补丁
最后一步,Reader根据前面的信息,生成最终的代码补丁。
这也是CGM最创新的地方:它不只是把代码图当作文本喂给AI,而是让AI真正”理解”图的结构。
具体来说:
- 语义集成:把节点的文本内容转换成token,输入给LLM
- 结构集成:把代码图的结构信息集成到LLM的注意力机制中
这样,LLM在生成代码时,会知道:”这个函数调用了那个函数,那个函数又继承自这个类,所以修改这里时要考虑那里的影响。”
📊 核心发现
1️⃣ 开源模型的新标杆
CGM在SWE-bench Lite基准测试上的表现让人眼前一亮:
- 解决率:43.00% —— 开源权重模型第1名
- 在所有系统方法中排名第8
- 超过之前最佳开源模型12.33%
而且更新版本还在提升:
- CGM-72B-V1.1:41.67%
- CGM-72B-V1.2:44.00%
在更大的SWE-bench Verified基准测试中,CGM同样在开源权重模型中排名第1。
2️⃣ CGM的三大创新
1. 无需Agent,简单有效
之前的方案往往依赖复杂的Agent系统——多个AI角色相互配合,虽然强大但不可预测。CGM证明:不需要那么复杂,只要让模型理解代码结构,开源模型也能做得很好。
2. 真正理解代码图
CGM不是把代码图当作文本丢给模型,而是通过图感知注意力机制,让模型直接理解图的结构。这就像给模型配上了一副”代码架构眼镜”。
3. 完整开源
CGM把代码、模型、数据全部开源了:
- GitHub:https://github.com/codefuse-ai/CodeFuse-CGM
- 模型:https://huggingface.co/codefuse-ai/CodeFuse-CGM-72B
这意味着任何人都可以用它、改进它。
📈 数据亮点
| 指标 | 数值 |
|---|---|
| SWE-bench Lite 解决率 | 43.00% |
| 开源权重模型排名 | 第1名 |
| 所有系统方法排名 | 第8名 |
| 相比之前最佳开源模型提升 | +12.33% |
| 支持语言 | Python、Java |
| 模型版本更新 | V1.1 → V1.2(+2.33%) |
💡 一句话总结
复杂的软件工程任务,不一定需要闭源模型和复杂的Agent系统。开源模型通过巧妙的设计,也能达到优秀的效果。
CGM就像一个开源的”AI架构师”,虽然还不完美,但它已经展示了巨大的潜力。
🎓 研究意义
这篇论文的意义不仅在于它的性能,更在于它证明了:
- 小公司不用依赖昂贵的闭源服务
- 代码隐私可以得到更好的保护
- 整个社区可以一起改进模型
🛠️ 给开发者的建议
- 试试CGM:完整开源,可以直接用在你的项目中
- 理解代码结构很重要:不要只看单个函数,要理解整个项目的架构
- 图结构是关键:代码图能帮助AI更好地理解代码库
- R4链框架值得借鉴:重写→检索→重排→生成,这个流程很清晰
- 关注开源进展:未来可能会看到更多开源模型在软件工程领域大放异彩
论文链接:https://arxiv.org/abs/2505.16901
一分钟读论文:《小语言模型作为评委提升代码生成》