文档进入知识库后,重复导入、增量更新和存储膨胀会逐渐影响检索质量。本文围绕 LightRAG 的文档处理流程,说明文件指纹、状态记录、增量边界、VLM 处理和向量/图数据存储如何分工,并给出更新失败时可回滚的检查点。文中只讨论可复现的步骤,不把单次结果扩展成产品承诺;每个结论都标注前提、证据和无法覆盖的边界。读者可以先完成最小验证,再按自己的版本、权限和数据补充实验。

项目地址:HKUDS/LightRAG

很多知识库项目第一次演示都很顺。

上传一个 Markdown,问一个问题,模型回答得不错。到了第二周,真实文件进来了:PDF 有表格,DOCX 里有图片,手册换了版本,旧制度要删除,财务团队还要求把数据放到 PostgreSQL。

这时候问题就不再是“能不能检索”,而是:LightRAG 到底保存了哪些派生数据?改一个解析器会影响什么?删除文件会不会把其他文件里的实体关系一起删掉?换 Embedding 要不要全量重建?

这一篇只讲工程事实。

LightRAG 当前仓库已经提供 legacy、native、MinerU、Docling 多种解析路径,支持 Fix、Recursive、Vector、Paragraph 四类分块策略,也能对图片、表格和公式做 VLM 分析。它的增量更新能力很有价值,但并不等于任何配置都可以在运行中随意替换。

如果你的 LLM、Embedding 或 VLM 通过 上游 API 或企业 API 网关调用,还要把“每次上传一个文件会触发多少次模型请求”纳入预算。知识库的成本往往不是查询一次产生,而是建库、重处理和删除重建累积出来的。

一、文件进入 LightRAG 后发生了什么

一个文档从上传到可查询,大致要经过:

接收文件或文本
  -> 判断解析引擎和文件名 hint
  -> 提取正文、标题、表格、图片、公式等 sidecar
  -> 按分块策略切成 text chunks
  -> EXTRACT 模型抽取实体、关系和摘要
  -> 生成文本块、实体和关系的 Embedding
  -> 写入 KV、Vector、Graph、Doc Status 四类存储
  -> 标记 processed 并返回可查询状态

其中每一步都会产生不同的失败类型:

不要只看 WebUI 上的一句“处理失败”,生产系统要保存 track_id、文件名、解析引擎、处理状态、错误信息和重试次数。

二、解析引擎怎么选

当前文档处理管线支持四类引擎。

legacy,兼容旧行为

legacy 覆盖的文件扩展名比较广,适合先处理纯文本、Markdown、代码、CSV、JSON 和基础办公文件。升级新版本以后,如果没有调整 LIGHTRAG_PARSER,一些文件仍可能沿用旧解析行为。

它的优势是兼容面广,缺点是对复杂布局、文档结构和多模态内容的理解不如专门解析器。

native,本地结构化解析

native 是 LightRAG 内置的结构化提取器,不依赖 MinerU 或 Docling 外部服务。当前文档重点支持 DOCX、Markdown 和 Textpack。

它可以提取 DOCX 的标题、段落、表格、图片和公式,并把相应内容保存为 sidecar。Markdown 也能识别标题、表格、块级公式和嵌入图片。

native 适合不想额外部署解析服务、希望先在本地稳定跑通的团队。它不是“所有 PDF 都能完美还原”的通用解析器,文件格式和结构复杂时要看实际输出。

mineru,外部文档解析引擎

MinerU 适合 PDF、DOCX、PPTX、Excel、图片等包含复杂排版、表格、公式和图片的材料。LightRAG 可以连接官方服务,也可以使用本地部署的 MinerU。

云端 MinerU 会受到文件大小、页数和配额限制。企业内部资料通常更适合评估本地部署,同时确认 GPU、服务地址、任务队列和资源成本。

docling,另一条外部解析路径

Docling 也支持 PDF、DOCX、PPTX、XLSX、Markdown、HTML 和图片等格式。它同样需要先启动外部服务并配置 endpoint。

不要把 mineru 或 docling 写进 .env 就以为解析器已经可用。LightRAG 需要能够访问对应服务,首次接入先用小文件验证,确认原始文本、表格和图片 sidecar 都生成了。

三、用 LIGHTRAG_PARSER 路由文件

解析规则的基本形态是:

LIGHTRAG_PARSER=ext:engine-options,ext:engine,*:legacy-R

例如:

LIGHTRAG_PARSER=pdf:mineru-R;docx:native-iet;*:legacy-R

仓库当前建议用分号分隔规则,扩展名写在左边,通配规则通常放在最后。规则按从左到右匹配,因此优先级高的格式要放前面。

文件名可以临时覆盖规则

单个文件可以在文件名里指定解析器和处理选项:

paper.[mineru-R].pdf
proposal.[native-iet].docx
slides.[docling].pptx
notes.[-R].md

这里的方括号是 LightRAG 的文件名 hint,不是文件名装饰。[mineru-R] 表示使用 MinerU 和对应分块/处理选项,[-R] 表示只覆盖选项而保留默认引擎。

如果已有文件要从 legacy 改成 native,不能只改规则然后期待旧文档自动改变。当前文档明确说明,解析路由影响新上传文件;旧文件需要删除后重新上传,或使用项目提供的重处理路径,并确认最终处理引擎。

解析缓存的好处和陷阱

MinerU 和 Docling 的解析结果会在本地缓存。重复上传同一个文件,通常不会每次都重新调用外部解析服务,这可以节省时间和费用。

但如果你修改了 endpoint 或有效解析参数,缓存可能失效并触发重解析。删除文件时,如果希望连解析缓存一并清理,也要确认删除对话框里的“同时删除文件”选项。缓存不是永久真相,换引擎或参数后要核对文档状态。

四、四种分块策略不是四套风格

仓库当前版本引入了四个可选的文本分块策略。

F,Fix,固定分块

按照 token 大小和重叠长度切分,适合结构普通、希望行为稳定的文本。调整 chunk_token_size 和 chunk_overlap_token_size 会影响新处理的文档。

R,Recursive,递归分块

按分隔符递归寻找更自然的边界,适合长段落、教程和一般 Markdown。可以为 R 指定分块大小和重叠参数。

V,Vector,向量语义分块

按语义相似性判断分割点,适合段落主题变化明显的材料,但会增加 Embedding 相关开销,需要看数据量和延迟预算。

P,Paragraph,段落语义分块

利用段落、标题和文档结构组织分块,对论文、报告和有明显章节层级的文档更有价值。参考文献很多时,仓库还提供 drop_references 等配置,避免参考文献变成大量低价值实体关系。

分块策略必须和查询效果一起评估。块越大,不代表上下文越完整;块越小,也不代表召回更精准。至少要记录:命中的原文位置、引用是否完整、跨段落信息是否丢失、索引时间和 Token 消耗。

五、图片、表格和公式的多模态处理

当前仓库的多模态处理需要两个条件同时成立:

  1. 文档的 process_options 包含对应的 i、t 或 e 标志。
  2. VLM_PROCESS_ENABLE=true,并且配置了支持图片输入的 VLM。

示例配置:

LIGHTRAG_PARSER=*:native-iteP,*:legacy-R
VLM_PROCESS_ENABLE=true
VLM_LLM_MODEL=<your-vision-model>

这些选项分别对应图片、表格和公式分析。只打开 VLM_PROCESS_ENABLE,但文件路由没有带对应标志,VLM 不会凭空分析所有内容;反过来只有 i/t/e 而没有可用 VLM,也无法完成多模态分析。

为什么 VLM 不是默认全开

图片、表格和公式分析会增加模型调用、解析时间和文件处理失败面。所有 PDF 都开 VLM,很容易把一个只需要文字检索的任务变成昂贵的批处理。

更合理的方式是:

纯文本制度:不开 VLM
包含流程图的操作手册:开启图片分析
财务报表:开启表格分析,保留原表结构
学术论文:按需开启公式和图片分析

如果 VLM 通过 上游 API 或其他 API 网关调用,单独给 VLM 角色设 Key、模型白名单和预算。不要让普通 Markdown 上传也能消耗高价视觉模型。

六、新增文档和增量更新

LightRAG 的增量能力来自这样一个思路:新文档先生成自己的局部图和向量,再把实体、关系和文本块合并到现有工作区,而不是每次从零重建全局索引。

一个常见的更新流程是:

上传新版本手册
  -> 等待新文档 processed
  -> 用新旧版本分别查询关键问题
  -> 确认引用来自新文件
  -> 将旧版本标记失效或删除
  -> 再跑回归问题集

增量更新不等于新旧内容自动消歧。如果旧版和新版同时保留,查询可能把两个版本都召回。文档状态、版本号、来源日期和有效期最好作为业务元数据管理,而不是只依赖文件名。

删除文件会发生什么

删除一份文档不只是删一个 PDF。它可能影响:

当前实现提供按文档删除并重建受影响关系的流程,仓库说明也提到会利用建库阶段的 LLM 缓存加快重建。但这是一个破坏性操作,不能和任意上传任务无条件并发。Server 对清空、删除和扫描有流水线占用控制,业务层也应该让删除进入队列并记录审计。

七、换 Embedding、换分块和换存储的代价

换 Embedding

如果改变模型、维度、非对称 Embedding、查询前缀或文档前缀,旧向量语义就不再和新配置一致。正确做法通常是:

停止写入
  -> 备份原始文档和 LLM 缓存
  -> 清理受影响的向量数据
  -> 使用新配置重新索引
  -> 用固定问题集比较新旧召回
  -> 通过后再切换业务流量

