know-engine

项目整体架构与核心功能

本项目是一个基于 RAG 架构的企业知识管理与智能问答系统,实现从文档接入、智能切片、向量化存储到多源检索、意图路由、流式对话的全链路闭环。 整体架构分层 系统采用分层架构设计,自上而下分为 5 层: 知识入库流程 文档从上传到可检…

TL;DR

本项目是一个基于 RAG 架构的企业知识管理与智能问答系统,实现从文档接入、智能切片、向量化存储到多源检索、意图路由、流式对话的全链路闭环。 整体架构分层 系统采用分层架构设计,自上而下分为 5 层: 知识入库流程 文档从上传到可检…

本项目是一个基于 RAG 架构的企业知识管理与智能问答系统,实现从文档接入、智能切片、向量化存储到多源检索、意图路由、流式对话的全链路闭环。

整体架构分层

系统采用分层架构设计,自上而下分为 5 层:

知识入库流程

文档从上传到可检索的完整链路:

对话流程

用户提问到获取回答的完整链路:

模块划分

项目源码按职责划分为 7 个核心包: | 模块 | 包路径 | 职责 | | --- | --- | --- | | AI 能力层 | ai/ | 意图识别、通用对话、Prompt 路由、标题摘要生成 | | 对话管理层 | chat/ | 对话编排(RAG 管道)、会话管理、消息持久化、多轮记忆 | | 文档管理层 | document/ | 文档上传/转换/切片/向量化、知识库管理、事件驱动处理 | | RAG 检索增强层 | rag/ | 查询改写、查询路由、多源检索、Reranking、进度感知 | | 业务数据层 | business/ | 业务实体管理、知识库CRUD、数据转换 | | 基础设施层 | infra/ | 分布式锁注解、雪花ID生成器、JSON修复工具 | | 全局配置层 | config/ | 线程池、MyBatis-Plus、XXL-Job、元数据填充 |

代码结构:

know-engine/
├── ai/                          # AI 能力层
│   ├── config/                  #   Memory 配置
│   ├── constant/                #   意图枚举
│   ├── model/                   #   意图识别结果模型
│   └── service/                 #   意图识别、通用对话、Prompt 路由、标题摘要
├── chat/                        # 对话管理层
│   ├── constant/                #   会话状态、消息类型、检索来源
│   ├── controller/              #   对话/会话/消息 REST 接口
│   ├── entity/                  #   会话与消息实体
│   ├── mapper/                  #   MyBatis-Plus Mapper
│   └── service/                 #   对话应用服务(RAG 管道编排)
├── config/                      # 全局配置
│   ├── AsyncConfig              #   线程池配置
│   ├── MyMetaObjectHandler      #   自动填充时间戳
│   ├── MybatisPlusConfig        #   分页插件、乐观锁插件
│   └── XxlJobConfig             #   XXL-Job 执行器配置
├── document/                    # 知识文档管理层
│   ├── config/                  #   MinIO 配置
│   ├── constant/                #   文档状态、文件类型、知识库类型
│   ├── controller/              #   文档/切片 REST 接口
│   ├── entity/                  #   文档与切片实体
│   ├── event/                   #   Spring 事件(Converted/Chunked)
│   ├── job/                     #   XXL-Job 补偿任务
│   ├── mapper/                  #   MyBatis-Plus Mapper
│   ├── service/                 #   文档处理、切片、向量化、文件存储
│   └── util/                    #   文件类型检测 (Tika)
├── infra/                       # 基础设施
│   ├── json/                    #   JSON 工具
│   ├── lock/                    #   分布式锁注解 + AOP 切面
│   └── snowflake/               #   雪花 ID 生成器
└── rag/                         # RAG 检索增强层
    ├── config/                   #   ES / Neo4j 配置
    ├── constant/                 #   元数据 Key 常量
    ├── controller/               #   检索测试接口
    ├── model/                    #   路由结果模型
    └── modules/                  #   RAG 核心模块
        ├── KnowEngineQueryTransformer   # 查询改写器
        ├── KnowEngineQueryRouter        # 三源路由器
        ├── KnowEngineElasticsearchContentRetriever  # ES 检索器(父子分段扩展)
        ├── ProgressAwareContentAggregator          # 进度感知聚合器
        ├── reranker/              #   BGE-RERANKER 本地单例
        └── splitter/              #   文档切片器(Markdown/Excel)

技术栈

