社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Git

开源框架让代码AI偷师GitHub,bug修复率飙升至69.8%,性能创纪录

36氪-资讯-AI • 8 月前 • 382 次点击  

人类程序员碰到棘手bug通常会上网查询前辈经验。

当前AI虽然开始具备联网搜索能力,但仍不能很好地从网络经验中获取修复bug的能力。

让AI学习人类程序员的工作流程或许有助于其提升bug修复能力,名为MemGovern的项目团队在此思路下做出的尝试近期得到了良好的效果。

在自动化软件工程(SWE)领域,大语言模型驱动的代码智能体(Code Agents)虽然在编程范式上带来了变革,但它们目前普遍面临“封闭世界”的认知局限:现有的智能体往往试图从零开始修复Bug,或者仅依赖仓库内的局部上下文,而忽略了GitHub等平台上积累的浩瀚历史人类经验。

事实上,人类工程师在解决复杂问题时,往往会搜索开源社区,借鉴相似问题的历史解决方案。

然而,直接让智能体利用这些“开放世界”的经验极具挑战,因为真实的Issue和Pull Request(PR)数据充斥着非结构化的社交噪音、模棱两可的描述以及碎片化的信息。

为了突破这一壁垒,前沿开源学术社区QuantaAlpha联合中国科学院大学(UCAS)、新加坡国立大学(NUS)、北京大学(PKU)、华东师范大学(ECNU)等团队提出了MemGovern框架。

该框架并未采用简单的检索增强(RAG)路径,而是提出了一套完整的“经验精炼”机制,将杂乱的GitHub数据转化为智能体友好的结构化记忆,并结合了Deep Research的思想提出了“Experiential Memory Search”策略,实现了从历史经验中提取可复用修复逻辑的闭环。

核心痛点:海量数据≠可用知识

现有的Code Agent(如SWE-Agent)在处理复杂Bug时,往往陷入“不知所措”的境地,因为它们缺乏历史记忆。虽然GitHub是一个巨大的宝库,但直接把Issue和PR丢给AI效果并不好,原因在于:

1.噪声极大:原始讨论中充斥着“感谢”、“合并请求”等无关社交用语。2.非结构化:不同项目的日志、报错信息和修复逻辑混杂在一起,缺乏统一格式。3.难以检索:简单的语义匹配容易被表面关键词误导,无法触达深层的修复逻辑。

MemGovern的出现,就是为了把这些“原始数据”变成AI真正能用的“经验卡片”。

经验精炼机制(Experience Refinement Mechanism)

MemGovern并没有直接将原始的GitHub Issue和PR扔给智能体,而是构建了一套层次化的筛选与内容净化流水线。

层次化选择(Hierarchical Selection):首先,通过综合考量Star数与维护活跃度(Issue/PR频率),筛选出高质量的仓库源;随后,在实例层面进行严格清洗,仅保留包含完整证据链(问题-代码-验证)的“闭环”修复记录。

标准化经验卡片(Experience Card):这是MemGovern的独创设计。原始记录被重构为标准化的经验卡片,每张卡片被显式地解耦为两层:

索引层 (Index Layer,) :包含标准化的问题摘要与关键诊断信号 (如异常类型、错误签名) ,用于基于症状的高效检索。

决议层 (Resolution Layer,) :封装了根因分析 (Root Cause) 、修复策略 (Fix Strategy) 、补丁摘要 (Patch Digest) 以及验证方法 (Verification) 。

这种结构化设计有效解决了检索信号与推理逻辑混淆的问题,显著提升了知识的可用性。目前,团队已成功构建了包含135,000条高保真经验卡片的知识库。

代理式经验搜索(Agentic Experience Search):像人类一样“搜索-浏览”文档

传统的RAG(检索增强生成)往往是一次性把检索结果塞给模型,容易导致上下文超长且充满噪声。MemGovern采用了更符合人类直觉的Search-then-Browse(先搜后看)模式:

  • Searching(搜索)

智能体首先根据当前Bug的症状 (如报错堆栈) 在索引层进行广度搜索,快速定位可能相关的候选案例。

  • Browsing(浏览)

