码上拾光

企业知识库的「可溯源」,到底要溯到哪一层

· #架构#RAG#AI应用

今年上半年参与了一个企业级知识库平台,我负责文档解析和入库这条链路。客户提的要求里有一条叫”可溯源”,一开始我以为是给答案标个来源文件,后来发现远不止。

客户要的溯源

客户是做工程的,知识库里是规范、图纸说明、历史项目资料。他们问一个问题,模型答了,他们要能:

  1. 看到答案引用了哪份文件——这是最基本的。
  2. 点开直接跳到那一页——不是打开文件从头翻。
  3. 页面上高亮到那一段甚至那个表格——因为他们要核对模型有没有改数字。

第三条才是真正的”可溯源”。答案里说”允许偏差 0.05”,他们要一眼看到原文表格里那个格子。

三级映射

解析入库的时候,每个切片带三层位置信息:

向量(检索命中的单位)
  └── 结构化区块 ID(标题 / 段落 / 表格 / 图片,带层级)
        └── 原文位置(文件、页码、页面内 bbox 坐标)

表格和图片单独处理:表格区块保留单元格结构,图片区块存缩略图引用。命中表格时,前端能高亮到行。

切片和溯源的矛盾

切片粒度小,检索准,但一个切片可能跨两个区块,溯源就糊了。切片粒度大,溯源清楚,检索变粗。

最后的做法:切片可以跨区块,但每个切片记录它覆盖的所有区块 ID。 命中后高亮所有覆盖的区块。多高亮一点比高亮不到强。

多格式

平台要吃的格式很杂:Word、PPT、Excel、PDF、网页、Markdown、图片、音视频。二十多种。每种格式的”位置”含义不一样——PDF 有页和坐标,Word 没有固定页,音频只有时间戳。

统一成一个抽象:location = { file, page?, bbox?, timestamp?, cell? },按格式填能填的字段。前端按字段决定怎么高亮。不追求所有格式都能高亮到坐标,但所有格式都能定位到”哪个文件的哪一块”。

入库链路

上传 ──► 对象存储
      ──► 解析(按格式分发;PDF 走版面模型,扫描件走 OCR)
      ──► 切片(记录三级位置)
      ──► 状态写缓存 / 原始切片写文档库 / 向量写向量库 / 实体关系写图库

解析和向量化是异步任务,按”高优先级 / 需要 GPU / 图谱构建”分三个队列,GPU 队列并发压低避免显存打满。

我学到的

“可溯源”不是一个功能,是一条从解析到前端的约束:每一步都不能丢位置信息。 只要中间有一步把位置丢了,后面再想找回来就是重做。这个约束在设计入库链路的第一天就要定下来。


← 回到文章列表