分类 技术 说明
语言/框架 Java 21 + Spring Boot 3.5 虚拟线程、Record 模式匹配
AI 框架 LangChain4j 1.11.0 RAG 管道、AI Services、流式对话
LLM qwen-max-latest、qwen3.5-flash、qwen-3.6-plus 意图识别、查询改写、路由决策、流式生成
向量存储 Elasticsearch KNN / 全文 / 混合检索
图数据库 Neo4j + APOC Text2Cypher 实体关系查询
关系数据库 MySQL + MyBatis-Plus 业务数据 + Text2SQL 结构化查询
对象存储 MinIO 文档文件存储
缓存 Redis + Redisson 分布式锁、父分段缓存
Reranking BGE-RERANKER (ONNX Runtime) 进程内本地推理,零网络开销
Embedding text-embedding-v4 (通义) 1536 维向量
文件解析 MinerU (PDF)、Apache Tika (类型检测)、EasyExcel 多格式文档解析
任务调度 XXL-Job 2.4 补偿任务定时触发
响应式 Project Reactor SSE 流式推送、非阻塞调度
连接池 Druid SQL 监控、慢查询检测

RAG 管道核心组件

组件 类名 职责
查询改写器 KnowEngineQueryTransformer 4维改写策略,提升检索召回率
查询路由器 KnowEngineQueryRouter LLM决策路由到ES/MySQL/Neo4j
ES检索器 KnowEngineElasticsearchContentRetriever KNN+全文混合检索,父子分段扩展
SQL检索器 KnowEngineSqlDatabaseContentRetriever Text2SQL结构化数据查询
重排序聚合器 KnowEngineReRankingContentAggregator BGE-RERANKER本地推理精排
进度聚合器 ProgressAwareContentAggregator 装饰器模式注入进度回调
进度检索器 ProgressAwareContentRetriever 装饰器模式注入进度回调

核心功能

1. 全链路知识接入 (Ingestion Pipeline)

从原始文档到可检索知识,全程自动化: - 多格式解析:支持 PDF(MinerU 深度解析)、Word、Excel、Markdown、TXT、Excel等 - 智能切片(5 种策略,工厂模式按需选择): - MarkdownHeaderParentTextSplitter — 基于标题层级切片,保留父子分段关系(Parent-Child Chunking),支持 chunkSize / overlap 精细控制、代码块保护、超出 chunkSize 自动二次切割 - MarkdownHeaderBrotherTextSplitter — 兄弟分段关联,检索时自动补全同级上下文 - ExcelSplitter — 针对结构化数据的双模式切片(键值对模式 & HTML 表格模式),按 chunkSize 智能分块,确保同一行数据不被拆分 - DocumentByWordSplitter / DocumentByRegexSplitter — 按长度 / 正则 / 分隔符切分,满足不同文档结构需求 - SMART 智能切分 — 自动使用 MarkdownHeaderParentTextSplitter,overlap 为 chunkSize 的 10% - 事件驱动处理:Spring ApplicationEvent 串联 文档转换 → 切片 → 向量化,每个阶段独立解耦 - 补偿机制:XXL-Job 定时扫表,自动重试失败任务,保障最终一致性

2. 关键检索增强

  • 查询改写(KnowEngineQueryTransformer):4 维改写策略 — 简洁改写、抽象概念改写、错别字纠正、车型信息标准化。改写结果还通过 Java 21 的虚拟线程异步回写到数据库,不阻塞主流程。
  • 父子分段扩展(KnowEngineElasticsearchContentRetriever):命中子分段时,自动回溯父分段获取完整语义上下文。
  • 本地 Reranking(BgeScoringModel):基于 ONNX Runtime 加载 BGE-RERANKER 模型,进程内推理,零网络延迟
  • 查询路由(KnowEngineQueryRouter):三路由检索架构,由 LLM 智能识别问题,判断通过不同的数据源做检索
  • Text2SQL(SqlDatabaseContentRetriever):LLM 根据数据库 Schema 自动生成 SQL 并通过 JDBC 执行查询,支持结构化业务数据(订单、保险、召回信息等)的自然语言查询。基于 table_meta 表存储的表结构元数据驱动 Schema 感知,自动注入当前日期等上下文变量;查询结果以自然语言格式返回
  • Text2Cypher(Neo4jText2CypherRetriever):LLM 根据图数据库 Schema 自动生成 Cypher 查询语句,在 Neo4j 中执行实体关系检索,适用于车型图谱、零部件供应链、故障影响链等关系型场景。Cypher 查询失败时自动降级回退到 ES 检索,保障系统鲁棒性;查询结果与 ES 向量检索结果通过 ContentAggregator 统一聚合,经 Reranking 后共同参与最终生成 | 数据源 | 检索方式 | 适用场景 | | --- | --- | --- | | Elasticsearch | KNN 向量检索 + 全文检索 + 混合检索 | 语义相似性匹配、非结构化知识 | | MySQL | Text2SQL(LLM 生成 SQL) | 结构化数据查询,如订单、保险、召回信息 | | Neo4j | Text2Cypher(LLM 生成 Cypher + 降级回退) | 实体关系查询,如车型图谱、零部件供应链、故障影响链 |

