← 返回题目列表

RAG 如何处理表格数据?

中等 第 23 / 29 题 更新于 2026/09/18
RAG表格检索Text-to-SQL文档理解

简化版

表格不能简单按行转纯文本,因为列头、合并单元格、单位和行列关系决定数值含义。结构化数据库优先用 Text-to-SQL/受控查询;文档表格则解析成带表名、表头、层级、行键、单位和页码的结构,按行组或子表建立索引,召回后携带必要表头,并用确定性计算器完成聚合与校验。

详细版

先识别表格类型:数据库表走 schema linking 和只读 SQL;PDF/图片表格做 OCR、单元格检测、row/column span 恢复。索引可同时存表级摘要、列级 schema、行级序列化和原图区域,多粒度召回:问题先找表与列,再筛相关行,避免把十万行全塞进上下文。

序列化必须保留列名与单位,例如 年份=2025 | 地区=华东 | 销售额_万元=120,不能只存 2025 华东 120。求和、排序、同比等交给 SQL/Python/计算器,LLM 规划并解释。评测拆成表召回、列/行命中、执行准确、答案与引用,加入合并表头、跨页、空值和 OCR 错误切片。

问题 -> 表/Schema召回 -> 列链接 -> 行过滤 -> 结构化执行 -> 结果+单元格/页码引用 -> LLM解释

完整版教学

一、表格语义来自二维结构

同一个“120”只有结合行键、列头和单位才知道是 2025 年华东销售额 120 万元。把 PDF OCR 文本按阅读顺序拼接,会让表头与数值脱离,模型可能把相邻列串错。表格处理第一目标是恢复结构,不是尽快生成 embedding。

多级表头和合并单元格尤其危险。上层“收入”可能横跨“国内/海外”两列,每个数据单元格需要继承完整 header path。跨页表还要识别重复表头与续表关系。

二、结构化与文档表格走不同路线

数据库已有类型、主键和约束,适合生成受限 SQL 并由数据库精确执行。PDF/HTML 表格需要先抽取网格和版面,再建立可搜索表示。把数据库百万行全部文本化做向量索引,既昂贵又无法可靠聚合。

来源推荐主路径补充能力
SQL 数据库schema linking + SQL文档解释/术语检索
HTML 表格DOM 解析标题与周边文本
数字 PDF网格/坐标解析原页引用
扫描表格OCR + 结构恢复VLM 复核低置信格
超宽/跨页表子表与层级表头邻接/父表回填

记忆钩子:数据库让引擎“算”,文档表格先让系统“认清行列”;LLM 最适合规划和解释,不适合心算大表。

三、多粒度索引怎样设计

表级文档存标题、说明、列名和时间范围,用于先找对表;列级表示帮助把“营收”链接到 revenue_cny;行级或行组表示用于筛具体实体。每层保留 table_id 和 cell 坐标,召回后能回到原结构。

table summary: 2024-2026各区域季度销售,单位万元
row record: table=T7; year=2025; region=华东; Q1=120; Q2=135
cell ref: T7[row=华东, col=2025/Q1] -> page 12 bbox(...)

行组不能过大导致主题稀释,也不能单格无上下文。常以主键行加完整相关表头为最小证据。

四、序列化如何避免歧义

自然语言序列化便于 embedding,但要显式重复列名、层级路径、单位和空值。null、0、破折号和“不适用”不能统一变空白。日期和千分位规范化时保留原文本,以便引用和核对。

对于 50 列宽表,只注入问题相关列及主键,但保留表级元数据。裁列由 schema linking 决定,并记录被裁列;用户问“同比”时必须保留两个时期,不能只取当前值。

五、Text-to-SQL 如何保证安全

给模型只读 schema 视图和允许表列,生成 AST/SQL 后解析检查只含 SELECT、限制行数与执行时间,并使用只读账户。租户和权限条件由后端强制注入,不能让模型决定是否添加。先 EXPLAIN 或在副本执行,防全表扫描。

SELECT SUM(amount_cny)
FROM sales_authorized_view
WHERE region = :region AND year = :year
LIMIT 1000;

参数化值防注入,授权视图防模型访问未列出的行。执行结果附 SQL 哈希、表版本和行数,便于审计。

六、计算为什么交给工具

求和、平均、排序、同比和 join 是确定性任务。LLM 对几十个数字心算容易漏项,应生成计划或公式,由数据库/计算器执行,再解释结果。工具返回数值、单位和数据来源,模型不得修改小数精度。

例如 2024 为 80,2025 为 100,同比增长应由工具算 (100-80)/80=25%。若分母为 0,工具返回特定错误状态,而不是让模型生成“无限增长”等未经业务定义的结论。

七、OCR 与引用怎样闭环

扫描表中小数点、负号和合并线容易误识别。每个 cell 保存 OCR 置信度与原图 bbox;关键金额低置信时放大 crop 用第二模型复核。行列总计可作为规则校验,例如分项和应接近合计。

答案引用应定位表名、页码、行键和列头,UI 高亮对应单元格。仅引用整份 100 页 PDF 无法核验。表格版本更新后绑定内容 hash,防旧答案跳到新数字。

八、常见误区与追问

  • 误区:把 CSV 每行做 embedding 就解决表格 RAG。 缺表级检索、列语义、单位和聚合执行。
  • 误区:LLM 可以直接对召回数字做可靠求和。 大量计算应交给 SQL/计算器并校验。
  • 误区:OCR 字符正确就代表表格正确。 行列归属和合并表头错位仍会改变含义。
  • 追问:大表如何控制上下文? 先表/列召回,再结构化过滤行,最后只注入结果和必要证据。
  • 追问:如何处理跨页表? 根据表题、列宽和重复表头关联续表,统一 table_id 并保留页码。
  • 追问:Text-to-SQL 如何防越权? 只读授权视图、SQL AST allowlist、强制租户谓词和资源限制。

九、加强记忆

表格 RAG 可记成“先认表、再找列、后筛行、工具算、单元格引用”。数据库走受控 SQL,文档表格恢复网格与层级表头;多粒度索引避免把整表塞给模型,确定性引擎负责聚合,答案回指具体页和 cell。保住行列、单位和版本,数字才真正有意义。