RAG 文档入库设计:切分、版本与增量更新 @ Lin | 2026-04-01T10:00:00+08:00 | 3 分钟阅读 | 更新于 2026-09-12T10:00:00+08:00

从来源版本到索引发布,设计能够更新、删除和回滚的知识入库流水线。

本文于 2026-09-12 补充整理,按 2026-04 专题归档。示例为方案设计,参数用于说明方法,不代表已上线项目或实测成果。

入库是一条发布流水线

知识库最容易被低估的部分是更新。文档第一次进入向量库后,标题可能更名、权限可能收紧、正文可能删除。如果只支持“新增文本并向量化”,半年后就会出现旧规范持续被引用的问题。

这里设计一个支持重建的入库模型:来源文件保留原始版本;解析结果保留结构;切片属于一个确定的文档版本;索引通过发布指针切换。模型只检索已发布版本,不直接读取正在构建的数据。

标识必须能追溯来源

document:
  tenant_id, document_id, source_uri, source_version
  content_hash, acl_version, deleted_at

chunk:
  document_id, source_version, chunk_id
  heading_path, source_locator, text_hash
  parser_version, splitter_version, embedding_model

index_release:
  release_id, status, manifest_hash, activated_at

这些字段是逻辑设计,实际可拆表。document_id 标识同一来源对象,不能仅依赖文件名;source_locator 可以是页码或段落路径,用于展示引用。内容哈希用于判断变化,但不能代替权限版本。

同一正文换了 ACL,即使无需重新计算向量,也必须更新检索可见性并使相关缓存失效。

切分先保留结构

部署规范通常包含标题、步骤、代码块和表格。固定字符数切分可能把“仅适用于测试环境”留在上一片,把危险命令留在下一片。可以先按标题和段落分块,再对过长块进行 token 预算切分,并附带标题路径。

例如先比较约 300 token 和 600 token 的两组切片,搭配有限重叠;这些只是实验起点。分词器、文档类型和模型不同,不能把一个数字写成通用最佳值。

表格需要重复列名,代码块需要保留语言与上下文。对于扫描 PDF,解析失败应该进入隔离队列,不能以“空字符串成功入库”掩盖异常。

增量更新如何避免半成品

建议让流水线经过 DISCOVERED → PARSED → EMBEDDED → VALIDATED → ACTIVE。同一来源版本的重复任务通过唯一键或任务账本去重。新版本完成抽样检查后,再原子切换发布指针。

如果第 80 个切片向量化失败,旧版本继续服务,新版本保持未发布。不要先删除旧切片再开始远程调用,否则依赖故障会直接造成知识缺口。

大知识库不一定每次复制全部索引。可用发布清单记录各文档的有效版本;实现复杂度增加时,需要验证检索引擎能否高效应用这个版本选择条件。

删除要贯穿所有副本

收到删除通知后,优先撤销在线可见性,再异步清理切片、向量和缓存。旧发布版本回滚时也必须应用当前删除和权限规则,不能恢复已经撤销的数据。

原始文件、解析缓存、对象存储和备份保留策略需要一起考虑。不能因为向量库删除成功,就宣称原文已经从所有系统移除。

一次可验证的更新实验

准备一份包含环境限定和表格的规范,发布 v1;修改一个段落生成 v2;在向量化阶段注入失败。应仍然检索到完整 v1,而不是混合答案。重试成功后,引用必须指向 v2 的正确段落。

随后撤销用户权限,重复之前的查询。验收要求缓存和引用都不再返回该文档。整个实验要记录解析器、切分规则、向量模型和发布清单,确保下一次可以重建相同输入。

关于向量存储的基础能力,可查阅 pgvector 官方仓库。本篇的版本发布和删除流程属于应用层设计,并非向量扩展自动提供的功能。


查看系列导读与阅读路线

© 2019 - 2026 Lin 的博客

Powered by Hugo with theme Dream.

avatar
关于我

Lin 的 ❤️ 博客

技术专题:Java Agent 工程化:从知识库问答到可靠业务执行。围绕 RAG、工具治理、任务恢复与 Java 平台架构整理设计思路和验证方法。

记录一些 🌈 生活上,技术上的事

  • 🛠️ 技术阵地: 深耕 Java 开发 ,目前向 AI 应用领域探索与拓展。这里主要记录我从后端架构到 AI 赋能的进阶之路、技术思考以及日常的 debug 血泪史。始终致力于写出优雅且没有 bug 的代码(尽量)。
  • 🌈 生活侧写: 偶尔脱下极客的外衣,我也会在这里分享生活中的灵光一现。不管是好用的效率工具,还是周末的一场骑行,都是构成我真实生活的一部分。