超越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片段拼接进提示词。十年来分块策略、嵌入模型、重排算法持续迭代,但底层范式从未改变:检索基于离线固定分块,模型无法干预、校验检索逻辑,只能被动接收不可解释的相似文本。

该范式在财报、审计、法定报表类文档存在结构性失效。此类文档三大核心特征:

  1. 内容以表格为主,占比超85%;
  2. 海量近似数值,嵌入空间大量数值向量高度重叠;
  3. 数值单位、财年定义存储在上方远处表头,分块极易割裂数值与释义。
    典型示例:查询2024-25财年财政赤字与财政盈余差值,两个数值相隔47行,任意固定2000字符Top-K分块都无法同时召回两行,稠密检索直接返回缺失单条片段,模型无法计算差值;更危险场景:召回数值缺失单位表头,lakh(十万)与crore(千万)相差百倍,模型输出完全失真且无任何提示。
    本文三步完成论证:
  4. 量化结构化文档的数值、表头距离特征,测算分块造成的信息丢失比例;
  5. 构建表格感知强化分块器作为最优稠密基线,消除分块优化带来的变量干扰;
  6. 设计Read无嵌入智能体检索框架,与稠密、稀疏、混合检索、智能向量检索做完整对照实验。

核心贡献

  1. 对政府财政长表格文档做结构化量化分析,首次量化数值与单位表头行间距离、分块信息丢失比例;
  2. 实现表格感知最优稠密检索基线,证明分块调优仅能解决单位缺失问题,无法消除财年表头丢失固有缺陷;
  3. 提出Read MCP无嵌入检索服务,提供完整可审计迭代检索流程,全部代码开源;
  4. 标准化三重独立评测指标(精确数值匹配、LLM人工打分、证据可溯源校验),设计成对统计检验方案;
  5. 完备对照实验:控制变量证明性能优势来自检索接口,而非多轮迭代能力;区分嵌入检索/词法检索两类体系的性能差异。

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-k⁡jE(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

三大固有缺陷:

  1. 有损压缩:文本信息压缩至低维向量,细微数值、表头差异丢失;
  2. 固定预算无论需要几行文本,强制返回K块;
  3. 黑盒不可解释 仅提供相似度分数,无法溯源文本未召回原因;
    结构化文档特有缺陷:分块预先划定边界,无法保证数值行携带上方单位/财年表头。

3.2 接口B:可解释智能体Read操作集

Read不构建任何向量索引,直接操作原始Markdown文档,暴露四大MCP只读工具:

  1. memory_grep(p):标准化词法匹配,返回匹配行号、原文、页面位置;
  2. memory_outline():输出全文标题层级、每行起止页码;
  3. memory_list():目录文件枚举(多文档场景);
  4. 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字符多档分块尺寸:

  1. 普通固定分块:800字符时67.4%数值块无单位;
  2. 表格感知分块:同尺寸仅0.3%无单位;
  3. 固有缺陷:无论分块多大,27%~30%数值块无法匹配财年表头,该比例不随尺寸变化。
    本质原因:财年表头跨多页表格,离线分块无法预判查询需要的财年上下文。

5 Read框架实现细节

5.1 MCP四大工具完整逻辑

全部工具沙盒锁定文档根目录,禁止跨文件读取,单次读取行数做硬上限防止上下文溢出,无嵌入模型、无训练参数,仅基于原始文本操作。

5.2 标准化匹配解决PDF转换失真

PDF转表格会产生三大失真:千分位逗号、单元格分割单词、小数点拆分至下一行。Read对每行构建双重标准化镜像:

  1. 清除表格竖线、加粗标记;
  2. 删除数字千分分隔符;
    检索同时匹配原始文本、标准化文本,解决数字反向查询失效问题; ablation实验证明标准化匹配直接提升10%+问答准确率。

5.3 PDF转换性能天花板

PDF转换存在固有信息损耗:数字、小数点拆分至不同单元格,任何检索系统都无法复原原始数值,该问题与检索架构无关,因此实验单独划分「转换受限题目」,不计入检索性能对比。全文档共483处转换缺陷,仅0.09%数值行存在百倍量级数字失真。

6 评测实验方案

6.1 全部对比系统

  1. Read:完整四工具智能检索;
  2. Read-lit:消融,关闭标准化匹配;
  3. Read-out:消融,移除大纲导航工具;
  4. Dense:表格感知分块+BGE稠密Top-K;
  5. BM25:稀疏词法检索基线;
  6. Hybrid:稠密+BM25互反融合+重排;
  7. AgenticVec:同智能循环,底层替换为向量检索工具;
  8. LongCtx:全文一次性塞入上下文;
  9. Oracle:完美分块黄金基准。

AgenticVec为核心对照:控制智能循环完全一致,仅更换检索接口,分离迭代收益与检索接口收益。

6.2 基准数据集构成

共51道人工核验财务问答,六类题型:

  1. 单数值查找(24题);
  2. 多行聚合计算(5题);
  3. 跨表算术差值(9题);
  4. 文档结构导航(6题);
  5. 转换受限题目(2题,PDF失真无解);
  6. 无答案虚假前提(5题)。
    标准答案全部机械校验:算术题答案原文不存在,仅可通过多行数字计算得到;每道题标注证据原文行号。

6.3 三重独立评测指标

  1. 精确数值准确率:标准化数字相对误差0.5%内判定正确;
  2. LLM结构化打分:固定评审模型统一输出评判;
  3. 证据可溯源校验 :答案所有数字必须出现在读取文本,机械判定是否幻觉;
    额外指标:幻觉率、单题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 研究局限性

  1. 仅单份印度政府财政表格文档,结论不一定通用通用网页、小说、多文件知识库;
  2. 评测基准仅51道题目,样本量小,7~8个百分点差异无法区分显著性;
  3. 基准由作者构建,存在数据集偏向Read框架风险,仅机械标准答案降低偏差;
  4. Read证据可溯源指标低于BM25,多轮读取更容易引入无关数字;
  5. 仅适配单份超长结构化文档,多文件跨库检索场景稠密检索仍具备优势;
  6. 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服务核心代码)

