← 最新论文
💻 computer science

CODENS: Transforming Code Changes into Living, Accessible, and Queryable Documentation

CODENS 是一个通过增量构建类型化软件知识图谱,将拉取请求(pull requests)转化为活性的、可查询的文档,从而实现代理引导的仓库级问答系统的系统,其在生产环境下的 Ruby on Rails 项目上的成功评估证明了这一点。

原作者: Abdelhak Kelious, Chyrine Tahri, Eliot Bardet

发布于 2026-07-22
📖 1 分钟阅读☕ 轻松阅读

原作者: Abdelhak Kelious, Chyrine Tahri, Eliot Bardet

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正漫步在一座宏伟而古老的图书馆中,书中的内容在不断地被重写。每当增加一个新章节、在页边空白处涂抹一个笔记,或者撕掉并替换一页时,故事就会发生变化。在计算机软件的世界里,这个“图书馆”就是“代码库”(codebase),而那些笔记就是“拉取请求”(pull requests)——即开发者用来提议更改的数字票据。问题在于,软件运作方式的“故事”(文档)往往会在这些变化的混乱中丢失。开发者最终不得不靠猜测来理解事物是如何组合在一起的,因为指令散落在成千上万个文件和旧的聊天记录中。

为了解决这个问题,科学家们开始构建“知识图谱”。请将它们想象成不仅仅是一个简单的事实列表,而是一个巨大的、活着的地图:每一个代码片段都是一座城市,而它们之间的连接则是道路。如果你改变了一座城市,地图会自动更新通往它的道路。另一个关键概念是“检索增强生成”(RAG),这就像是给一位超级聪明的图书管理员提供一套特定的书籍进行阅读,然后再回答你的问题,以确保他们不是在瞎猜,而是真正从文本中找到了真相。研究人员提出的核心问题是:我们能否构建一张不仅能展示今日图书馆现状,还能记住每一次变更历史的地图,从而将代码更新的历史转化为一份活生生的、可搜索的指南?

于是,CODENS 诞生了,这是一个旨在实现这一目标的全新系统。将 CODENS 想象成一个神奇且高度有序的档案管理员,它像守护着一个 Ruby on Rails Web 平台一样守护着一个软件项目。它不仅仅是阅读代码的最终版本,CODENS 还在观看项目的“电影”历史。它首先通过扫描整个代码库来构建一个骨架地图,根据框架的标准规则识别出 1,739 个不同的“房间”(如控制器、模型和视图)。

接着,魔法发生了。CODENS 重新回放项目的历史,一次一个拉取请求,就像观看建筑施工的延时摄影视频一样。对于每一次变更,它不仅仅观察新的砖块;它还会询问一个强大的 AI(大语言模型,LLM)为什么要进行这次变更,以及这次变更如何与已有的内容相契合。至关重要的是,它并不只是覆盖旧的故事;它将新的细节与旧的细节进行合并。如果开发者在页面上添加了一个新按钮,CODENS 会更新地图以显示该按钮的存在,但它也会保留该页面之前的样子。这创造了一个“活着的文档”层,随着每一次更新而变得更加聪明和详细。

一旦构建好这张地图,CODENS 提供了三种探索方式,就像不同的旅行模式。你可以进行快速的“向量搜索”,这就像向图书管理员询问具有相似词汇的书籍。你可以进行“多跳检索”,这就像沿着面包屑轨迹从一个房间走向下一个房间,以观察它们是如何连接的。但最强大的模式是“智能体引导的遍历”。在这里,一个 AI 智能体扮演着手持手电筒的侦探角色。它不会仅仅遵循固定路径;它会决定打开哪扇门、走哪条路,甚至编写自己的自定义查询语句来寻找确切答案。它利用工具窥视特定节点的内容、检查它们的邻居,或运行复杂的搜索以拼凑出完整的答案。

研究人员在一个拥有超过 1,700 个文件和数百个拉取请求的真实工业级项目上测试了这个系统。他们向系统提出了 11 个现实中开发者可能会问的问题,例如“这个功能是如何工作的?”或“当我点击这个按钮时会发生什么?”结果非常令人振奋。该系统在准确性和“忠实度”(faithfulness)方面得分很高,这意味着答案是基于实际代码的,并没有凭空捏造。在 1 到 5 分的量表上,人类专家对答案相关性的平均评分为 4.09,对完整性的评分为 4.45。该系统还能追踪每次查询的成本和时间,表明虽然“侦探模式”(智能体)耗时更多且消耗更多 Token,但它提供了最详尽的答案。

然而,论文也指出了一处小小的瑕疵。虽然该系统在寻找正确信息方面表现出色,但其呈现答案的方式有时显得过于技术化。人类评审员注意到,有些答案“过于详细”或“过于以代码为中心”,列出了逐行的引用,而如果能有一个更简单的总结会更好。这就像图书管理员给了你书的具体页码和段落,却没为你总结故事的大意。作者们建议,下一步的任务不一定是寻找更好的信息,而是教导系统如何将这些信息综合成更清晰、更用户友好的解释。

简而言之,CODENS 表明我们可以将零散、混乱的代码变更历史转化为一种结构化的、可查询的记忆。它证明了通过将拉取请求视为持续的知识流而非仅仅是临时修复,我们可以构建一个帮助开发者更快理解复杂代码库的系统。虽然它还不是一个完全解决的问题——特别是在如何让答案听起来更像一个乐于助人的真人,而不是一个正在宣读手册的机器人方面——但它为我们展现了一个生动的未来:在那里的软件文档是鲜活的、实时更新的,并且随时准备回答你的问题。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →