Skip to content

Translation in progress Some entries still include text in the original language.

Hugging Face Daily Papers· arXiv:2609.38807·Indexed by this site · Originally published

PatchHolmes: An agent-based patch retrieval system using list-style selection

PatchHolmes: Agentic Patch Retrieval via Listwise Selection

Quick read

Other

Based on 论文 PDF (AI 生成); refer to the original

PatchHolmes 用混合检索加列表式智能体,在 GitHubAD 上以 Qwen3-235B 取得 Recall@1 59.95%,比 Favia 高 25.34 个百分点。

Questions
漏洞管理需要把已披露漏洞对应到修复提交,但主要公告库中 60%–63% 的 CVE 缺少补丁链接。补丁检索面对大仓库、长 diff 和词汇重叠少,逐点打分又难以打破并列。
Methods
PatchHolmes 分两阶段:BM25 加时间衰减与 Qwen3-Embedding-8B 经 RRF 融合出 top-100,再用四个有预算工具的智能体列表式阅读 3–10 个提交并提交一个最佳提交。
Experiments and results
在 GitHubAD 的 809 个 CVE 上,Qwen3-235B 的 Recall@1 为 59.95%,高于 Favia 的 34.61% 和 IRCoT 的 28.55%。同一候选集上智能体相对检索器首位增加 27.32 个百分点;换到 PatchFinder_top10 后从 24.28% 升至 39.86%。
Limitations and future work
作者指出只能评测已有补丁链接的 CVE,PatchFinder_top10 的可恢复上限为 46.10%,超大仓库在抽样时用了中位数替代,多修复 CVE 只记录部分合法提交。评测主结果在 809 个 CVE 的工作子集上,骨干为开源权重模型。
Experimental setupQwen3-235B、Qwen3-Coder-30B et al. · GitHubAD、PatchFinder_top10 · Recall@K、NDCG@K et al.
Evaluated models
Qwen3-235BQwen3-Coder-30Bgpt-oss-120Bgpt-oss-20B
Benchmarks
GitHubADPatchFinder_top10
Metrics
Recall@KNDCG@KMRRmicro-F1
AI summaryPatchHolmes proposes a method that lets an AI agent read the top 100 candidate commits at once and open commits one by one through four budget-constrained tools to locate vulnerability-fixing patches, improving Recall@1 from 34.61% for pointwise systems to 59.95%. The system requires no fine-tuning or paid search APIs, relies solely on frozen open-source weight models running on a local Git clone repository, and consumes about 96,000 input tokens, performs 8 tool calls, and reads 5 commits per run.

PatchHolmes proposes a method that lets an AI agent read the top 100 candidate commits at once and open commits one by one through four budget-constrained tools to locate vulnerability-fixing patches, improving Recall@1 from 34.61% for pointwise systems to 59.95%. The system requires no fine-tuning or paid search APIs, relies solely on frozen open-source weight models running on a local Git clone repository, and consumes about 96,000 input tokens, performs 8 tool calls, and reads 5 commits per run.

Paper analysis

