整体架构

本页基于 SparkX 后端源码(sparkx.sparkshop)与数据库设计,自顶向下介绍系统的分层架构、核心子系统、RAG 流水线与数据模型。

1. 技术栈

技术选型
后端框架 Java 17 + Spring Boot 3.4 + MyBatis-Plus
大模型封装 LangChain4j 1.18(统一封装)+ langchain4j-mcp(MCP 协议)+ langchain4j-community-neo4j(知识图谱)
文档解析 Apache Tika / PDFBox / POI + MinerU(复杂版面)+ HanLP(中文分词)
存储 PostgreSQL(带 pgvector 向量扩展)+ Redis(Redisson 分布式锁/缓存)+ MinIO(对象存储)+ Neo4j(知识图谱,可选)
可观测 Spring Boot Actuator + Micrometer(OpenTelemetry 桥接)+ 自研 @RagTraceNode AOP
流式输出 SSE(Server-Sent Events)

2. 顶层架构

SparkX 采用前后端分离架构,后端按职责划分模块,包根为 sparkx.sparkshop:

sparkx.sparkshop/
├── common/        # 通用基础设施(config / constant / core / exception / utils)
├── config/        # 全局配置
├── system/        # 系统模块(用户 / 鉴权 / 登录)
├── knowledge/     # ★ 知识库 / RAG / 智能体子系统(最大,自包含)
├── workflow/      # 工作流编排引擎
└── evaluation/    # 评测(意图分类评估)

模块职责

模块 职责 关键能力
system 用户鉴权 登录、JWT、admin_user
knowledge RAG / Agent 核心子系统 知识库、文档入库、检索、意图、图谱、MCP、记忆、智能体对话
workflow 工作流编排 可视化节点图执行、调试
evaluation 评测 意图分类准确率评估
common 基础设施 配置、异常、工具、AOP

💡 knowledge 是后端最大的子系统,内部进一步按 pipeline / retrieval / ingest / intent / graph / infra / mcp / memory / agent / prompt / query / fallback 分包,换模型供应商不用改业务代码,加检索通道不用动生成逻辑

3. 系统分层

自顶向下分四层:

┌──────────────────────────────────────────────────────────┐
│              Controller 层(REST 入口 / SSE)              │
│  LoginController / KnowledgeController / AgentTest...     │
├──────────────────────────────────────────────────────────┤
│              Service 层(业务编排)                         │
│  AgentChatService / DocumentIngestService / Workflow...   │
├──────────────────────────────────────────────────────────┤
│              核心引擎层                                    │
│  RagPipeline(11 stages) / Retrieval / Workflow Engine    │
│  Model Routing(三态熔断)/ Intent Tree / Ingest Pipeline │
├──────────────────────────────────────────────────────────┤
│              基础设施层                                    │
│  PostgreSQL(vector) / Redis / MinIO / Neo4j / LLM Client │
└──────────────────────────────────────────────────────────┘

Controller 层

主要 REST 入口(共 18 个 Controller):

领域 Controller
鉴权 LoginController、AdminController
知识库 KnowledgeController、KnowledgeDocumentController、ParagraphController、QuestionController
智能体 KnowledgeAgentController、AgentTestController、ChatSessionController
模型 AiModelController、ExtServiceConfigController
意图 IntentNodeController
图谱 KnowledgeGraphController
MCP McpServerController
样例 SampleQueryController
入库管线 PipelineController
工作流 WorkflowController
评测 EvaluationController

4. RAG 流水线(核心)

一次用户提问,在 SparkX 里经过的完整链路。这是整个系统最核心的设计。

knowledge/pipeline/RagPipeline 按 Spring @Order 自动装配所有 stage,PipelineStage 定义 CONTINUE / FALLBACK / COMPLETE 三态契约,PipelineContext 贯穿各阶段共享上下文。

11 个 Stage 及执行顺序

Order Stage 作用 可短路
5 SampleQueryStage 样例查询优先匹配,命中直接返回标准答案(零 LLM) ✅ COMPLETE
10 RewriteSplitStage 查询改写 + 多子问题拆分 + 闲聊预判
20 IntentStage 规则闸门:问候 / 闲聊零成本拦截
30 TreeIntentStage 意图树分类:按子问题并行分类 + 配额控制
40 GuidanceStage 歧义引导:置信度不足时反问澄清
50 VagueQueryClarifyStage 模糊查询澄清
60 RetrieveStage 多通道检索:向量 + 关键词 + 图谱 + 意图驱动
70 RerankStage 重排精排
80 MergeStage 多源结果合并
90 FallbackStage 兜底:检索为空 / 模型失败时的降级
100 GenerateStage 大模型生成最终回答
用户提问
   │
   ▼