python 复制代码
from mcp.server import Server
import re, os

# 初始化MCP服务
server = Server("read-doc-agent")
DOC_ROOT = "./finance_doc.md"

# 全局双重标准化处理函数
def normalize_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)
    return base, squash

@server.tool()
def memory_grep(query: str, context_lines: int = 2):
    """标准化全文行检索,返回匹配行号与原文"""
    res = []
    with open(DOC_ROOT, "r", encoding="utf-8") as f:
        lines = f.readlines()
        for idx, line in enumerate(lines, start=1):
            b, s = normalize_line(line)
            q_base, q_squash = normalize_line(query)
            if q_base in b or q_squash in s:
                res.append({"line_no": idx, "text": line.strip()})
    return res

@server.tool()
def memory_read(start: int, end: int):
    """读取指定连续行,限制单次最大400行"""
    if end - start > 400:
        return "Error: single read limit 400 lines"
    with open(DOC_ROOT, "r", encoding="utf-8") as f:
        lines = f.readlines()
    return lines[start-1:end]

@server.tool()
def memory_outline():
    """提取所有#标题行与对应行号"""
    outline = []
    with open(DOC_ROOT, "r", encoding="utf-8") as f:
        lines = f.readlines()
        for idx, line in enumerate(lines, start=1):
            if line.lstrip().startswith("#"):
                outline.append({"line": idx, "title": line.strip()})
    return outline

附录C 基准数据集标注规范

  1. 算术类题目:答案不得在原文直接出现,校验全文无匹配数字;
  2. 单数值题目:校验该行表头单位、财年与查询一致;
  3. 转换受限题目:PDF单元格拆分数字,任何检索系统无法修复,单独分类不计对比;
  4. 无答案题目:文档不存在对应统计口径,用于幻觉检测。

附录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轮工具轨迹

  1. memory_grep("Statement of Receipts and Disbursements")
  2. memory_grep("Fiscal Deficit")
  3. memory_outline()
  4. memory_grep("Fiscal Deficit")
  5. memory_grep("Revenue Surplus")
  6. memory_grep("STATEMENT No. 2")
  7. memory_read(365,450)
  8. memory_read(1023,1120)
    读取两行数值计算差值,答案正确,所有证据行可人工复核。

开源资源完整清单

  1. 论文PDF:https://arxiv.org/pdf/2608.06305
  2. Read MCP完整服务源码:项目GitHub仓库
  3. PDF转换脚本:converter/pymupdf_convert.py
  4. 评测自动化调度代码:eval/run_bench.py
  5. 51道财务基准数据集:benchmark/questions.json
  6. 稠密检索消融扫描配置:sweep_configs.yaml
  7. MCP协议完整规范文档:mcp_spec.md
  8. 实验轨迹回放、指标统计绘图脚本:analysis/
相关推荐
东离与糖宝3 小时前
语音Agent全双工误区:WebRTC双向不等于真全双工
人工智能
BIGmustang3 小时前
千帆模型微调及部署
人工智能
神奇霸王龙3 小时前
CC Switch 配置 Claude Desktop+ selltoken 中转 API 实测教程(2026 年 8 月更新)
人工智能·ai·aigc·agent·ai编程·claude
朱涛的自习室3 小时前
从 Prompt 到 Graph:AI 工程的进化史
android·前端·人工智能
程序员cxuan3 小时前
Pi + DeepSeek-v4-Flash,这用着也太爽了。
人工智能·后端·程序员
stormzhangV3 小时前
2026 年 8 月,我的最新 AI 装机单
人工智能·openai·ai编程
暴躁的小鸟3 小时前
附近口碑好的斜视配镜训练的眼视光中心
人工智能·python·深度学习
deepseek234 小时前
OpenAI 首次为自家模型踩刹车:Astra「无法排除关键网络能力」,Preparedness Framework 第一次真的咬人
人工智能·网络安全·ai agent
Data_Journal4 小时前
如何使用 Java 和 Jsoup 解析 HTML
大数据·开发语言·数据库·python·scrapy