不要只改 EMBEDDING_MODEL 然后继续查询旧工作区。

换分块策略

新的 LIGHTRAG_PARSER 或 chunk 配置主要影响之后进入队列的文件。已有文档要不要重处理,要看你是否需要全库使用同一套规则。混合版本并不一定错误,但必须保存每个文档实际使用的 chunk_options,否则出现召回差异时很难解释。

换存储后端

当前 API 文档明确说明,新增文档后不能随便更换存储实现,LightRAG 还没有通用的直接迁移路径。切换 PostgreSQL、OpenSearch 或其他后端前,要先做备份、迁移演练和回滚方案。LLM 缓存可以通过专门工具迁移,但缓存迁移不等于所有图、向量和文档状态都已经迁移。

八、四类存储各自保存什么

LightRAG 使用四类后端:

类型 保存内容 典型实现
KV LLM 缓存、文本块和文档信息 JSON、PostgreSQL、Redis、MongoDB、OpenSearch
Vector 文本块、实体和关系的向量 NanoVectorDB、pgvector、Milvus、Qdrant、FAISS、OpenSearch
Graph 实体节点和关系边 NetworkX、Neo4j、PostgreSQL AGE、Memgraph、OpenSearch
Doc Status 文档处理状态和元数据 JSON、PostgreSQL、MongoDB、OpenSearch

默认的 JSON、NetworkX 和本地向量存储适合开发和调试,不应该直接当作生产高可用方案。

PostgreSQL,一体化选择

PostgreSQL 可以结合 pgvector 和 Apache AGE,同时承担 KV、向量和图存储。适合团队希望减少数据库种类、统一备份和权限管理的场景,但部署前要确认扩展、版本、连接池和向量维度。

MongoDB 或 OpenSearch,统一后端

仓库当前支持 MongoDB 和 OpenSearch 作为多类存储的统一后端。它们适合已经有对应基础设施和运维经验的团队。不要因为“一个数据库能保存所有东西”就忽略索引、容量、查询延迟和备份恢复。

Milvus、Qdrant,专注向量

如果向量规模大、检索吞吐高,Milvus 或 Qdrant 可以作为专业向量存储,图谱仍然交给 Neo4j、Memgraph 或其他图存储。

Neo4j、Memgraph,专注关系

如果业务核心是实体关系浏览、图谱运营和复杂关系查询,Neo4j 或 Memgraph 更适合承担图存储。它们不是简单替换向量数据库,四类存储仍要分别配置。

九、企业级 API 和数据治理

文档处理阶段的模型调用比单次查询更难估算。一个上传动作可能触发解析、实体关系抽取、摘要合并、多个 Embedding 批次和 VLM 分析。

通过 上游 API 或企业 API 网关接入时,建议按阶段统计:

文件级:文件大小、页数、解析引擎、处理耗时
抽取级:chunk 数、EXTRACT 调用量、失败重试
向量级:Embedding 文本数、批次、维度和费用
多模态级:图片/表格/公式数量、VLM 调用量
查询级:模式、top_k、rerank、输入输出 Token 和延迟

为每个项目设置月度预算、单文件上限和失败告警。MAX_PARALLEL_INSERT、MAX_ASYNC_LLM、EMBEDDING_FUNC_MAX_ASYNC 和批大小会影响吞吐,也会影响上游网关的并发压力,不能为了追求速度无限调大。

敏感文件先做权限分类和脱敏,再决定能否发送到外部解析服务或模型网关。企业 API 网关可以统一审计请求,但不能自动判断 PDF 里有没有客户身份证号、内部价格或未公开合同。

十、安全和版本边界

LightRAG 的解析器会处理本地文件、外部服务返回的 sidecar 和可能下载的图片资源。生产环境要限制:

文档中出现的实体和关系是模型抽取结果,不能直接作为合同、财务或合规事实。删除文件也要保留审计记录,因为一条关系可能由多份文档共同支持。

本文依据当前仓库文档编写。升级 LightRAG 前重点重读 FileProcessingPipeline.md、RoleSpecificLLMConfiguration.md、env.example 和存储迁移说明,不要把旧版本的解析 hint、环境变量和表结构直接复制到新环境。

十一、文档流水线验收清单

解析验收

索引验收

存储验收

成本和安全验收

总结

LightRAG 的增量更新真正省下来的,不只是一次重建时间,而是让变化中的知识库有机会持续运行。但前提是你知道哪些东西可以增量合并,哪些东西必须重新索引:

新增文件:通常可以走增量图和向量流程
删除文件:要清理派生数据并重建受影响关系
换解析器:旧文件需要重新处理
换 Embedding:向量数据通常要重建
换存储后端:先迁移演练,不要直接切换

结论

本文给出了问题定位、配置或创作流程的可执行路径。实际结果仍取决于当前版本、权限和运行环境,提交前应按官方文档复核可变字段,并保留失败证据和回滚边界。