6 questions; open one to read the full answer

  1. What problem does this paper attempt to solve?

    在本地 Git 仓库中,用冻结开源模型从大量提交里找出修复已知 CVE 的那一次提交。

    补丁检索(patch retrieval)要在给定仓库中找出修复已知 CVE 的提交标识,但主要公告库大量缺少补丁链接,且现有选择器难以处理长 diff 与并列候选。

    • 场景与重要性:作者认为漏洞管理依赖“每个已披露漏洞对应上游修复提交”。下游包括安全公告、CVSS、受影响版本范围和 SBOM 供应链扫描。独立研究称 GitHub Advisory Database 与 NVD 中 60%–63% 的 CVE 缺少补丁链接(Dunlap et al., 2024; Zheng et al., 2026);即便有人工辅助,基于辅助信息的匹配也只能恢复 12%–53%(Tan et al., 2021)。CVE-2013-1814 的补丁在披露约十年后才出现。
    • 任务难点:作者给出三点。49% 的 CVE 所在仓库超过 5,000 次提交(Zheng et al., 2026)。在 8,401 个 CVE 的 GitHubAD 语料中,提交 diff 平均约 15,000 token,超过 BERT 类编码器的 512-token 窗口。CVE 描述与修复提交消息词汇重叠少:前者写安全症状,后者写底层缺陷。第一阶段常能把正确提交放进 top-100,但金标可位于这 100 名中的任意位置,瓶颈在第二阶段选择器。
    • 现有方法不足:传统补丁检索是开环的,静态特征只打分一次,无法在首位错误时改查询、细读或回退;预训练语言模型(pre-LLM)编码器截断长 diff。通用闭环检索器面向开放网页多跳问答,迁移到这一封闭世界较弱;IRCoT 在作者设置下 Recall@1 仅 28.55%。Favia 对 10 个预筛选候选各自做 yes/no 加置信度,调用彼此独立,多个候选都为 yes 时,排序由候选顺序而非内容决定。
    • 本文提出:PatchHolmes,两阶段系统:混合第一阶段检索器产出 top-100,智能体第二阶段用四个有预算的工具列表式阅读候选,每个 CVE 一次对话、提交一个最佳提交。系统在冻结开源权重模型上、对本地 Git 仓库运行,不做按仓库微调,也不调用付费外部搜索 API。
  2. What related research exists?

    相关工作分补丁检索、推理密集型检索,以及代码与检索智能体;直接对标的是 Favia。

    作者把相关工作分成三组,并在实验中与四类方法比较。

    补丁检索

    • PatchScout(Tan et al., 2021):用手工设计的漏洞–提交相关性(文件路径、类型、标识符)做特征排序,建立了特征排序模板。
    • PatchFinder(Li et al., 2024):确立两阶段模板,词法与神经第一阶段检索后,用微调交叉编码器处理每个 CVE 的 top-100。
    • SPFinder(Zheng et al., 2026)与 Favia(Storhaug et al., 2026):SPFinder 保持两阶段,用层次嵌入和基于特征的梯度提升重排序处理长 diff。Favia 用大语言模型对每个候选输出逐点 yes/no 和置信度。作者称 PatchHolmes 面向同一设定,但用一次智能体循环替代 SPFinder 的开环特征栈和 Favia 的独立逐点调用。

    推理密集型检索

    • 词汇重叠与 BRIGHT(Su et al., 2025):作者引用 Storhaug et al. (2026),称开放域检索常有多篇相关文档,而补丁检索在最多约 140 万次提交中只有一个正确提交,且 CVE 描述与修复提交词汇重叠少。BRIGHT 构造的正是经典检索器失效、推理增强检索器增益最大的区间。
    • Chen et al. (2025b):在深度研究基准上,固定大语言模型智能体后,更换检索器对端到端准确率的影响大于更换智能体。作者认为本文“固定候选时智能体增加 27.32% Recall@1、同族骨干更换不足 1%”与这一图景一致。

    代码与检索智能体

    • ReAct 及文本侧闭环(Yao et al., 2023 等):Phase 2 采用推理与工具交替。文本侧包括检索与思维链交替(Trivedi et al., 2023)、按不确定性再检索(Jiang et al., 2023)、训练批评者决定何时检索(Asai et al., 2023),以及用强化学习在搜索引擎上端到端学习循环(Jin et al., 2025a; Chen et al., 2025a)。
    • 代码仓库智能体:包括面向 Linux 内核崩溃、可查提交历史与代码符号的深度研究智能体(Singh et al., 2026),把仓库编成知识图谱再用查询语言搜索(Shah et al., 2025),以及用强化学习训练的仓库导航智能体(Ma et al., 2025)。作者称在智能体系统中,只有 Favia 直接针对补丁检索,并在 §4.2 与之正面比较。

    基线方法与基准

    • 基线:Favia(逐点二分类,带两个 NVD/CWE 元数据工具)、IRCoT(经 FlashRAG 的检索后推理,第一阶段用 e5)、SPFinder(无推理时大语言模型调用的两阶段检索),以及 PatchFinder 在其自身 10 候选池上的排序。GitHubAD 上还比较“无智能体、按 Phase 1 排序取首位”。
    • 基准/数据集:GitHubAD(Zheng et al., 2026)的 809-CVE 工作子集,源语料为清洗后的 8,401 个 CVE;PatchFinder_top10(Storhaug et al., 2026)为 1,252 个 CVE,每条配有 PatchFinder 的 TF-IDF + CodeReviewer 预排序给出的 10 个候选。

    作者将本文定位为:在同一冻结模型、本地仓库、无微调、无外部搜索 API 的约束下,用列表式选择替代逐点打分和开环重排序。

  3. How does the paper address this problem?

    Phase 1 用 RRF 融合词法、时间与稠密检索得到 top-100,Phase 2 用四工具智能体列表式选出一个提交。

    PatchHolmes 把 CVE 描述 q 和目标仓库 R 的提交映射到一个预测修复提交:Phase 1 面向召回,只凭 q 取出 100 个候选;Phase 2 面向精度,用大语言模型智能体在该集合中选出一个。两阶段除候选标识外不共享状态。

    问题设定

    • 输入与输出:输入为 CVE 描述和通常含数千到数百万次提交的仓库。输出是候选集合中的单一提交及自由形式推理。CVE 描述原文送入智能体,不预先抽成 CWE 或受影响版本等字段。
    • 运行约束:主骨干为 Qwen3-235B(规范标识 Qwen3-235B-A22B-Instruct-2507),次骨干为 Qwen3-Coder-30B。智能体在 OpenHands-SDK Conversation 中运行,max_iter = 15,启用卡住检测;调用 submit_answer、达到迭代上限,或连续两次相同动作即终止。作者称四工具设计不绑定特定智能体框架。

    Phase 1:混合检索

    • BM25 与时间衰减:词法路径按固定权重组合四路信号:

    slex(c)=0.35 bmsg(c)+0.15 bdiff(c)+0.30 treserve(c)+0.20 tpublish(c) bmsg、bdiff 分别是提交消息和 diff 正文的 BM25,并相对该字段 top-10,000 命中做 min-max 归一化。时间项比较提交时间与 CVE 的 reserve 日期、公开披露日期。作者称这四项权重来自 SPFinder 在该时间信号上的网格搜索;消息权重最大是因为消息与 CVE 描述的词汇重叠多于原始 diff。

    • 时间秩:在按时间排序的 top-10,000 BM25 候选内,局部秩 r 相对 CVE 局部秩 c 的时间秩为 1/(1+2|r−c|)。分数在时间最近处最高,并对称衰减(|r−c|=0 时为 1,差 1 时为 1/3,差 10 时为 1/21)。作者称秩差形式便于与倒数秩融合,而不必再标定绝对时间差。
    • 稠密路径:Qwen3-Embedding-8B 把 CVE 描述和每个提交嵌入共享的 4096 维空间,按余弦相似度排序。diff 按信息密度分四桶(文件路径 > hunk 头 > 增删行 > 上下文行),在 6,000 字符预算内从高到低整行填充。作者在试点中称 6,000 字符最好:超出编码器有效窗口后,质量下降快于额外上下文的收益。嵌入按仓库离线预计算并缓存为矩阵。试点中把 Qwen3-Embedding-8B 换成同骨干的 Octen-Embedding-8B,Phase 1 稠密支路 Recall@1 从 43.39% 降到 12.73%(附录 A.2)。
    • RRF 与截断:两路完整排序以 k=60 做 Reciprocal Rank Fusion,融合分是两路 1/(60+r) 之和。融合分 top-1000 写入磁盘,Phase 2 读取前 100。作者称 100 既能看到开环排序靠后的金标,又让清单 token 留在一次大语言模型调用的容量内。

    Phase 2:列表式工具循环

    • Survey:list_candidates 无参数,按 Phase 1 秩为每个候选返回一行:秩、提交 id、提交消息首行,以及按类型计的改动文件数。这是智能体一次看到全部 100 个候选的唯一调用。
    • Inspect:read_commit 返回提交消息、带标签和增删行数的文件清单,以及 8,000 字符预算内的 diff。字符上限参考 Pillow 的 19,173 次提交历史(p50=0.5K、p90=3.4K、p99=26K 字符)。渲染分三步:按文件切分;用启发式给文件优先级(奖励源代码标签、不超过上限的较大编辑、与 CVE 描述的路径 token 重叠,惩罚很大的重构型 diff,细则在附录 A.3);按优先级写入预算,放得下则保留全文,否则压缩,仍溢出的文件在清单中指向 read_file_diff。
    • Drill 与 Submit:read_file_diff 对单个文件取最多 16,000 字符的 diff,用于提交级预算截断了相关文件,或若干候选改同一文件时做并排比较。submit_answer 恰好调用一次,参数为 commit_id 与 reasoning,提交的标识即为检索结果。每个 CVE 记录最佳提交、推理、主动阅读的提交(通常 100 个中的 3–10 个)和完整工具轨迹。
    • 为何四个工具:作者称这是从固定候选池选一个提交的最小充分集合。补丁检索不改代码,导航和编辑工具没有角色,候选已由 Phase 1 固定,因此也不需要开放式 bash。对照中,SWE-agent 为开放式代码编辑暴露十个工具,mini-SWE-agent 收成单个 bash 工具。附录 A.4 给出完整系统提示词。
  4. What experiments did the paper conduct?

    在 GitHubAD 809 个 CVE 上,Qwen3-235B 的 Recall@1 为 59.95%,高于 Favia、IRCoT 和 SPFinder。

    实验设置

    • 语料:GitHubAD 工作子集为 809 个 CVE,从清洗后的 8,401-CVE 源语料按仓库分层抽样(附录 Algorithm 1)。PatchFinder_top10 为 1,252 个 CVE,每条有 10 个预筛选候选。附录 A.5 另对完整 8,401-CVE 源语料做一次稳健性检查。抽样在 9 项拟合检验中通过 6 项(语言、CWE 族、预排序秩的卡方,diff token 与年份的 KS,联合特征的核两样本检验,p 值均高于 0.1);未通过的 3 项在提交数和 diff-token 尾部。143 个超大仓库因历史过大未完整解析,提交数与金标 diff 长度用全语料中位数填补(附录 A.1)。
    • 为何用子集:作者称 Favia 的逐点设计每个 ⟨CVE, candidate⟩ 约 67,000 token。8,401 个 CVE、每条 10 个候选约 56 亿输入 token,按作者的 Qwen3-235B 费率约 400 美元/遍;10 倍子样本约 40 美元。
    • 被测骨干:主结果用 Qwen3-235B;骨干替换还包括 Qwen3-Coder-30B、gpt-oss-120B、gpt-oss-20B。Phase 1 稠密检索为 Qwen3-Embedding-8B;IRCoT 第一阶段为 e5(intfloat/e5-base-v2)。规范标识与服务方见附录 Table 15。
    • 方法:同一金标上比较 PatchHolmes、Favia、IRCoT 和 SPFinder。Favia 与 IRCoT 共用 Qwen3-235B;SPFinder 推理时无大语言模型调用,在同样 809 个 CVE 上端到端运行。PatchFinder_top10 上跳过 Phase 1,Phase 2 的四个工具和提示词不变。
    • 指标与判定:报告每 CVE 的 Recall@K、NDCG@K、MRR;PatchFinder_top10 另报告 micro-F1。分母是全部 CVE,运行错误计 0 而不是丢弃。IRCoT 只输出一个选择,因此各 K 的 Recall 相同。为与 Favia 的 10 深输出对齐,PatchHolmes 的检查列表用 Phase 1 顺序补到长度 10(附录 A.11)。作者用 McNemar 精确检验和 95% bootstrap 置信区间。

    主结果

    据 Table 1,GitHubAD、809 个 CVE、Qwen3-235B,百分比:

    Swipe horizontally to read the table

    方法R@1R@10NDCG@10MRR
    PatchHolmes59.9577.2668.0165.13
    Favia34.6172.3153.9147.93
    IRCoT28.5528.5528.5528.55
    SPFinder27.3270.3629.6944.06
    Favia,用本文 top-1039.8072.0656.2351.14
    IRCoT,用本文 top-10037.5837.5837.5837.58
    无智能体(Phase 1 秩)32.6372.31未报告未报告
    • 作者的解读:作者称 PatchHolmes 在 Table 1 每一列都高于各基线。相对最强基线 Favia,Recall@1 差距为 25.34 个百分点。对同一 809 个 CVE,McNemar 精确检验在 Recall@1 上 p = 2.4×10⁻⁴⁴,其余截断 p < 0.002。PatchHolmes 的 Recall@1 95% bootstrap 区间为 [56.7, 63.5],Favia 为 [31.3, 37.9],二者不重叠(附录 A.6)。正确提交位于秩 1 的比例为 59.95%,位于 top-10 的比例为 77.26%。作者称对该列表的校准置信度留作未来工作。
    • 差距来自选择器:无智能体直接取 Phase 1 秩 1 为 32.63%;同一 100 个候选上智能体为 59.95%,作者称智能体单独增加 27.32 个百分点。Favia 换到本文 top-10 后从 34.61% 到 39.80%,IRCoT 换到本文 top-100 后从 28.55% 到 37.58%;作者称更强候选集分别值 5.19 和 9.03 个百分点,对齐候选后仍剩 20.15 和 22.37 个百分点来自选择方法。
    • 逐点与 IRCoT:作者称 Favia 的 Recall@10 为 72.31%,只比 PatchHolmes 的 77.26% 低 4.95 个百分点,但 Recall@1 低 25.34 个百分点;SPFinder 同样是 Recall@10 70.36%、Recall@1 27.32%。NDCG@10 上 PatchHolmes 68.01%、Favia 53.91%,差 14.10 个百分点。作者称 IRCoT 在各 K 与 MRR 上都是 28.55%,原因是单选择输出,以及 FlashRAG 继承的 e5 把 diff 截到 512 token。

    跨语料迁移

    • 测了什么:PatchFinder_top10 的 1,252 个 CVE、固定 10 候选、同一 Qwen3-235B,跳过 Phase 1。Table 2:PatchHolmes 的 Recall@1 / Recall@5 / Recall@10 / NDCG@10 / MRR 为 39.86 / 45.21 / 45.93 / 43.07 / 42.13;PatchFinder 自身排序为 24.28 / 40.18 / 46.09 / 34.55 / 30.93。
    • 结果:作者称绝对增益 15.58 个百分点,相对增益 64.16%。1,252 条中只有 577 条的金标在给定池内,另 675 条对任何必须从这 10 个里选一个的系统都不可恢复,Recall@10 上限为 46.10%。作者称 PatchHolmes 收回了从 24.28% 到该上限之间差距的 71.40%。
    • 作者的解读:列表式选择在同一骨干上优于逐点分类和检索加思维链;同一智能体不改提示词即可迁到别人生成的候选池。

    骨干、成本与工具消融

    • 骨干(Table 4,候选与提示词固定):Qwen3-235B 的 Recall@1 为 59.95%,Qwen3-Coder-30B 为 59.09%(差 0.86 个百分点),gpt-oss-120B 为 56.98%,gpt-oss-20B 为 49.81%,无智能体为 32.63%。作者称 gpt-oss 更常在提交前碰到 15 轮上限(提交率 70% 与 54%,Qwen3-235B 为 90.5%),未提交则回退 Phase 1 顺序。作者把这读作智能体循环在更换骨干后仍保持增益,并写明这不是“规模无关”的证明:比较覆盖两个家族、总参数 20B 到 235B 的开源权重模型。Qwen3-235B 为 22B 激活参数,Qwen3-Coder-30B 为 3B 激活,作者称约 7.3 倍。
    • 成本(Table 5,809 个 CVE):Qwen3-235B 每 CVE 平均输入 96,118 token(中位 82,326,p90 175,632)、输出 846 token,约 8 次工具调用,阅读 5 个提交,墙钟平均 86 秒(中位 49)。超过 32K 上下文的 CVE 占 0.49%。按附录 Table 15 的 OpenRouter 费率,作者称约 0.007 美元/CVE,全量 8,401 个 CVE 约 58 美元,对照同费率下 Favia 约 400 美元;作者称 token 约为 Favia 的 1/7,Recall@1 高 25.34 个百分点。Qwen3-Coder-30B 的 Recall@1 为 59.09%,墙钟平均 39 秒,使用 read_file_diff 的 CVE 占 62.3%(235B 为 15.6%)。
    • 消融(Table 3,同一 809 个 CVE):BM25-only 的 Recall@1 为 39.68%;BM25+时间衰减为 49.57%;仅稠密为 57.11%,比 MAIN 的 59.95% 低 2.84 个百分点,Recall@10 低 5.32 个百分点(71.94% 对 77.26%)。把短描述换成完整 NVD 报告后 Recall@1 为 59.83%,Recall@10 为 75.15%,上下文溢出从 0.49% 升到 2.60%(平均 1,786 字符对约 150 字符)。仅 list_candidates 加提交为 48.21%(相对无智能体 +15.58 个百分点);无 diff 正文的 read_commit 概览为 57.48%;完整四工具为 59.95%。作者称每一项工具都增加召回,界面贡献大于一个通用 ReAct 循环。

    其他消融与分析

    • 稠密嵌入试点:Qwen3-Embedding-8B 的 Phase 1 稠密支路 Recall@1 为 43.39%,换成 Octen-Embedding-8B 为 12.73%(附录 A.2)。
    • IRCoT 在 10 倍语料规模变化下变化至多 1.36%(附录 A.5);作者据此认为主差距不是 GitHubAD 子样本造成的。
    • 附录 A.8:在 11 个仓库、2013–2025 年披露的 35 个独立真实 CVE 上,全系统 Recall@1 为 60.0%。
    • 多修复:源语料 8,401 个 CVE 中 92.72%(7,789)只有一个记录的修复提交,7.28%(612)有多个,均值 1.12;809 子集为 93.08% 与 6.92%(附录 Table 14)。命中定义为提交出现在记录的金标集合中。
    • Figure 1 的个案:CVE-2015-9251,金标在 Phase 1 top-10 的秩 9。作者称 Favia 给 10 个候选全部“yes”且置信度 5,并选了秩 1 的重构;PatchHolmes 按秩 1、2、9、4、3 阅读五个提交后选中金标。Figure 2(a) 标注 GitHubAD 上 ours 59.95、Favia 34.61、IRCoT 28.55;Figure 2(b) 标注 PatchFinder_top10 上 ceiling 46.10、ours 39.86、PatchFinder 24.28。
    • 超参数默认值见 Table 16:词法权重 0.35/0.15/0.30/0.20,diff 预算 6,000 字符,RRF k=60,Phase 2 截断 100,max_iter=15,read_commit 8,000、read_file_diff 16,000;IRCoT 每 CVE 4 轮、每轮 top-10。作者称没有按 CVE 调参。
  5. What are some points that can be further explored?

    作者写明评测只覆盖已有补丁链接的 CVE,并指出多修复标注和候选池上限。

    作者指出的局限与后续方向

    • 补丁链接稀疏(Limitations):只能在补丁已被找到的 CVE 上测试。主要漏洞库中 60%–63% 的 CVE 没有补丁链接,8,401-CVE 源语料是通过该过滤后剩下的子集。作者称任何补丁检索方法,包括本文,都只在总体中较容易的一部分(补丁已被定位的 37%–40%)上评测;从未找到修复的困难案例不在该领域任一基准中。
    • 独立真实 CVE 仍需已知修复(Limitations):在 11 个仓库、2013–2025 年披露的 35 个 CVE 上 Recall@1 为 60.0%,与 GitHubAD 的 59.95% 相符(附录 A.8);作者称这仍需要已知修复才能计分,因此没有消除范围限制。
    • PatchFinder_top10 的可恢复上限(Limitations):该基准把所有人的分数上限定在 46.10%。1,252 个 CVE 中只有 577 个的真实修复在给定的 10 候选里,其余 675 个对必须从这十个中选一个的系统不可恢复。作者称 39.86% 收回了从 24.28% 到该上限的 71.40%,绝对数被数据集压低。
    • 源语料大分片(Limitations):143 个仓库的提交历史文件超过 500 MB,完整解析会给每次抽样增加数小时,因此用全语料中位数替代其提交数和金标 diff 长度。作者称这使样本在这两条轴上看起来比源语料更均匀;语言、漏洞类型、预排序难度和联合分布仍与源语料相符。
    • 多修复歧义(Limitations):一个 CVE 有时有多个合法修复提交,但金标只列出其中一部分。回移植、拆成多次提交的重构和下游合并都可能是有效修复。若智能体选了同样有效但未被记录的修复,本文和同一数据集上其他单选择方法都记为未命中。
    • 校准置信度(§4.2):作者称对排序列表的校准置信度分数仍是未来工作。

    实验覆盖范围

    • 头对头主结果在 GitHubAD 的 809-CVE 工作子集上,骨干为 Qwen3-235B;另有 PatchFinder_top10 的 1,252 个 CVE,以及附录 A.5 对 8,401-CVE 源语料的一次稳健性检查。
    • 骨干替换为 Qwen3-235B、Qwen3-Coder-30B、gpt-oss-120B、gpt-oss-20B;Phase 1 稠密模型为 Qwen3-Embedding-8B,并在附录 A.2 与 Octen-Embedding-8B 做试点比较。
    • 比较对象为 Favia、IRCoT、SPFinder,以及无智能体的 Phase 1 秩;Table 3 消融了检索路径、短描述对完整 NVD 报告,以及工具组合。
    • 运行错误计入分母并记为未命中。统计报告包括 McNemar 精确检验和 Recall@1 的 95% bootstrap 区间(附录 A.6)。论文未报告评审模型与人工一致性,成功由提交是否落在记录的金标集合判定。
    • 成本写到每 CVE 的 token、工具调用、阅读提交数和墙钟时间(Table 5)。附录 A.8 的仓库外检查为 35 个 CVE、11 个仓库。
  6. Summarize the main content of the paper

    PatchHolmes 用混合检索和列表式四工具智能体做补丁检索,增益主要来自联合阅读候选而非更换骨干。

    PatchHolmes 是面向补丁检索的两阶段系统:在本地 Git 仓库上用冻结开源权重模型,为一个已知 CVE 找出修复提交,不做按仓库微调,也不使用付费外部搜索 API。

    • 问题:公告库中 60%–63% 的 CVE 缺少补丁链接。仓库往往很大,diff 平均约 15,000 token,CVE 描述与修复提交的词汇重叠少。逐点方法对每个候选独立打分,多个候选都判为 yes 时,名次由候选顺序决定。
    • 方法:Phase 1 将带时间衰减的 BM25 与 Qwen3-Embedding-8B 稠密检索用 k=60 的 RRF 融合成 top-100。Phase 2 的智能体最多 15 轮,通过清单、8,000 字符的提交级 diff、16,000 字符的单文件 diff 和一次提交,通常阅读 3–10 个候选后给出一个最佳提交。
    • 主结果:在 GitHubAD 的 809 个 CVE、Qwen3-235B 上,Recall@1 为 59.95%,Favia 为 34.61%,IRCoT 为 28.55%,SPFinder 为 27.32%。同一 Phase 1 候选上,无智能体为 32.63%,智能体高出 27.32 个百分点。
    • 迁移与骨干:跳过 Phase 1、用在 PatchFinder_top10 的 1,252 个 CVE 上,Recall@1 从 PatchFinder 自身的 24.28% 到 39.86%;该池的可恢复上限为 46.10%。Qwen 家族内 Recall@1 从 59.95% 到 59.09%;gpt-oss-120B 为 56.98%,gpt-oss-20B 为 49.81%,二者都高于 32.63% 的无智能体底线。
    • 成本与结论:Qwen3-235B 每 CVE 平均约 96,118 输入 token、86 秒。作者的结论是,补丁检索需要的是列表式智能体循环,而不是某一个大语言模型;同时,评测只覆盖已经有补丁链接的 CVE,多修复时未记录的合法提交会被记为未命中。
Read originalhuggingface.co