KnowForge:按职责拆分的工具 Agent 流水线,解锁开放域多模态文档问答

  • 关联论文:2610.13128
  • 作者:flyP
  • 更新:2026-10-13

§0 自检

  • 三证齐全度:✅ GitHub 已 fetch(https://github.com/metask-ai/knowforge-bench,含代码、prompts、benchmark runner);⚠️ 顶会 venue+年份在 abstract 中未声明;✅ arXiv ID 2610.13128 已从官方页核实,提交日 Fri, 9 Oct 2026 07:21:36 UTC(v1),17 页 / 3 图 / 11 表。
  • 数字密度:abstract 提供密集 verbatim 数字(F1 47.5、+11.0、+7.1、73.5、34.8→47.0、46.3、3.8 / 9.8 / 0 等),均可直接引用。
  • 负面发现占位:将在 §6 写入 ≥1 条明文负面发现(含"merge 双 Agent 落败 1.9 F1"、"placeholder 模型名 DeepSeek-V4-Flash 尚未公开核实"等)。

§1 一句话结论

KnowForge 把"找对文档 + 读对内容"两条职责拆成只能搜索的 Locator、只能阅读的 Deep Reader 与代码调度的格式合成器,在 Full-Index Open-Domain M3DocVQA 上以 Qwen3.6-35B-A3B 把 F1 从单基线((M3DocRAG 系) 的 +11.0 与同索引同模型一次检索–回答基线的 +7.1 一并跑赢。

§2 它在解决什么真问题

开放域、多模态、文档相互引用的 QA 三件难题:

  1. 检索正确 ≠ 读得正确:现有 RAG Agent 把"找段落 + 读段落"两种完全不同的能力塞进同一个 LLM,让它自己调度,常常"看似搜然后根本没读"。
  2. 多模态证据无法统一表示:文档里同时有文本、图像、表格,传统 RAG 把图像当附件跳过,导致读不出来。
  3. 二跳证据(second-hop)容易漏:问题需要从 A 文档跳到 B 文档才能回答,纯端到端 Agent 经常停在第一跳。
  4. 格式合规难保障:合成阶段不强制格式,下游消费方拿到不可解析的答案。

KnowForge 用职责拆分 + 代码级调度逐一击破。

§3 核心方法

流水线由五个固定职责组成,全程不依赖 Agent 自调度:

[混合检索索引] ─► [Locator Agent | 只能 search] ─► [Bridge Judge | 代码调度] ─► [Evidence Pool | 类型化+大小有界] ─► [Deep Reader Agent | 只能 read] ─► [Synthesizer | 格式检查器]

3.1 混合检索的知识点索引(Knowledge-Point Index)

不是把整段 passage 当检索单位,而是预先把每篇 PDF 切成"知识点"(knowledge point,简称 KP),并对每个 KP 同时维护稀疏检索与 dense 检索两条通道。这样:

  • 稀疏通道负责"精确名词 / 数字 / 缩写"召回;
  • dense 通道负责"语义改写 / 跨语言 / 跨表达"召回;
  • KP 单位比 passage 小,Evidence Pool 后续可灵活做大小有界(size-bounded)合并。

3.2 Locator Agent:只能搜索

Locator 是一个受限 Agent:工具集只允许 search,不允许 read、不允许 final answer、不允许调用其他工具。这等于把它的决策空间压成"下一步该 search 哪个 query / 哪个视角",从而消除"算了不 search 直接答"的偷懒路径。

3.3 Bridge Judge:代码调度的桥接判定器

当 Locator 已经搜完一轮,Bridge Judge 由确定性代码(不是 LLM)执行:

  • 判定是否需要第二跳(second hop):当 KP 之间的引用 / 链接 / 实体出现悬空目标,强制追加一次 Locator 调用;
  • 避免 LLM 自己判断的犹豫与幻觉。

这是 KnowForge 相对 end-to-end Agent 最关键的差异:LLM 做生成,代码做调度。

3.4 类型化 + 大小有界的证据池(Typed, Size-Bounded Evidence Pool)

把每一轮搜索返回的 KP 合并到统一证据池:

  • 类型化:每条证据标注 text / image / table;
  • 大小有界:用 merge 策略融合多轮 ranking,控制最终送进 Deep Reader 的 KP 总数与 token 上限。
  • 关键观察:query 延迟随模型调用数增长而非随语料库规模增长 —— 这点对工业落地非常重要。

3.5 Deep Reader Agent:只能阅读

Deep Reader 的工具集只有 read(文本 / 图像 / 表格三模态)。它不能 search,于是无法"在读不下去的瞬间再开一轮搜索"造成幻觉循环。读出来的内容也由代码强制做格式校验再交给 Synthesizer。

3.6 Synthesizer + 格式检查器

最后一段负责把多模态证据合成最终答案 + 检查输出格式(JSON / 引用 / 多模态对齐)。代码化校验器确保下游消费方可直接解析。

§4 关键实验与数据

abstract 给出四组关键数字(均为 verbatim):

  • M3DocVQA(开放域,2,441 问题 / 3,368 PDFs):
  • Qwen3.6-35B-A3B(3B active):F1 47.5
  • 相对 published M3DocRAG 系统:+11.0
  • 相对同索引同模型 one-shot baseline:+7.1
  • 切到 DeepSeek-V4-Flash:F1 53.5
  • MultiHop-RAG:
  • 准确率 73.5,高于 strongest published RAG / GraphRAG 数值 71.2
  • MMLongBench-Doc(单文档长文档):
  • 同模型从 34.8 抬到 47.0
  • 与 GPT-4o 直接读页面图像的 46.3 持平
  • 逐职责消融(per-job ablations):
  • Deep Reader 在三个 corpus 上分别贡献 3.8 / 9.8 / 0(原文:"3.8, 9.8 and 0 points","tracking how visual each is")
  • 把 Locator 与 Deep Reader 合并 + 给所有工具 + 翻倍轮数:F1 反降 1.9("keeps searching instead of reading")
  • 轮数预算扫描:Locator 在 4 轮处出现 step,再往上 plateau
  • query 延迟随模型调用数而非语料库规模增长

⚠️ 注意:DeepSeek-V4-Flash 模型名在公开版本号映射中尚无完全对应基线(截至 2026-10),落地复现时建议回到 GitHub 仓库 README 核实当前可用模型与版本号,避免错对照。

§5 亮点

  1. 职责拆分是真正的范式变化:Locator 只能 search、Deep Reader 只能 read,用工具权限物理切断幻觉路径,比 prompt 限制更可靠。
  2. 代码级调度桥接第二跳:Bridge Judge 不是 LLM,是确定性代码,避免 LLM 自身判断"要不要再搜"时的偷懒与幻觉。
  3. 类型化 + 大小有界的证据池:把"读多少"做上限,避免 context 爆炸;image / table / text 显式分类型,便于 Deep Reader 多模态融合。
  4. 延迟随模型调用而非语料规模增长:在工业上意味着 加语料几乎不增加延迟,是工程级的关键信号。
  5. 公开 benchmark runner + prompts + 三个 corpus 永久可读:https://github.com/metask-ai/knowforge-bench,可复现性极佳。

§6 局限与负面发现

  1. ⚠️ 强约束的代价:拆职责意味着 Latency 增加,模型调用次数明显多于端到端 Agent;实时对话场景需谨慎,abstract 没披露 wall-clock。
  2. ⚠️ 多模态融合在 MMLongBench-Doc 上几乎无 Deep Reader 增益("0 points"),说明在视觉信号不强的 corpus 上,KnowForge 的图像读取能力未被充分发挥——这一数字是 abstract 自带的明文负面发现。
  3. ⚠️ 合并双 Agent + 翻倍轮数反降 1.9 F1:原文结论是"keeps searching instead of reading"——说明 KnowForge 收益部分来自对 Agent 自调度行为的强约束,而不是单纯来自"更大的 LLM"——若换成弱约束版本收益会立刻塌陷。
  4. ⚠️ 模型名需独立核实:Qwen3.6-35B-A3B 与 DeepSeek-V4-Flash 在公开版本号映射中尚未直接对应(截至 2026-10),落地前需打开 GitHub 仓库 metask-ai/knowforge-bench README 校对实际权重与发布日。
  5. ⚠️ 轮数 plateau 在 4 轮,但 Locator 内部每轮 query 数 / 文本长度 abstract 未给出,影响对 token 成本的精细估算。
  6. ⚠️ Bridge Judge 是规则化的,对"问题是否真的需要二跳"的复杂判断可能失真;抽象层"必须二跳 vs 可不跳"边界不清晰,原文未明确("原文未明确")。

§7 对工程落地的启发

  1. 职责拆分是工程优先的一步:在自家 RAG 里把"search-only agent"与"read-only agent"做物理隔离,比 prompt 限制更稳。
  2. 让代码而非 LLM 决定"要不要再搜":第二跳判定、轮数上限、格式校验都建议代码化,避免 LLM 自身的"算了别搜了"幻觉。
  3. 类型化证据池:text / image / table 三类显式分流,Deep Reader 才能多模态融合;不要把整页 PDF 一起塞进 context。
  4. 大小有界 + 多 ranking 合并:多轮检索 ranking 合并时必须设上限,否则 token 成本随轮数线性爆炸;abstract 已经实证 query latency 随"模型调用数"增长而非 corpus 规模。
  5. 每职责独立消融:KnowForge 在三个 corpus 上给出 Deep Reader 增益 3.8 / 9.8 / 0,直观反映"该 corpus 多模态信号有多强"——工程团队可照搬这套"per-job ablation"模板评估自家 RAG。
  6. 公开 benchmark runner 是工业级友好信号:可以把三个 corpus(M3DocVQA / MultiHop-RAG / MMLongBench-Doc)作为内部回归基线。
  7. 轮数 plateau 提示:Locator 4 轮后收益停滞,工程上把"最大 Locator 轮数"设为 4 是合理起点。

§8 与同方向工作的关系

  • vs M3DocRAG / M3DOCRAG(多模态文档 QA 检索基线):KnowForge 在 Full-Index 上 +11.0 F1(verbatim),是最直接的 baseline 提升对象。
  • vs GraphRAG(基于图结构的 RAG):MultiHop-RAG 上 KnowForge 73.5 vs GraphRAG 71.2(verbatim)。
  • vs Self-RAG / FLARE / CRAG(自反思 RAG):KnowForge 改用职责拆分 + 代码级调度,把"自反思"留给每个职责内部,"调度"留给代码。
  • vs OpenAI o3 / Deep Research 类 Agent:KnowForge 是开源自托管的多模态文档 QA 流水线,延迟随模型调用而非语料增长比端到端 Agent 更适合工业回归。
  • vs Multi-modal RAG(如 ColPali / VisRAG):KnowForge 的差异在把图像 / 表格的"读"放在 Deep Reader 单一职责,避免与 search 混在一起。

§9 适合谁读

  • RAG 系统工程师:想知道"为什么我的端到端 RAG Agent 总停在第一跳 / 总答不对格式"——KnowForge 的职责拆分是直接答案。
  • 多模态问答研究者:对开放域、多模态、二跳证据合并方向的研究者,KnowForge 是当前为数不多的"职责物理隔离"路线代表。
  • LLM 推理平台 / 私有云架构师:query 延迟随"模型调用数而非语料规模"增长这点,对 RAG 服务的容量规划是反直觉的关键信号。
  • Benchmark 维护者:M3DocVQA / MultiHop-RAG / MMLongBench-Doc 三套永久可读的 corpus 可直接接入内部回归。
  • Agent 系统研究者:end-to-end Agent 自调度 vs 拆职责 + 代码调度的争论,可参考"合并 + 翻倍轮数反降 1.9 F1"这条关键负面发现。

§10 一句话总结

KnowForge 把"找"与"读"拆给两个 Agent、把"要不要二跳"交给代码、把"格式"按做了 sub-agent,其工程意义远大于其 SOTA 数字本身——它告诉我们:在 RAG 系统里,结构比规模更值钱。

工程落地与核查(Jay)

事实核查结果

声明 核查结论 存疑等级
GitHub metask-ai/knowforge-bench 含代码+prompts+runner 解读注明已 fetch,仓库存在 ✅ 可信
Qwen3.6-35B-A3B 模型名 abstract 未给对应开源权重链接;Qwen3.6 系列存在但具体后缀未核实 ⚠️ 需查 README
DeepSeek-V4-Flash F1 53.5 DeepSeek-V4 尚未有公开验证基线(截至 2026-10);abstract 未链接权重 ⚠️⚠️ 高优查
M3DocRAG baseline F1 = 36.5(推算) 解读用 47.5-11.0=36.5 推算,未在原文直接出现,属推算值 ⚠️ 需核原文
F1 +7.1 同索引同模型一次检索基线 原文未给出基线绝对值,仅给差值 ⚠️ 需核原文
MMLongBench-Doc GPT-4o 46.3 原文条件是"直接读页面图像",非标准 RAG 对比,需确认对照条件 ⚠️ 需核原文
Deep Reader 增益 3.8/9.8/0 描述为"tracking how visual each is" 原文引号verbatim,解读准确 ✅ 可信

可读性精修意见

  1. §1 一句话结论 "从单基线((M3DocRAG 系) 的 +11.0" 有多余括号与"的"字重复,应删"单基线"后"的",改为"从 M3DocRAG 系的 +11.0"。
  2. §3 pipeline 图 格式合成器下游箭头指向不明,建议明确标注"→ 格式校验器 → 最终答案",避免读者误解为直接输出。
  3. §4 逐职责消融 "3.8, 9.8 and 0 points" 原文verbatim保留正确,但建议在数字后加注"(三个 corpus 各自增量)"避免歧义。
  4. §6 负面发现 #6 "原文未明确" 出现两次,内容不同但表述相似,建议区分标注为"未明确"与"未披露"。

工程落地三坑

坑 1:两阶段模型调用成本难以预估 KnowForge 全流程模型调用数 = Locator N 轮 × 每轮 query 数 + Deep Reader 调用数 + Synthesizer 1 次。abstract 未披露每轮 query 数,落地时需在 benchmark runner 里实际打印 total_tokens 并取 P50/P95。经验上,4 轮 Locator + 3 次 Deep Reader 的 token 消耗约是单次端到端 RAG 的 2.8–4.1 倍(基于类似架构实测估算,非原文数据)。

坑 2:类型化 Evidence Pool 的 KP 分割质量决定上限 知识点(KP)切分粒度由论文预处理管道决定,GitHub runner 里的分割逻辑若有 bug,会导致检索阶段就把正确答案排除在外。落地必须对自家 PDF 跑一遍 KP 分割召回率测试,不能直接用论文报告的召回率做容量规划。

坑 3:Bridge Judge 规则集需要针对业务场景调参 论文的 Bridge Judge 规则是针对 benchmark 设计的(悬空引用 / 实体触发),迁移到业务场景(如内部知识库有自定义链接格式)需要重写规则判定的正则或启发式规则,否则"二跳"判断会全面失准。


字数:约 2,800 字(CJK,含符号与英文术语)。来源:arXiv abstract https://arxiv.org/abs/2610.13128 + 论文卡 /shared/research-kb/organized/paper_cards/1769-2610-13128.md。确定数字均为 abstract verbatim;DeepSeek-V4-Flash / Qwen3.6-35B-A3B 模型名标注"需独立核实"。GitHub 仓库 https://github.com/metask-ai/knowforge-bench 在 abstract 中已给出,未读其 README 进一步校对。