[5 样例查询]──命中──► 直接返回(结束,零 LLM)
   │未命中
   ▼
[10 改写拆分]──► [20 规则闸门]──闲聊──► 直接回复(结束)
   │                    │
   │                    ▼ 业务问题
   ▼
[30 意图分类]──► [40 歧义引导]──► [50 模糊澄清]
   │
   ▼
[60 多通道检索]──► [70 重排]──► [80 合并]
   │
   ▼
[90 兜底]──检索为空──► 固定回复 / 模型降级
   │有结果
   ▼
[100 生成]──► 返回回答

💡 任一 stage 可通过 COMPLETE 短路直返(如样例命中、闲聊拦截、歧义澄清),异常统一走 FallbackStage 兜底,保证用户永远能收到一个体面的回应。

5. 检索引擎

多通道检索

retrieval/ 模块采用策略模式,检索通道独立执行、互不影响,通过线程池并行调度:

检索通道 说明
向量+关键词混合 VectorKeywordHybridChannel 向量语义 + 关键词全文检索
意图驱动 IntentDirectedChannel 按意图路由定向检索

HybridContentRetriever 编排多通道,接口统一为 ConditionalRetrievalChannel(意图驱动是否启用)。

后处理链(责任链模式)

检索结果按顺序串联精炼:

后处理器 作用
DeduplicationPostProcessor 去重
RerankPostProcessor / MmrReranker 重排 + MMR 去冗余
ParentExpansionPostProcessor 子块命中扩展到父块(父子分块)
FusionPostProcessor 多通道 RRF(Reciprocal Rank Fusion)融合

6. 模型路由与容错

生产环境不能只依赖一个模型供应商。infra/chat/ + infra/model/ 构建了完整的容错层。

RoutingLLMService(路由入口)
        │
        ▼
   ModelSelector(按策略选模型)
        │
        ▼
   多 Provider 客户端
   ┌──────────────────┬──────────────────┐
   │ OpenAICompatible │   OllamaChat     │
   └──────────────────┴──────────────────┘
        │
        ▼
   ModelHealthStore(三态熔断:CLOSED → OPEN → HALF_OPEN)
        │
        ▼
   LlmFirstPacketProbe(首包探测,切换无感知)
组件 职责
RoutingLLMService 路由入口,统一调度
ModelSelector 按优先级 / 策略选模型
ModelHealthStore 三态熔断(CLOSED 正常 / OPEN 熔断 / HALF_OPEN 半开放探测)
ModelRoutingExecutor 路由执行
LlmFirstPacketProbe 首包探测,保证模型切换对用户无感知
OpenAICompatibleChatClient / OllamaChatClient 具体模型客户端实现

容错机制:每个模型独立维护健康状态,失败次数达阈值自动熔断,冷却期后进入半开放状态放行探测请求,探测成功恢复、失败继续熔断。配合优先级降级链,一个模型挂了自动切下一个候选。

7. 文档入库 Pipeline

ingest/ 模块,文档从上传到可检索经过一条节点编排的流水线:

fetch → parse → chunk → enrich → enhance → index
 抓取    解析    分块    增强     优化      入库
环节 实现
解析 Apache Tika / PDFBox / POI 多格式;PDF 复杂版面走 MinerU(ingest/mineru/,自建/云端可配)
分块 AdaptiveDocumentSplitter(自适应)+ ParentChildSplitter(父子分块)+ SpreadsheetRowSplitter(表格按行)
结构化切片 ingest/block/:基于版面识别段落/标题/列表/表格/图片/代码块,保留 Provenance 溯源
索引 KgEntityIndexer(图谱实体)、SampleQueryIndexer(样例)、QuestionIndexer(问答对)

入库任务和每个节点都有独立执行日志(t_ingestion_task_node / t_ingestion_pipeline_node),出问题能精确定位到哪一步。

8. 工作流引擎

workflow/engine/ 模块,基于 AntV X6 的可视化节点图执行:

组件 职责
FlowNodeParser 解析前端保存的节点图 JSON,构建执行拓扑
IWorkflowNode 节点执行器接口
NodeProvider 节点工厂,按类型分发
WorkflowChatService 工作流对话总入口

节点执行器

节点 执行器 作用
开始 (内置) 提供系统变量
意图分类 PurposeNode 模型分类,按分支路由
LLM LlmNode 调用大模型生成
知识检索 DatasetNode 向量召回
知识图谱 GraphNode 图谱召回
Agent AgentNode 调用智能体
回复 AnswerNode 返回最终回答(终点)
条件分支 SwitchNode IF/ELSEIF/ELSE,12 种操作符

