结构化数据怎么接进 RAG?什么时候检索,什么时候直接查库?
面试怎么回答
结构化数据不适合直接转成文本做向量检索,因为数字要精确、需要聚合计算、数据量大且每天变化、维度组合无穷,向量检索返回的只是相似片段。数值类问题应该让模型通过工具去查,优先调用指标查询接口由语义层保证口径,其次是 Text2SQL 加护栏;文档类问题走 RAG。结构化数据里适合检索的是元数据和指标定义、维度值、少量稳定的参考数据,用来帮模型找到正确的表和指标、把用户的说法匹配到标准维度值。典型流程是判断问题类型、检索元数据、匹配维度值、查询、必要时检索口径文档、生成回答且数字必须来自查询结果。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
用户问:「上个月华东区的退款率是多少?」有的团队把报表数据导出成文本,切块、向量化、放进 RAG。结果模型经常答错数字。面试官问这题,想看你是否清楚:结构化数据和非结构化文档,应该用不同的方式交给大模型。
为什么结构化数据不适合直接做向量检索
- 精确性:数字需要精确匹配和计算,向量检索返回的是「语义相似」的片段,可能是相邻月份、相邻区域的数据;
- 聚合计算:「退款率」需要用退款额除以销售额,跨行聚合,向量检索做不到;
- 数据量和时效:明细数据量大、每天变化,转成文本再向量化既不现实也不及时;
- 组合无穷:维度组合太多,不可能预先把每种组合都生成文本。
正确的方式:让模型去查
- 数值类问题:通过工具调用查询数据库或指标服务。最稳的方式是调用指标查询接口(指标名 + 维度 + 时间),口径由语义层保证;其次是 Text2SQL,由模型生成 SQL 再执行,但需要更多护栏;
- 文档类问题:「退款政策是什么」「退款率的口径怎么定义」,走 RAG 检索文档。
结构化数据在 RAG 里的正确用法
结构化信息里有一部分是适合检索的:
- 元数据:表和字段的描述、指标定义、口径说明,向量化后用于帮模型找到该用哪张表、哪个指标;
- 维度值:商品名、门店名、项目名这类实体,用于把用户的说法匹配到标准的维度值(「华东」→ 区域编码);
- 少量稳定的参考数据:比如产品参数表,数据量小、变化少,可以直接作为文档。
组合的流程
一个智能问数助手的典型流程:
- 判断问题类型:要数值还是要解释;
- 检索元数据和指标定义,确定用哪个指标、哪些维度;
- 检索维度值,匹配用户说的实体;
- 调用指标服务或生成 SQL 查询;
- 如果需要,再检索相关文档解释口径;
- 生成回答,数字必须来自查询结果。