KnowForge:按职责拆分的工具 Agent 流水线,解锁开放域多模态文档问答
- 关联论文:2610.13128
- 作者:flyP
- 更新:2026-10-13
§0 自检
- 三证齐全度:✅ GitHub 已 fetch(
https://github.com/metask-ai/knowforge-bench,含代码、prompts、benchmark runner);⚠️ 顶会 venue+年份在 abstract 中未声明;✅ arXiv ID2610.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 三件难题:
- 检索正确 ≠ 读得正确:现有 RAG Agent 把"找段落 + 读段落"两种完全不同的能力塞进同一个 LLM,让它自己调度,常常"看似搜然后根本没读"。
- 多模态证据无法统一表示:文档里同时有文本、图像、表格,传统 RAG 把图像当附件跳过,导致读不出来。
- 二跳证据(second-hop)容易漏:问题需要从 A 文档跳到 B 文档才能回答,纯端到端 Agent 经常停在第一跳。
- 格式合规难保障:合成阶段不强制格式,下游消费方拿到不可解析的答案。
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):F147.5- 相对 published
M3DocRAG系统:+11.0 - 相对同索引同模型 one-shot baseline:
+7.1 - 切到
DeepSeek-V4-Flash:F153.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 亮点
- 职责拆分是真正的范式变化:Locator 只能 search、Deep Reader 只能 read,用工具权限物理切断幻觉路径,比 prompt 限制更可靠。
- 代码级调度桥接第二跳:Bridge Judge 不是 LLM,是确定性代码,避免 LLM 自身判断"要不要再搜"时的偷懒与幻觉。
- 类型化 + 大小有界的证据池:把"读多少"做上限,避免 context 爆炸;image / table / text 显式分类型,便于 Deep Reader 多模态融合。
- 延迟随模型调用而非语料规模增长:在工业上意味着 加语料几乎不增加延迟,是工程级的关键信号。
- 公开 benchmark runner + prompts + 三个 corpus 永久可读:
https://github.com/metask-ai/knowforge-bench,可复现性极佳。
§6 局限与负面发现
- ⚠️ 强约束的代价:拆职责意味着 Latency 增加,模型调用次数明显多于端到端 Agent;实时对话场景需谨慎,abstract 没披露 wall-clock。
- ⚠️ 多模态融合在 MMLongBench-Doc 上几乎无 Deep Reader 增益("
0 points"),说明在视觉信号不强的 corpus 上,KnowForge 的图像读取能力未被充分发挥——这一数字是 abstract 自带的明文负面发现。 - ⚠️ 合并双 Agent + 翻倍轮数反降
1.9F1:原文结论是"keeps searching instead of reading"——说明 KnowForge 收益部分来自对 Agent 自调度行为的强约束,而不是单纯来自"更大的 LLM"——若换成弱约束版本收益会立刻塌陷。 - ⚠️ 模型名需独立核实:
Qwen3.6-35B-A3B与DeepSeek-V4-Flash在公开版本号映射中尚未直接对应(截至 2026-10),落地前需打开 GitHub 仓库metask-ai/knowforge-benchREADME 校对实际权重与发布日。 - ⚠️ 轮数 plateau 在 4 轮,但 Locator 内部每轮 query 数 / 文本长度 abstract 未给出,影响对 token 成本的精细估算。
- ⚠️ Bridge Judge 是规则化的,对"问题是否真的需要二跳"的复杂判断可能失真;抽象层"必须二跳 vs 可不跳"边界不清晰,原文未明确("原文未明确")。
§7 对工程落地的启发
- 职责拆分是工程优先的一步:在自家 RAG 里把"search-only agent"与"read-only agent"做物理隔离,比 prompt 限制更稳。
- 让代码而非 LLM 决定"要不要再搜":第二跳判定、轮数上限、格式校验都建议代码化,避免 LLM 自身的"算了别搜了"幻觉。
- 类型化证据池:text / image / table 三类显式分流,Deep Reader 才能多模态融合;不要把整页 PDF 一起塞进 context。
- 大小有界 + 多 ranking 合并:多轮检索 ranking 合并时必须设上限,否则 token 成本随轮数线性爆炸;abstract 已经实证 query latency 随"模型调用数"增长而非 corpus 规模。
- 每职责独立消融:KnowForge 在三个 corpus 上给出 Deep Reader 增益
3.8 / 9.8 / 0,直观反映"该 corpus 多模态信号有多强"——工程团队可照搬这套"per-job ablation"模板评估自家 RAG。 - 公开 benchmark runner 是工业级友好信号:可以把三个 corpus(M3DocVQA / MultiHop-RAG / MMLongBench-Doc)作为内部回归基线。
- 轮数 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.5vs GraphRAG71.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 一句话结论 "从单基线((M3DocRAG 系) 的 +11.0" 有多余括号与"的"字重复,应删"单基线"后"的",改为"从 M3DocRAG 系的 +11.0"。
- §3 pipeline 图 格式合成器下游箭头指向不明,建议明确标注"→ 格式校验器 → 最终答案",避免读者误解为直接输出。
- §4 逐职责消融 "3.8, 9.8 and 0 points" 原文verbatim保留正确,但建议在数字后加注"(三个 corpus 各自增量)"避免歧义。
- §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 进一步校对。