探索存量项目适配 AI Coding:代码知识库增强与 Issue 修复实践(以codex+understand anything为例)
一. 背景
随着项目规模不断扩大,软件开发中的一个常见问题是:如何让AI更好地理解已有代码。
目前的AI Coding工具已经能够完成代码生成、简单修改以及部分问题定位,但在真实的大型项目中,AI首先需要解决的是“理解项目”。例如,一个成熟项目通常包含:多个业务模块;大量历史代码;复杂调用关系以及完整测试体系。如果直接将整个代码仓库交给AI,通常会面临:上下文容量有限;无法快速定位关键代码;不清楚模块之间的关系;修改代码时容易偏离原有设计等问题。因此,本次实践围绕两个问题展开:1. 不同代码理解方案是否会影响AI Coding效果;2. 为项目生成代码知识库后,是否能够辅助AI完成真实Issue修复。所以本次实验分为两个部分:第一部分:使用 Benchmark 测试不同代码理解 Skill 的效果;第二部分:使用Understand-Anything(以下简称 UA)生成RD-Agent项目知识库,并结合Codex修复GitHub Issue。
二. Benchmark:不同代码理解 Skill 测评
2.1 Benchmark设计
首先搭建代码理解Benchmark,用于测试不同方案在软件工程任务中的表现。测试对象包括:Baseline,Search,Aider,DeepWiki,Understand-Anything。为保证实验结果,Benchmark任务来源于固定测试集,而不是随机生成。测试案例位于:benchmark_cases目录。

其中包含四类任务:
benchmark_cases
├── debugging
│ └── cases.json
├── modification
│ └── cases.json
├── navigation
│ └── cases.json
└── understanding
└── cases.json
共20个测试任务:Navigation,Understanding,Debugging,Modification 共四种,每种5个四个方面基本涵盖日常开发中的需求,不同类型对应软件开发中的常见场景如下:Navigation:定位代码位置;Understanding:理解模块作用:Debugging:分析问题原因;Modification:完成代码修改。
2.2 测试任务示例
例如 debugging 类任务:

如图所示,每个 Case 中包含:任务描述;目标仓库;需要完成的操作。相比直接评价“AI回答是否合理”,固定任务集能够保证不同方案在同一条件下比较。
2.3 评分方式
Benchmark采用确定性评分器。
评分代码:
scorer/deterministic_scorer_v3.py




为了避免 Benchmark 评测过程成为不可解释的黑箱,本实验采用了基于规则的 deterministic scorer 进行结果评估。每个测试 case 都对应一个独立的评分函数,例如 score_navigation_001(),该函数会针对任务要求拆分多个可验证的检查项。
以 navigation_001 为例,评分器不会简单判断回答文本是否“看起来正确”,而是检查模型回答中是否包含关键的代码理解信息,例如:是否定位到正确的入口文件 rdagent/app/cli.py是否理解 data_science_cli 命令注册关系,是否识别 pyproject.toml 中的 [project.scripts] 配置是否理解 CLI 参数如何继续传递给实际执行模块
对应代码中,评分器通过 mentions_file()、mentions_symbol()、states_delegation() 等检查函数,对回答中的文件路径、代码符号以及调用关系进行验证。例如,project_scripts_section 检查项用于判断回答是否正确理解 Python 项目的入口脚本配置;entry_point_mapping 用于验证命令入口是否映射到了正确模块;parameter_forwarding 则进一步检查调用过程中参数是否被正确传递。
最终,一个 case 的评分结果由多个检查项组成,每个检查项都有对应权重。评分器根据回答是否满足这些条件累计得分,因此能够明确解释模型为什么得到某个分数,而不是依赖人工主观判断或另一个大模型进行评价。
通过这种方式,Benchmark 的评测过程从:
模型回答 → 黑盒判断 转变为:模型回答 → 代码事实检查 → 加权评分。这提高了实验结果的可复现性和可信度。
整个评分过程不依赖额外的大模型判断,而是根据预设规则和Ground Truth进行匹配。避免了人工评价带来的不确定性。
2.4 Benchmark结果
最终测试结果如下:


从结果可以看到:直接使用基础代码上下文时,任务完成效果较低。加入额外代码理解能力后,整体结果有所提升,其中 DeepWiki 和 Understand-Anything 在该测试集中的表现较好。这说明对大型代码仓库增加结构化代码信息,有助于 AI 完成代码定位和理解任务。
三. Understand-Anything + Codex 修复 RD-Agent Issue
Benchmark验证代码知识增强效果后,进一步选择真实开源项目进行实践。
3.1 项目介绍
实验项目:RD-Agent
RD-Agent 是一个面向 Research & Development 的自动化研发智能体项目。
项目包含:数据科学实验流程;自动代码生成;实验反馈;多轮演化流程。
本次选择 GitHub Issue:
Issue #1430
问题:
DSTrace.get_sibling_exps()
运行过程中出现:
KeyError
3.2 使用 Understand-Anything生成项目知识库
首先使用 Understand-Anything 对 RD-Agent 仓库进行分析。
分析完成后生成:.ua目录:

其中:knowledge-graph.json是核心文件。
3.3 UA知识库是什么?
UA生成的并不是简单的代码摘要,而是一份结构化代码知识图谱。这里截取了一小部分。

例如:
{
"project": {
"name": "rdagent",
"languages": [
"python"
]
}
}
project部分保存项目整体信息:项目名称;使用语言;工程框架。同时nodes保存代码实体。
例如:
{
"type":"file",
"name":"run.py",
"summary":"..."
}
表示:UA识别出了:文件位置;文件职责;代码摘要这些关键特性。
对于类:
{
"type":"class",
"name":"CIError",
"lineRange":[43,57]
}
UA能够记录:类名称;所属文件;源码范围。因此,在使用UA之后,AI不需要从整个项目开始阅读,而是可以通过知识库快速找到相关模块。
3.4 Issue定位过程
修复前运行复现脚本:python reproduce_1430.py
出现:

KeyError: 0
根据问题定位:
涉及文件:
rdagent/scenarios/data_science/proposal/exp_gen/base.py
核心函数:
DSTrace.get_sibling_exps()
该函数负责:
获取当前实验节点之外的其他实验分支。
3.5 问题原因分析
原实现中:
touched_node_set.remove(parent)
逻辑:
遍历 DAG 节点时,将已经存在子节点的父节点移除。
但是 DAG 允许:
A
/ \
B C
当处理 B:
remove(A)
处理 C:
再次:
remove(A)
由于 A 已经不存在,因此产生:
KeyError
问题本质:
代码假设一个父节点只会出现一次,但实际 DAG 中一个节点可以拥有多个子节点。
3.6 修复方案
修改前:
remove(parent)
修改后:
difference_update(parent_indices)
同时:
未提交实验节点:
修改:
remove()
为:
discard()
区别:
remove:元素不存在时抛异常;
discard:元素不存在时忽略。
修改后支持:
一个节点多个子节点;并发实验共享父节点。
3.7 修复验证
重新执行:
python reproduce_1430.py
结果:

最终验证:Issue复现成功;修改符合原有代码设计。
四. 实践总结
4.1 Benchmark结果说明
代码理解能力对于 AI Coding 任务具有明显影响。相比直接提供源码,增加:文件结构;模块关系;代码摘要等内容。能够帮助 AI 更快定位问题。
4.2 UA的作用
UA并不是替代代码,而是提供一个项目理解层。
传统方式:
源码
↓
AI阅读
↓
理解项目
↓
修改代码
加入UA知识库后:
源码
↓
UA分析
↓
代码知识图谱
↓
AI检索相关模块
↓
修改代码
知识库降低了 AI 理解大型项目的成本。
4.3 实验限制
本次实验中的 UA 知识库生成时间:
commit f15a5c26 Issue 修复基线:commit 4f9ecb00 两者存在一定代码差异。
因此,在实际工程环境中,如果项目代码发生较大变化,需要重新生成知识库。
5. 后续展望
未来可以继续探索:
1.自动更新代码知识库
结合 Git 提交后代码变化自动更新知识库,让AI获取最新项目结构,从而减少知识库与代码版本不一致的问题。
2.更全面的AI Coding评测
除了任务完成率,还可以增加:问题定位时间;修改文件数量;测试通过率;人工复核成本等标准。
3.AI Agent + 项目知识库
未来的软件开发流程可能变为:
代码仓库
↓
知识库生成
↓
AI理解项目
↓
定位Issue
↓
生成修改方案
↓
自动测试
↓
提交PR
总结
本次实践通过 Benchmark 和真实 Issue 修复两个场景,验证了代码知识增强在 AI Coding 中的作用。
Benchmark 结果表明:结构化代码信息能够帮助 AI 完成更复杂的代码理解任务。
Issue 修复实践进一步说明:通过 Understand-Anything 生成项目知识库后AI Agent可以更快定位大型项目中的关键模块,并辅助完成实际代码修复。
对于存量项目来说,未来AI Coding 的重点不仅是生成代码,更是让 AI 真正理解已有系统。
浙公网安备 33010602011771号