Prometheus源码解析:多候选补丁生成、多级测试验证与LLM最优补丁选择机制 【免费下载链接】Prometheus Prometheus: A Knowledge-Graph-Driven AI Agent that maps , understands , and repairs complex codebases — not by guessing, but by reasoning. ⚡项目地址https://gitcode.com/gh_mirrors/prometheus43/Prometheus点击查看免费下载Prometheus 是一个知识图谱驱动的 AI Agent能够自动理解复杂代码库并修复代码 Issue。本文面向新手带你深入解读它的核心机制多候选补丁生成、多级测试验证与LLM 最优补丁选择——为什么一次生成多个补丁 层层测试筛选 投票选优能让自动修 Bug 的成功率显著提升。一、为什么需要多候选补丁让 LLM 一次性生成修复补丁单次成功率并不可靠模型可能定位错文件、改法过于激进、或引入新的回归问题。Prometheus 的思路很直白——像海选选手一样多生成几个候选补丁candidate patches用测试一道道筛最后再让 LLM 从幸存者中票选出最优解。补丁数量由number_of_candidate_patch参数控制在 Issue 处理入口 issue.py 传入并写入状态定义 issue_bug_state.py。整个修 Bug 流程的调度中心是 issue_bug_subgraph.py它通过条件入口决定走哪条路线有回归测试可选→ 先筛选回归测试bug_get_regression_tests_subgraph_node能复现 Bug→ 走已验证 Bug 路线issue_verified_bug_subgraph_node无法复现→ 走未验证 Bug 路线issue_not_verified_bug_subgraph_node二、多候选补丁是怎么生成的2.1 已验证 Bug 路线生成一个验证一个不过就重来核心实现在 issue_verified_bug_subgraph.py每个补丁的诞生都遵循同一个闭环检索上下文从知识图谱中取出与 Bug 相关的代码片段context_retrieval_subgraph_node语义分析强模型advanced_model分析 Bug 根因并给出假设编辑代码edit_node通过read_file/edit_file工具做精确的字符串替换编辑固化为补丁GitDiffNode 用git diff把改动变成 patch随后 GitResetNode重置工作区保证下一次生成从干净状态开始关键在于第 216-223 行的回边如果复现测试没通过reproducing_test_fail_log非空流程会回到分析节点重新想方案而不是直接判死。失败日志本身就是下一轮生成的教训。2.2 未验证 Bug 路线批量刷补丁如果 Bug 无法复现issue_not_verified_bug_subgraph.py 采用批量生成策略git_diff_node之后有一个循环判断第 143-150 行——补丁数量 number_of_candidate_patch ? 是 → git_reset_node → 清空对话消息 → 重新分析 → 再生成一个 否 → 进入归一化与选择每生成一个补丁就重置代码仓库和对话消息让 LLM 每次都能独立思考从而产出多个风格、思路各异的候选补丁。三、多级测试验证三道关卡层层过滤 Prometheus 把测试验证设计成三级漏斗代码改动在 Docker 容器沙箱中执行互不污染。3.1 第一关复现测试Reproduction Test实现在 bug_fix_verification_subgraph.py步骤是应用候选补丁edit_patch叠加 Bug 复现补丁即当初复现 Bug 时写入的测试代码同步容器后由 BugFixVerifyNode 在容器里真实执行复现命令BugFixVerifyStructuredNode 解析输出通过则返回空日志失败则带回完整失败日志在 bug_fix_verification_subgraph_node.py 第 58-60 行只有通过复现测试的补丁才会被追加进pass_reproduction_test_patches列表——状态定义中它使用了 LangGraph 的累加器见 issue_verified_bug_state.py 第 21 行补丁是攒出来的。3.2 第二关回归测试Regression Test当通过的复现测试补丁还没攒够目标数量、且用户开启了回归测试时流程进入 get_pass_regression_test_patch_subgraph.py。这是一个循环结构while 还有未测补丁: 打补丁 → 更新容器 → 跑回归测试套件 → 记录通过/失败最终只保留通过回归测试的补丁tested_patch_result中passedTrue的条目改动虽能修 Bug 但会弄坏其他功能的补丁在这里被一票否决。3.3 第三关既有测试套件Existing Tests流程末端如果开启了run_existing_test还会跑一遍项目原有的完整测试run_existing_tests_subgraph.py。失败日志一旦非空同样会打回分析节点重新修复——这是交付前的最后一道保险。四、LLM 最优补丁选择先归一化再投票 4.1 归一化去重Patch Normalization候选补丁进入选择前先经过 patch_normalization_node.py 处理剥掉 diff 元数据diff --git、index哈希、文件模式、时间戳等行统统去掉只保留真正的代码变更路径归一后按内容分组内容相同的补丁视为重复只保留一份代表作这样既降低了后续 LLM 的输入规模也天然实现了多数模型殊途同归的方案更可信的加权思路。4.2 多数投票 提前终止Final Patch Selection真正的主角是 final_patch_selection_node.py。它把 Issue 信息、代码上下文和全部候选补丁交给 LLM但不信任单次判断而是进行多数投票majority voting默认进行10 轮独立投票majority_voting_times 10第 139 行每轮 LLM 以结构化输出返回reasoningpatch_index提前终止一旦第一名的领先票数超过剩余票数第 192-207 行结果已不可逆转立即结束节省 LLM 调用兜底策略无候选补丁时退回原始edit_patches只有一个候选时直接采用4.3 选择标准四条优先级准则系统提示词第 21-26 行为 LLM 规定了清晰的评分维度优先级准则含义1有效性必须真正修复了 Issue 描述的根因2保留性不破坏既有功能除非 Issue 明确要求改行为3最小化改动越少越好拒绝顺手重构4风格一致与周围代码的编码风格保持一致这套有效性 保留性 最小化 风格的排序本质上是在模拟资深 Reviewer 的决策逻辑。五、最终效果SWE-bench Lite 上的成绩单 这套多候选 多级验证 投票选择机制的效果可以从项目评测数据中看出Prometheus 配合 DeepSeek-V3 在 SWE-bench Lite 上取得了28.67%的 Pass1与同级别的 Agent 方案处于同一梯队。六、本文涉及的核心源码文件 模块职责issue_bug_subgraph.pyBug 修复总调度选择复现/回归/未验证三条路线issue_verified_bug_subgraph.py已验证 Bug单补丁生成-验证迭代闭环issue_not_verified_bug_subgraph.py未验证 Bug批量生成 N 个候选补丁bug_fix_verification_subgraph.py第一关复现测试验证get_pass_regression_test_patch_subgraph.py第二关回归测试筛选patch_normalization_node.py补丁归一化与去重final_patch_selection_node.pyLLM 多数投票选出最优补丁issue_bug_responder_node.py生成最终的 Issue 回复写在最后Prometheus 的补丁机制给新手的最大启示是不要迷信 LLM 的一次正确。用测试代替猜想来筛选候选、用投票代替直觉来做决策、用重置和沙箱保证每一步都可回滚——这套工程化的海选-筛选-投票流程正是知识图谱驱动 AI Agent 在自动修 Bug 任务中稳定性的来源。如果想继续深入可以从 issue_graph.py 入手追踪一个 Issue 从分类到最终补丁的完整旅程。赞分享【免费下载链接】Prometheus Prometheus: A Knowledge-Graph-Driven AI Agent that maps , understands , and repairs complex codebases — not by guessing, but by reasoning. ⚡项目地址https://gitcode.com/gh_mirrors/prometheus43/Prometheus点击查看免费下载相关推荐OpenCore Legacy Patcher 完整流程2015 年前的旧 Mac 装上新版 macOS四步跑通OpenCore Legacy Patcher 完整流程2015 年前的旧 Mac 装上新版 macOS四步跑通 当“软件更新”弹出“无法在此 Mac 上安操作系统固件驱动开发GHelper用单个 exe 管好华硕笔记本的风扇、显卡模式与充电上限GHelper用单个 exe 管好华硕笔记本的风扇、显卡模式与充电上限 GHelper 是面向华硕笔记本与 ROG Ally 掌机的轻量级开源控制工具可视为桌面应用系统编程draw.io 桌面版完整安装教程3 步装好并跑通离线画图draw.io 桌面版完整安装教程3 步装好并跑通离线画图 drawio desktop 是 draw.io 的官方 Electron 桌面构建GPL v3桌面应用图形学创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考