9. 数据库设计

数据库为 PostgreSQL(带 pgvector 扩展),向量检索直接用 PgSQL 的 vector 能力,无需额外向量数据库。共 29 张业务表,按业务域分组:

知识库域

作用 关键字段
knowledge_base 知识库 embedding_model_id(绑定向量模型)、dimension、kg_enabled
document 文档 kb_id、file_name、storage_url、ingestion_summary、chunk_count
chunks 文档分块(子块) kb_id、content、embedding(向量)、tsv(关键词向量)、metadata
parent_chunks 父块(父子分块) kb_id、content
knowledge_question 问答对 问题 + 答案索引

💡 chunks.embedding 是 pgvector 向量列,tsv 是 tsvector 关键词列 —— 一张表同时支撑向量检索和全文检索。

智能体域

| 表 | 作用 | 关键字段 | | — | — | | knowledge_agent | 智能体配置 | knowledge_base_ids、chat_model_id、system_prompt、temperature、embedding_top_k、vector_threshold、rerank_、fallback_、sample_query_* | | t_chat_session | 对话会话 | 用户会话 | | t_chat_message | 对话消息 | 单轮消息记录 | | t_agent_test_session | 智能体调试会话 | 调试用 | | t_agent_test_message | 调试消息 | 调试用 |

对话记忆域

作用
t_conversation_message 对话历史消息(含 rag_context 检索证据、thinking_content 思考过程)
t_conversation_summary 会话话题摘要(L2 记忆压缩)
t_persistent_memory 跨会话持久记忆(L3,原理预研,默认关闭)

意图与样例域

作用 关键字段
t_intent_node 意图树节点 parent_id、level、kind、examples、mcp_tool_id、prompt_template
sample_query 样例查询 问题 + 标准答案(向量化后匹配)
sample_query_config 样例查询全局配置 匹配阈值等

入库流水线域

作用
t_ingestion_task_node 入库任务节点
t_ingestion_pipeline_node 入库管线节点

AI 模型域

| 表 | 作用 | 关键字段 | | — | — | | ai_model | 模型配置 | type(对话/向量/重排/视觉)、provider、credential、models(逗号分隔多模型)、priority、supports_thinking | | ext_service_config | 外部服务配置 | MinerU 等外部服务 |

知识图谱域

作用
kg_config 图谱配置
kg_entity 图谱实体
kg_extraction_record 实体抽取记录

MCP 域

作用 关键字段
mcp_server MCP 服务 transport_type、url、auth_type、auth_config、headers、timeout_sec
mcp_tool MCP 工具(自动发现) server_id、tool_name、input_schema

工作流域

作用 关键字段
workflow 工作流定义 flow_data(节点图 JSON)
workflow_runtime 运行时记录 workflow_id、user_id
workflow_runtime_context 运行时上下文 node_type、step、output_data、model_data

系统域

作用
admin_user 管理员用户

10. 设计模式实战

SparkX 不是为用模式而用,每个模式都对应一个具体的工程问题:

设计模式 应用场景 解决的问题
策略模式 检索通道、后处理器、MCP 工具执行器、节点执行器 可插拔替换,加新通道不改老代码
模板方法 PipelineStage 基类、IWorkflowNode 统一执行流程,子类只关注核心逻辑
责任链模式 后处理器链、RAG Pipeline stages、模型降级链 多步骤按顺序串联,灵活组合
装饰器模式 首包探测回调(ProbeStreamBridge) 不改原有回调的前提下增加探测能力
注册表模式 MCP 工具注册中心、意图节点、节点工厂(NodeProvider) 组件自动发现与注册,新增零配置
工厂模式 NodeProvider(按类型创建节点执行器) 解耦创建与使用
AOP @RagTraceNode 链路追踪切面 追踪逻辑与业务代码解耦

11. 扩展点

SparkX 的核心模块都预留了扩展点,加能力不改框架代码:

想扩展 实现方式
新增检索通道 实现 ConditionalRetrievalChannel 接口,注册为 Spring Bean
新增 RAG 阶段 实现 PipelineStage,加 @Component @Order(n) 自动并入流水线
新增后处理器 实现后处理接口,加入责任链
新增 MCP 工具 配置 MCP Server,自动发现
新增模型供应商 实现 ChatClient 接口,配置候选列表参与路由
新增工作流节点 实现 IWorkflowNode,注册到 NodeProvider

深入理解各模块可继续阅读 核心概念设计原则

知识星球
🌟 加入知识星球
解锁源码与设计详解
知识星球二维码 了解详情