智能体自主选择最有希望的案例,查看其详细的“解决方案层”。这种机制允许智能体深入理解修复逻辑,排除无关干扰。

  • 迁移与应用

智能体将历史案例中的抽象修复策略 (如“增加边界检查”) 映射到当前的代码库中,实现知识迁移。

实验评估:全面超越主流基线

研究团队在SWE-bench Verified上进行了详尽的评测。结果显示,MemGovern在所有测试模型上都取得了显著提升。

主要实验结果(Pass@1修复率):

  • Claude-4-Sonnet+MemGovern

修复率达到 69.8% ,相较于基线SWE-Agent提升了3.2%。

  • GPT-4o+MemGovern

修复率从23.2%飙升至 32.6% ,实现了 9.4% 的巨大提升。

  • DeepSeek-V3+MemGovern

修复率提升至 65.8% 。

实验数据清晰地表明,MemGovern的提升是稳健且模型无关的。对于基础能力较弱的模型,MemGovern提供的外部经验能够带来更为显著的性能飞跃。

消融实验验证:

  • 记忆规模的影响

随着经验卡片数量从10%增加到100%,智能体的修复率呈现单调上升趋势,证明了大规模经验记忆的有效性。

  • 精炼的重要性

对比直接使用原始Issue/PR数据 (Raw Experience) ,经过“精炼”的经验卡片带来了更稳定、更高的性能提升,证明了结构化治理的必要性。

案例分析:经验如何改变结果?

在Django框架的一个真实Bug(order by导致崩溃)中,我们可以清晰地看到MemGovern的价值。

传统Agent(No Experience):

缺乏经验的智能体只能看到报错表象。

它采取了一种“防御性编程”的策略,简单粗暴地加了一个类型检查来绕过报错。但这实际上违反了函数的API规范——它返回了错误的原始对象而非预期的处理结果。

这种“掩耳盗铃”式的修复虽然暂时消除了运行时的报错,却导致下游核心功能因数据类型不匹配而失效,最终依然无法通过测试用例。

MemGovern Agent:

智能体检索到了一条相似的历史经验。

经验卡片中的“Fix Strategy”明确指出:“不要仅仅绕过对象,而应该进行显式的类型检查并提取字段名”。

依据这条指引,智能体写出了完美的修复代码,既修复了Crash,又保留了原有功能。

经验重塑

MemGovern的提出,不仅是性能指标上的突破,更重要的是,它为AI智能体如何有效利用海量的非结构化人类调试经验指明了一条清晰可行的道路。

它证明了将GitHub上杂乱的原始Issue与PR经过经验加工后能被视为可检索、可验证、可迁移的“经验记忆”,而非充满噪声的“干扰数据”,是打破智能体封闭世界的限制、解决复杂现实世界Bug的强大范式。

未来,MemGovern所开创的经验重塑范式,其潜力绝不仅限于代码领域。

这种将非结构化的人类专业经验转化为机器可读记忆的方法,具有极强的通用性与推广价值。它为法律咨询、医疗诊断等同样高度依赖历史案例与专家经验的垂直领域,提供了一套标准化的模版。

期待MemGovern的理念能走出代码仓库,完成更多需要“以史为鉴”的复杂智力任务,为构建跨领域的、通用的智能体记忆基础设施奠定基石。

论文标题:MemGovern: Enhancing Code Agents through Learning from Governed Human Experiences

论文链接:https://arxiv.org/abs/2601.06789

开源代码:https://github.com/QuantaAlpha/MemGovern

关于QuantaAlpha

QuantaAlpha成立于2025年4月,由来自清华、北大、中科院、CMU、港科大等名校的教授、博士后、博士与硕士组成。我们的使命是探索智能的“量子”,引领智能体研究的“阿尔法”前沿——从CodeAgent到自进化智能,再到金融与跨领域专用智能体,致力于重塑人工智能的边界。

2026年,我们将在CodeAgent(真实世界任务的端到端自主执行)、DeepResearch、AgenticReasoning/Agentic RL、自进化与协同学习等方向持续产出高质量研究成果,欢迎对我们方向感兴趣的同学加入我们!

团队主页:https://quantaalpha.github.io/

本文来自微信公众号“量子位”,作者:MemGovern团队,36氪经授权发布。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/191801