知识库文档处理解析

本文档解析 PIGX 知识库文档处理的完整流程,基于 LiteFlow 规则引擎 实现。

架构概览

文档处理采用规则引擎编排,将复杂的文档处理流程拆分为独立的组件节点,通过配置文件(document-rule.xml)定义流程编排。

总体流程

核心组件

组件位置职责
DocumentContextcontext/DocumentContext.java流程上下文,传递数据和状态
IngestDocumentCmpcomponent/IngestDocumentCmp.java文档接收(Ingest阶段)
ParseDocumentCmpcomponent/ParseDocumentCmp.java文档解析(Parse阶段)
ChunkDocumentCmpcomponent/ChunkDocumentCmp.java文档切片(Chunk阶段)
EmbedSlicesCmpcomponent/EmbedSlicesCmp.java向量化(Embed阶段)
StatusMarkerCmpcomponent/StatusMarkerCmp.java状态标记

流程配置

规则定义位于 pigx-knowledge/src/main/resources/rules/document-rule.xml

<chain name="uploadDocumentChain">   <!-- 文件上传 -->
<chain name="textInputChain">        <!-- 文本录入 -->
<chain name="excelQaChain">          <!-- Excel QA -->
<chain name="manualQaChain">         <!-- 手动问答 -->
<chain name="retryDocumentChain">    <!-- 重试处理 -->

文档解析器架构

解析器选择流程

接口定义

位置: support/handler/parse/UploadFileParseHandler.java

public interface UploadFileParseHandler extends Ordered {
    // 判断是否支持该文档类型
    boolean supports(AiDatasetEntity dataset, AiDocumentEntity document);

    // 文件转文本,返回 (状态, 结果/任务ID/错误信息)
    Pair<FileParserStatusEnums, String> file2String(...);

    // 优先级(数值越大优先级越高)
    int getOrder();
}

解析器类型

解析器优先级支持格式解析方式
MineruCloudUploadFileParseHandler200DOCX, PDF, PPTX, PNG, JPGMineru 云服务(异步)
PdfAIUploadFileParseHandler100PDFPDFBox → AI视觉OCR
Office2MdUploadFileParseHandler100DOCX, PDF, PPTX, XLSXMarkitdown 转换服务
PdfOcrUploadFileParseHandler0PDFPDFBox → UmiOCR
OfficeUploadFileParseHandler0DOC, DOCX, PPT, PPTX, XLS, XLSXApache POI
ImageOcrUploadFileParseHandler0PNG, JPG, JPEGUmiOCR
TextUploadFileParseHandler0TXT, MDTextDocumentParser

解析状态

状态说明后续流程
PARSE_SUCCESS解析成功进入 Chunk 阶段
PARSE_FAIL解析失败标记失败
ASYNC_PARSING异步解析中等待回调

流程阶段详解

1. Ingest 阶段 - 文档接收

组件: IngestDocumentCmp.java


2. Parse 阶段 - 文档解析

组件: ParseDocumentCmp.java

Excel QA 解析


3. Chunk 阶段 - 文档切片

组件: ChunkDocumentCmp.java

切片策略:

策略实现类说明
PARAGRAPHDocumentByParagraphSplitter按段落分割
CHARACTERDocumentByCharacterSplitter按字符数分割
SENTENCEDocumentBySentenceSplitter按句子分割
默认DocumentSplitters.recursive()递归分割

4. Embed 阶段 - 向量化

组件: EmbedSlicesCmp.java

向量化内容构建:

知识库模式文档来源向量化内容元数据 type
Q2Q(客服)Q&A纯问题"1" (问题)
Q2Q(客服)非Q&A文档名+切片内容"1" (问题)
通用模式任意文档名+切片内容+摘要"0" (答案)

向量化策略

位置: support/handler/rag/strategy/impl/DefaultEmbeddingStrategy.java

@Override
public void processEmbedding(AiDocumentEntity documentEntity, AiDatasetEntity aiDataset,
                             List<AiSliceEntity> sliceEntityList, EmbeddingStore<TextSegment> embeddingStore) {
    ...
    for (AiSliceEntity sliceEntity : sliceEntityList) {
        // 构建向量化内容
        String content = buildEmbeddingContent(documentEntity, aiDataset, sliceEntity);

        // 构建元数据
        Metadata metadata = buildMetadata(documentEntity, sliceEntity, aiDataset);

        // 向量化并存储
        TextSegment textSegment = TextSegment.from(content, metadata);
        Embedding embedding = embeddingModel.embed(textSegment.text()).content();
        embeddingStore.add(sliceEntity.getEmbeddingId(), embedding, textSegment);
    }
}

5. 状态标记

组件: StatusMarkerCmp.java

节点状态说明
markParsingASYNC_PARSING等待异步解析
markCompletedSLICED处理完成
markFailedFAILED处理失败

流程上下文

位置: context/DocumentContext.java

public class DocumentContext {
    // 输入参数
    private AiDocumentDTO inputPayload;
    private Long documentId;
    private Long datasetId;

    // 处理状态
    private SliceStatusEnums state;
    private String currentStage;

    // 中间结果
    private AiDocumentEntity documentEntity;
    private AiDatasetEntity datasetEntity;
    private String rawContent;           // 解析后的文本
    private List<AiSliceEntity> slices;  // 切片列表
    private List<QaItem> qaList;         // QA列表

    // 解析相关
    private String parserType;
    private String asyncTaskId;
    private FileParserStatusEnums parseStatus;
    ...
}

流程编排示例

文件上传流程

执行路径:

  1. 同步解析成功: ingest → selectParser → parse → chunk → summary/tag → embed → completed
  2. 异步解析: ingest → selectParser → parse → submitAsync → markParsing (等待回调)
  3. 解析失败: ingest → selectParser → parse → markFailed

Excel QA 流程


向量存储支持

向量存储工厂类策略实现
MilvusMilvusEmbeddingStoreFactoryDefaultEmbeddingStrategy
QdrantQdrantEmbeddingStoreFactoryDefaultEmbeddingStrategy
ChromaChromaEmbeddingStoreFactoryDefaultEmbeddingStrategy
PgvectorPgVectorEmbeddingStoreFactoryDefaultEmbeddingStrategy
Neo4jNeo4jEmbeddingStoreFactoryNeo4jEmbeddingStrategy

关键代码位置

功能文件路径
流程规则定义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