本文档解析 PIGX 知识库文档处理的完整流程,基于 LiteFlow 规则引擎 实现。
文档处理采用规则引擎编排,将复杂的文档处理流程拆分为独立的组件节点,通过配置文件(document-rule.xml)定义流程编排。
| 组件 | 位置 | 职责 |
|---|---|---|
DocumentContext | context/DocumentContext.java | 流程上下文,传递数据和状态 |
IngestDocumentCmp | component/IngestDocumentCmp.java | 文档接收(Ingest阶段) |
ParseDocumentCmp | component/ParseDocumentCmp.java | 文档解析(Parse阶段) |
ChunkDocumentCmp | component/ChunkDocumentCmp.java | 文档切片(Chunk阶段) |
EmbedSlicesCmp | component/EmbedSlicesCmp.java | 向量化(Embed阶段) |
StatusMarkerCmp | component/StatusMarkerCmp.java | 状态标记 |
规则定义位于 pigx-knowledge/src/main/resources/rules/document-rule.xml:
位置: support/handler/parse/UploadFileParseHandler.java
| 解析器 | 优先级 | 支持格式 | 解析方式 |
|---|---|---|---|
MineruCloudUploadFileParseHandler | 200 | DOCX, PDF, PPTX, PNG, JPG | Mineru 云服务(异步) |
PdfAIUploadFileParseHandler | 100 | PDFBox → AI视觉OCR | |
Office2MdUploadFileParseHandler | 100 | DOCX, PDF, PPTX, XLSX | Markitdown 转换服务 |
PdfOcrUploadFileParseHandler | 0 | PDFBox → UmiOCR | |
OfficeUploadFileParseHandler | 0 | DOC, DOCX, PPT, PPTX, XLS, XLSX | Apache POI |
ImageOcrUploadFileParseHandler | 0 | PNG, JPG, JPEG | UmiOCR |
TextUploadFileParseHandler | 0 | TXT, MD | TextDocumentParser |
| 状态 | 说明 | 后续流程 |
|---|---|---|
PARSE_SUCCESS | 解析成功 | 进入 Chunk 阶段 |
PARSE_FAIL | 解析失败 | 标记失败 |
ASYNC_PARSING | 异步解析中 | 等待回调 |
组件: IngestDocumentCmp.java
组件: ParseDocumentCmp.java
组件: ChunkDocumentCmp.java
切片策略:
| 策略 | 实现类 | 说明 |
|---|---|---|
| PARAGRAPH | DocumentByParagraphSplitter | 按段落分割 |
| CHARACTER | DocumentByCharacterSplitter | 按字符数分割 |
| SENTENCE | DocumentBySentenceSplitter | 按句子分割 |
| 默认 | DocumentSplitters.recursive() | 递归分割 |
组件: EmbedSlicesCmp.java
向量化内容构建:
| 知识库模式 | 文档来源 | 向量化内容 | 元数据 type |
|---|---|---|---|
| Q2Q(客服) | Q&A | 纯问题 | "1" (问题) |
| Q2Q(客服) | 非Q&A | 文档名+切片内容 | "1" (问题) |
| 通用模式 | 任意 | 文档名+切片内容+摘要 | "0" (答案) |
位置: support/handler/rag/strategy/impl/DefaultEmbeddingStrategy.java
组件: StatusMarkerCmp.java
| 节点 | 状态 | 说明 |
|---|---|---|
markParsing | ASYNC_PARSING | 等待异步解析 |
markCompleted | SLICED | 处理完成 |
markFailed | FAILED | 处理失败 |
位置: context/DocumentContext.java
执行路径:
| 向量存储 | 工厂类 | 策略实现 |
|---|---|---|
| Milvus | MilvusEmbeddingStoreFactory | DefaultEmbeddingStrategy |
| Qdrant | QdrantEmbeddingStoreFactory | DefaultEmbeddingStrategy |
| Chroma | ChromaEmbeddingStoreFactory | DefaultEmbeddingStrategy |
| Pgvector | PgVectorEmbeddingStoreFactory | DefaultEmbeddingStrategy |
| Neo4j | Neo4jEmbeddingStoreFactory | Neo4jEmbeddingStrategy |
| 功能 | 文件路径 |
|---|---|
| 流程规则定义 | pigx-knowledge/src/main/resources/rules/document-rule.xml |
| 上下文定义 | support/liteflow/document/context/DocumentContext.java |
| Ingest组件 | support/liteflow/document/component/IngestDocumentCmp.java |
| Parse组件 | support/liteflow/document/component/ParseDocumentCmp.java |
| Chunk组件 | support/liteflow/document/component/ChunkDocumentCmp.java |
| Embed组件 | support/liteflow/document/component/EmbedSlicesCmp.java |
| 解析器接口 | support/handler/parse/UploadFileParseHandler.java |
| 向量化策略 | support/handler/rag/strategy/EmbeddingStrategy.java |
| 默认策略实现 | support/handler/rag/strategy/impl/DefaultEmbeddingStrategy.java |