3. 意图识别与动态 Prompt

  • 6 大意图分类:售前咨询与购买、售后维修与保养、车辆使用与技术指导、投诉与维权、汽车营销政策、其他
  • 相关度判断:LLM 首先判断用户问题是否与汽车领域相关,不相关问题直接走通用对话,避免 RAG 误检索
  • 结构化实体提取:车型、订单号、经销商、故障描述、预约时间、零部件、车辆功能
  • Prompt 动态路由:根据识别结果加载对应的领域 Prompt 文件,Prompt 使用 ConcurrentHashMap 本地缓存,避免重复 IO
  • LangChain4j Structured Output:通过 @JsonPropertyDescription 注解约束 LLM 输出为 IntentRecognitionResult Record,确保意图识别结果结构化、可编程处理

4. 流式对话体验

  • SSE 实时推送:基于 Reactor Flux 的全链路流式输出,Token 级逐字推送
  • 进度可见:RAG 管道每个环节(意图识别 → 问题改写 → 问题路由 → 排序筛选 → 生成回答)均向前端推送 [PROGRESS] 事件,消除等待焦虑
  • RAG 引用溯源:检索结果携带文档来源、分片内容、Rerank 分数,支持可解释性审查
  • 异步标题生成:新对话自动以 Java 21 虚拟线程 + qwen3.5-flash 轻量模型异步生成摘要标题,不阻塞首 Token 延迟;失败时保留临时标题,保障主流程不受影响
  • 交互卡片输出:SSE 流式响应中支持 [CARD] 结构化卡片事件,将车型对比、订单详情、召回信息等结构化数据以卡片形式呈现。LLM 通过 Prompt 引导在特定场景输出结构化 JSON 标记,后端解析后转换为 [CARD] 事件,前端根据卡片类型(vehicle_info / order_detail / recall_notice / comparison_table)渲染对应 UI 组件,支持点击展开详情、跳转链接等交互操作
  • 钉钉机器人接入:接入钉钉机器人,支持单聊和群聊 @机器人两种模式。钉钉消息回调经签名验证后转换为 KnowEngine 统一对话接口调用,流式收集完整回复后通过钉钉 API 回复;群聊模式自动识别 @内容 作为用户问题

5. 知识库管理

  • 双类型知识库:DOCUMENT_SEARCH(语义检索型)和 DATA_QUERY(数据查询型)
  • 完整文档生命周期:INIT → UPLOADED → CONVERTING → CONVERTED → CHUNKED → VECTOR_STORED
  • 文档多版本管理:支持同一知识文档的多版本共存,knowledge_document.extension JSON 字段存储版本元数据(version、parentVersionDocId、changeLog)。新版本发布后旧版本自动归档,检索时默认使用最新版本;版本切换通过修改 ES 中 docVersion 的 Filter 条件实现热切换,无需重新向量化;expire_date 字段支持文档到期后自动从检索结果中过滤;版本回滚一键切回历史版本,ES Filter 实时生效
  • 文档检索权限体系:基于角色和组织的文档访问控制,knowledge_document.accessible_by 字段存储文档可见范围。切片时将 accessibleBy 写入 knowledge_segment.metadata,向量化时同步到 ES 索引,检索时在 EmbeddingSearchRequest 中注入 Filter 条件按当前用户身份过滤。
  • MinIO 对象存储:文档文件统一存储,支持 URL 直接访问
  • 乐观锁 + 逻辑删除:数据安全,防并发冲突
版本提示

模型、框架与接口会持续变化。涉及版本号、参数与生产配置时,请在实践前对照对应官方文档。

LLMentor系统化学习大模型应用工程

内容来自个人课程知识库备份,并经过结构化整理。技术版本持续演进,生产使用前请结合官方文档验证。