超越Top-K:用可解释智能体操作替代黑盒检索
超越Top-K:用可解释智能体操作替代黑盒检索
论文原链接:https://arxiv.org/html/2608.06305v1
摘要
当前检索增强生成(RAG)主流范式为「文档分块→嵌入编码→召回Top-K相似片段」。本文针对财报、审计报告、监管申报这类高度表格化文档论证该架构存在结构性缺陷,并提供可量化实证。以780页印度古吉拉特政府财政报告为测试载体,文档86.8%内容为表格行,存在上万组近似数值;数值对应的单位、财年表头平均距离该行13行,固定分块极易将数字与单位拆分,造成百倍量级计算偏差。
本文构建最优分块基线(表格感知分块器),即便遍历所有分块尺寸,仍有27%~30%数值分块无法匹配对应财年表头。为此提出Read无嵌入智能体检索框架,基于Model Context Protocol暴露三类确定性文档操作:标准化词法检索、文档结构导航、有界区间读取。智能体可迭代组合工具完成查询,完整执行轨迹可复现、可审计。
在51道经过人工核验的财务问答任务上:Read准确率58.8%,稠密Top-K检索仅15.7%(Holm校正p=2×10−5p=2\times10^{-5}p=2×10−5);即便调优稠密检索至最优参数,最高仅35.3%,Read仍领先23.5个百分点(KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲p=0.017\))。同等智能循环、仅将检索工具替换为向量Top-K的对比系统仅27.5%,证明性能差距来源于检索接口本身,而非多轮迭代能力。
额外对比BM25稀疏检索:二者准确率无统计学差异,本文结论可区分嵌入类检索与纯词法无嵌入检索,而非智能检索与传统检索的优劣。
关键词:检索增强生成、智能体工具调用、可解释检索、长结构化文档、财务文档问答
目录
1 引言
2 相关工作
2.1 RAG系统完整组件梳理
2.2 长文档与结构化文档检索
2.3 智能体检索与工具使用
2.4 直接文档交互vs稠密向量检索
3 两类检索接口形式化定义
3.1 接口A:嵌入介导Top-K检索
3.2 接口B:可解释智能体Read操作集
3.3 确定性与可审计性说明
4 实验载体量化分析
4.1 测试文档基础信息
4.2 文档结构与数值分布特征
4.3 分块机制带来的信息丢失量化
5 Read框架实现细节
5.1 MCP服务四大核心工具
5.2 标准化匹配解决PDF转换失真
5.3 PDF转换性能天花板(固有信息损耗)
6 评测实验方案
6.1 对比系统完整清单
6.2 财务问答基准数据集构成
6.3 三重独立评测指标
7 预实验现象观测
8 完整实验结果
8.1 主实验整体准确率对比
8.2 无显著结论的对比项说明
8.3 性能差距来源拆解
8.4 无答案任务系统表现
8.5 各方案调用成本、时延对比
9 研究局限性
10 结论
1 引言
检索增强生成(RAG)是大模型外接外部知识的标准方案。行业标准流程:语料预分割文本块、通过双编码器生成稠密向量,查询时返回余弦相似度最高的Top-K片段拼接进提示词。十年来分块策略、嵌入模型、重排算法持续迭代,但底层范式从未改变:检索基于离线固定分块,模型无法干预、校验检索逻辑,只能被动接收不可解释的相似文本。
该范式在财报、审计、法定报表类文档存在结构性失效。此类文档三大核心特征:
- 内容以表格为主,占比超85%;
- 海量近似数值,嵌入空间大量数值向量高度重叠;
- 数值单位、财年定义存储在上方远处表头,分块极易割裂数值与释义。
典型示例:查询2024-25财年财政赤字与财政盈余差值,两个数值相隔47行,任意固定2000字符Top-K分块都无法同时召回两行,稠密检索直接返回缺失单条片段,模型无法计算差值;更危险场景:召回数值缺失单位表头,lakh(十万)与crore(千万)相差百倍,模型输出完全失真且无任何提示。
本文三步完成论证: - 量化结构化文档的数值、表头距离特征,测算分块造成的信息丢失比例;
- 构建表格感知强化分块器作为最优稠密基线,消除分块优化带来的变量干扰;
- 设计Read无嵌入智能体检索框架,与稠密、稀疏、混合检索、智能向量检索做完整对照实验。
核心贡献
- 对政府财政长表格文档做结构化量化分析,首次量化数值与单位表头行间距离、分块信息丢失比例;
- 实现表格感知最优稠密检索基线,证明分块调优仅能解决单位缺失问题,无法消除财年表头丢失固有缺陷;
- 提出Read MCP无嵌入检索服务,提供完整可审计迭代检索流程,全部代码开源;
- 标准化三重独立评测指标(精确数值匹配、LLM人工打分、证据可溯源校验),设计成对统计检验方案;
- 完备对照实验:控制变量证明性能优势来自检索接口,而非多轮迭代能力;区分嵌入检索/词法检索两类体系的性能差异。
2 相关工作
2.1 RAG系统完整组件
稠密段落检索DPR奠定双编码器嵌入检索路线,后续ColBERT晚交互、稀疏SPLADE、重排算法持续优化,但均依赖离线固定分块。BEIR基准证明BM25词法检索零样本性能远超轻量稠密模型。现有RAG系统高度依赖分块尺寸、嵌入版本,线上服务向量模型迭代会造成检索效果静默漂移;Self-RAG引入检索自省,但底层仍使用固定向量索引。长文本上下文「中间遗忘」缺陷进一步放大Top-K检索短板。
2.2 长结构化文档检索
表格类文档专用方案如SpreadsheetLLM、FRTR需构建多层表格嵌入,定制化索引成本极高;超长全文上下文方案无需检索,但token成本极高且存在位置衰减。本文反向思路:不预分割文档,让智能体按需定位、读取任意文本区间,避免离线分块固有缺陷。
2.3 智能体检索与工具调用
ReAct、多跳检索等方案将检索融入推理循环,但底层仍依赖向量检索工具;SWE-Agent、Agentless证明基础文本查找工具可媲美复杂智能框架;Model Context Protocol(MCP)标准化工具调用接口,Read是面向单份长文档专用MCP检索服务,区别于代码仓库工具链。
2.4 直接文档交互vs稠密检索
Grep类原生文本检索相关工作证明原始词法检索在对话日志、代码库场景优于向量检索,但现有研究针对多文件检索;本文聚焦单份超长表格PDF,解决PDF转换单元格拆分、数字千分位失真独有问题,同时新增可审计性、结构化表头导航设计。
3 两类检索接口形式化定义
设文档D=(ℓ1,ℓ2...ℓL)D=(\ell_1,\ell_2...\ell_L)D=(ℓ1,ℓ2...ℓL)有序行序列,KaTeX parse error: Can't use function '\(' in math mode at position 1: \̲(̲S(D)\)为文档结构映射,u(ℓ)u(\ell)u(ℓ)为每行数值单位映射函数。
3.1 接口A:嵌入介导Top-K检索
离线阶段预分割文档为固定文本块cjc_jcj,嵌入模型EEE生成向量vj\mathbf{v}_jvj;查询时计算查询向量与块向量余弦相似度,返回前K个块:
Rk(q)=argtop-kjE(q)⋅vj∥E(q)∥∥vj∥R_{k}(q)=\operatorname{argtop-k}_{j}\frac{E(q)\cdot \mathbf{v}_{j}}{\lVert E(q)\rVert\lVert\mathbf{v}_{j}\rVert}Rk(q)=argtop-kj∥E(q)∥∥vj∥E(q)⋅vj
三大固有缺陷:
- 有损压缩:文本信息压缩至低维向量,细微数值、表头差异丢失;
- 固定预算无论需要几行文本,强制返回K块;
- 黑盒不可解释仅提供相似度分数,无法溯源文本未召回原因;
结构化文档特有缺陷:分块预先划定边界,无法保证数值行携带上方单位/财年表头。
3.2 接口B:可解释智能体Read操作集
Read不构建任何向量索引,直接操作原始Markdown文档,暴露四大MCP只读工具:
memory_grep(p):标准化词法匹配,返回匹配行号、原文、页面位置;memory_outline():输出全文标题层级、每行起止页码;memory_list():目录文件枚举(多文档场景);memory_read(start,end):读取指定起止连续文本行,单次读取上限400行。
智能体循环组合工具:先检索关键词、查看文档大纲、按需读取对应区间;每一步操作可完整记录,形成可回放检索轨迹。
核心优势:读取区间在查询后动态确定,可向上扩展读取表头行,离线分块无法实现该逻辑。
3.3 确定性与可审计性
Read所有工具输入输出为纯文本确定性映射,同一文档同一参数永远返回相同结果;每条答案可追溯检索轨迹内全部原文行,可机械校验答案数字是否存在读取文本中。
Top-K系统仅能证明答案存在召回块,无法证明关键证据为何未被检索,审计存在盲区。
4 实验载体量化分析
4.1 测试文档基础
测试文档:《古吉拉特2024-25财政账目第一卷》官方审计PDF,780页,3.97MB,转换后Markdown共19198非空行。
转换工具筛选对比pymupdf4llm/cloudconvert/markitdown/docling,仅pymupdf4llm可保留表格行列对应关系。
4.2 文档核心量化特征
| 指标 | 数值 |
|---|---|
| 有效非空文本行 | 19198 |
| 表格行占比 | 86.8% |
| 总数字token | 58791 |
| 独立不同数值 | 15960 |
| 数值重复倍率 | 3.68倍 |
| 单位表头中位数距离数值行 | 13行,90分位26行 |
| 文档海量近似数字,向量检索极易混淆;数值单位定义普遍在十几行上方,固定分块极易割裂数字与释义。 |
4.3 分块机制信息丢失量化
设计表格感知智能分块器:分块时自动向上回溯最多200行,携带单位、财年表头。测试800~4000字符多档分块尺寸:
- 普通固定分块:800字符时67.4%数值块无单位;
- 表格感知分块:同尺寸仅0.3%无单位;
- 固有缺陷:无论分块多大,27%~30%数值块无法匹配财年表头,该比例不随尺寸变化。
本质原因:财年表头跨多页表格,离线分块无法预判查询需要的财年上下文。
5 Read框架实现细节
5.1 MCP四大工具完整逻辑
全部工具沙盒锁定文档根目录,禁止跨文件读取,单次读取行数做硬上限防止上下文溢出,无嵌入模型、无训练参数,仅基于原始文本操作。
5.2 标准化匹配解决PDF转换失真
PDF转表格会产生三大失真:千分位逗号、单元格分割单词、小数点拆分至下一行。Read对每行构建双重标准化镜像:
- 清除表格竖线、加粗标记;
- 删除数字千分分隔符;
检索同时匹配原始文本、标准化文本,解决数字反向查询失效问题; ablation实验证明标准化匹配直接提升10%+问答准确率。
5.3 PDF转换性能天花板
PDF转换存在固有信息损耗:数字、小数点拆分至不同单元格,任何检索系统都无法复原原始数值,该问题与检索架构无关,因此实验单独划分「转换受限题目」,不计入检索性能对比。全文档共483处转换缺陷,仅0.09%数值行存在百倍量级数字失真。
6 评测实验方案
6.1 全部对比系统
- Read:完整四工具智能检索;
- Read-lit:消融,关闭标准化匹配;
- Read-out:消融,移除大纲导航工具;
- Dense:表格感知分块+BGE稠密Top-K;
- BM25:稀疏词法检索基线;
- Hybrid:稠密+BM25互反融合+重排;
- AgenticVec:同智能循环,底层替换为向量检索工具;
- LongCtx:全文一次性塞入上下文;
- Oracle:完美分块黄金基准。
AgenticVec为核心对照:控制智能循环完全一致,仅更换检索接口,分离迭代收益与检索接口收益。
6.2 基准数据集构成
共51道人工核验财务问答,六类题型:
- 单数值查找(24题);
- 多行聚合计算(5题);
- 跨表算术差值(9题);
- 文档结构导航(6题);
- 转换受限题目(2题,PDF失真无解);
- 无答案虚假前提(5题)。
标准答案全部机械校验:算术题答案原文不存在,仅可通过多行数字计算得到;每道题标注证据原文行号。
6.3 三重独立评测指标
- 精确数值准确率:标准化数字相对误差0.5%内判定正确;
- LLM结构化打分:固定评审模型统一输出评判;
- 证据可溯源校验:答案所有数字必须出现在读取文本,机械判定是否幻觉;
额外指标:幻觉率、单题token消耗、调用成本、平均时延;统计采用麦克内马尔成对检验、Holm多重校正。
7 预实验观测
预实验采用目标算术题测试:稠密Top-K单次召回无法同时获取两个相隔47行数值,直接放弃作答;Read通过多轮grep+read读取两段区间正确计算差值。代价:Read输入token量是稠密6~8倍,算力成本显著更高。同时发现代码解析漏洞会错误归因文档段落,证明仅靠准确率无法发现底层轨迹缺陷,必须完整检索轨迹审计。
8 完整实验结果
8.1 主实验整体准确率
| 系统 | 准确率 | 95%置信区间 | 证据可溯源占比 | 无答案幻觉率 | 单题成本美元 |
|---|---|---|---|---|---|
| Read | 58.8% | [45.2,71.2] | 58.0% | 40% | 0.058 |
| Read-lit | 66.7% | [53.0,78.0] | 60.4% | 0% | 0.043 |
| Read-out | 66.7% | [53.0,78.0] | 66.7% | 40% | 0.040 |
| BM25 | 51.0% | [37.7,64.1] | 67.3% | 40% | 0.020 |
| Hybrid | 29.4% | [18.7,43.0] | 72.0% | 60% | 0.022 |
| AgenticVec | 27.5% | [17.1,40.9] | 42.6% | 0% | 0.050 |
| Dense(最优35.3%) | 15.7% | [8.2,28.0] | 47.9% | 80% | 0.023 |
| 成对对比:Read相对最优稠密检索提升23.5个百分点,pHolm=0.017p_{\text{Holm}}=0.017pHolm=0.017;AgenticVec仅27.5%,证明多轮迭代无法弥补向量检索固有缺陷。 |
8.2 无显著结论对比
Read与BM25差值仅7.8个百分点,置信区间跨0,无统计学显著差异;说明本文结论区分嵌入检索vs词法检索,而非智能检索一定优于所有传统检索。
Read两组消融版本略高于原版,但无显著差异,文档表格拆分严重时大纲、标准化工具增益不明显。
8.3 性能差距来源拆解
按题型拆分准确率,核心差距集中在单数值查找类题目(稠密仅12.5%,Read70.8%),该类题目海量近似数值向量高度重叠,稠密检索极易匹配错误数字;结构导航类各系统性能接近。
故障统计:稠密检索13道题目完全未召回关键证据,Read仅4道;稠密因缺失证据大量直接放弃作答。
8.4 无答案任务表现
稠密检索80%编造答案,幻觉风险极高;AgenticVec、Read-lit完全拒绝作答,但前者大量可答题目也放弃,属于保守过度。
8.5 成本时延
Read单题成本、时延约稠密2.5倍,优势为审计可追溯、高风险财务场景准确率大幅提升;低成本大批量场景BM25更具性价比。
9 研究局限性
- 仅单份印度政府财政表格文档,结论不一定通用通用网页、小说、多文件知识库;
- 评测基准仅51道题目,样本量小,7~8个百分点差异无法区分显著性;
- 基准由作者构建,存在数据集偏向Read框架风险,仅机械标准答案降低偏差;
- Read证据可溯源指标低于BM25,多轮读取更容易引入无关数字;
- 仅适配单份超长结构化文档,多文件跨库检索场景稠密检索仍具备优势;
- PDF转换工具单一,转换失真天花板仅适用于pymupdf4llm;
7 Read算力开销更高,大批量低成本业务不适用。
10 结论
针对表格占比极高的长财务文档,传统「离线分块+稠密Top-K」RAG存在结构性缺陷:数值单位、财年表头与数字行间距离较远,任何固定分块策略都无法完全规避信息割裂。本文构建Read无嵌入智能体检索MCP服务,允许模型查询后动态选取文档读取区间,完整检索轨迹可审计复现。
51道标准化财务问答评测中,Read 58.8%准确率显著优于调优至最优的稠密检索35.3%;控制智能循环变量的AgenticVec仅27.5%,证明性能优势来源于检索接口本身,而非多轮迭代能力。
稀疏BM25与Read无显著性能差距,本文核心区分嵌入类检索、纯词法检索两条技术路线优劣,而非智能检索优于全部传统方案。
在金融、审计等高可信要求场景,可解释、可溯源的迭代文档读取方案可大幅降低数值幻觉与证据缺失风险;大批量低成本场景,稀疏词法检索仍是更均衡选择。
附录A PDF转换器对比
测试四款PDF转Markdown工具,从表格行列完整性、数字拆分失真维度评测,仅pymupdf4llm满足实验需求,cloudconvert、markitdown会割裂表格数字与标签,docling内存溢出无法完整解析780页文档。
附录B Read完整工具实现(Python MCP服务核心代码)
frommcp.serverimportServerimportre,os# 初始化MCP服务server=Server("read-doc-agent")DOC_ROOT="./finance_doc.md"# 全局双重标准化处理函数defnormalize_line(raw:str)->tuple[str,str]:# 版本1:清除表格标记、加粗base=re.sub(r"[|*_]"," ",raw)base=re.sub(r"\s+"," ",base).strip()# 版本2:删除数字千分位逗号squash=re.sub(r",","",base)returnbase,squash@server.tool()defmemory_grep(query:str,context_lines:int=2):"""标准化全文行检索,返回匹配行号与原文"""res=[]withopen(DOC_ROOT,"r",encoding="utf-8")asf:lines=f.readlines()foridx,lineinenumerate(lines,start=1):b,s=normalize_line(line)q_base,q_squash=normalize_line(query)ifq_baseinborq_squashins:res.append({"line_no":idx,"text":line.strip()})returnres@server.tool()defmemory_read(start:int,end:int):"""读取指定连续行,限制单次最大400行"""ifend-start>400:return"Error: single read limit 400 lines"withopen(DOC_ROOT,"r",encoding="utf-8")asf:lines=f.readlines()returnlines[start-1:end]@server.tool()defmemory_outline():"""提取所有#标题行与对应行号"""outline=[]withopen(DOC_ROOT,"r",encoding="utf-8")asf:lines=f.readlines()foridx,lineinenumerate(lines,start=1):ifline.lstrip().startswith("#"):outline.append({"line":idx,"title":line.strip()})returnoutline附录C 基准数据集标注规范
- 算术类题目:答案不得在原文直接出现,校验全文无匹配数字;
- 单数值题目:校验该行表头单位、财年与查询一致;
- 转换受限题目:PDF单元格拆分数字,任何检索系统无法修复,单独分类不计对比;
- 无答案题目:文档不存在对应统计口径,用于幻觉检测。
附录D 稠密检索参数消融扫描
遍历2000/4000字符分块、top-k=4/8/16组合,最优配置为2000字符+top-k=16,准确率35.3;分块尺寸提升对性能增益极小,增加召回数量是唯一优化手段,算力开销提升41%。
附录E 两类系统完整执行轨迹示例
E1 稠密Top-K轨迹(单次调用,放弃作答)
查询:2024-25财年财政赤字与财政盈余差值
调用dense_retrieve(k=8),仅召回盈余数值行,无赤字行
输出:文档未同时包含两个数值,无法计算,判定错误。
E2 Read完整8轮工具轨迹
- memory_grep(“Statement of Receipts and Disbursements”)
- memory_grep(“Fiscal Deficit”)
- memory_outline()
- memory_grep(“Fiscal Deficit”)
- memory_grep(“Revenue Surplus”)
- memory_grep(“STATEMENT No. 2”)
- memory_read(365,450)
- memory_read(1023,1120)
读取两行数值计算差值,答案正确,所有证据行可人工复核。
开源资源完整清单
- 论文PDF:https://arxiv.org/pdf/2608.06305
- Read MCP完整服务源码:项目GitHub仓库
- PDF转换脚本:
converter/pymupdf_convert.py - 评测自动化调度代码:
eval/run_bench.py - 51道财务基准数据集:
benchmark/questions.json - 稠密检索消融扫描配置:
sweep_configs.yaml - MCP协议完整规范文档:
mcp_spec.md - 实验轨迹回放、指标统计绘图脚本:
analysis/