# SparkX
**Repository Path**: sunnote/spark-x
## Basic Information
- **Project Name**: SparkX
- **Description**: 🚀 SparkX 是采用 Springboot3 开发的 基于大语言模型和编排的AI智能体开发平台。开箱即用、模型中立、知识图谱、RAG、灵活编排,支持快速嵌入到第三方业务系统。
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://x.sparkshop.cn
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 237
- **Created**: 2026-09-01
- **Last Updated**: 2026-09-01
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
基于大语言模型与编排的企业级 AI 智能体开发平台
🇨🇳 中文 | 🇬🇧 English
## 🚀 什么是 SparkX?
SparkX 是一个采用 **大语言模型 + 可视化编排** 构建的企业级 AI 智能体开发平台,覆盖从知识库入库、检索增强、智能体对话到工作流编排的完整链路。开箱即用、模型任选、灵活编排。
- **模型任选**:基于 `LangChain4j` 统一封装,接入 OpenAI 兼容标准接口,几乎覆盖市面上所有主流大模型——不限于官方服务,也支持 Ollama 等自建模型。
- **RAG 索引增强**:自研多路检索管线,向量 + 关键词混合检索,多通道 RRF 融合 + 父子分块扩展 + MMR 去冗余 + 重排精排,有效消除大模型幻觉,对私有数据问答尤为有效。
- **知识图谱增强**:原生集成 `Neo4j` 知识图谱,文档入库时自动抽取实体与关系;检索支持「实体子图扩展(1~2 跳)」「社区摘要」多模式,并与向量检索 RRF 融合,把分散在多文档间的关联串起来,擅长回答「A 与 B 有何关系」「列出所有 X」这类问题。
- **意图理解 & 智能路由**:内置可配置的意图树(`t_intent_node`),规则快速路径零成本判定问候 / 闲聊,低温 LLM 精准归类到业务节点(KB / SYSTEM / MCP 三类);检索前先路由,歧义问题自动引导澄清,把不该走知识库的问题前置拦截。
- **样例记忆命中**:高频 / 标准问题可预先写入样例库(`sample_query`),用户提问向量命中即零 LLM 直返答案,典型问题不再消耗推理资源,进一步降本提速。
- **会话记忆**:双层记忆抗长对话 token 爆炸——L1 滑动窗口保留最近 N 轮原样消息,L2 话题摘要把更早的对话压缩成话题索引(只记话题不记答案,防与实时检索冲突),多轮追问上下文不断、token 不爆。
- **灵活编排**:基于 `AntV X6` 可视化流程引擎,让多个 Agent 按节点图协同工作,覆盖单轮问答无法承载的复杂业务场景。
- **模型容错**:多模型路由 + 三态熔断器 + 首包探测 + 优先级降级链,单个模型供应商故障不影响业务。
- **MCP 无限扩展**:原生集成 MCP 协议(langchain4j-mcp),让 AI 自由调用外部业务工具,能力无上限。
一句话:**生产落地智能体会踩的坑,这里都有对应方案**。一套经过真实场景锤炼的工程实践,系统覆盖 RAG / Agent / MCP / 编排等核心能力。

## 🧭 快速导航
> 觉得不错?先点个 Star 收藏 👇
| | 链接 | 说明 |
|:---:|:---|:---|
| 📖 | 使用手册 | SparkX 完整使用文档 |
| 🚀 | 快速开始 | Docker 一键启动前后端 |
| 💡 | 为什么需要 SparkX | 设计思考与价值 |
| 🏗️ | 核心设计 | 架构与工程实践 |
---
## 💡 为什么需要 SparkX?
AI 这波浪潮,企业已经躲不过去了。
不管是客服、运营、还是内部 IT,都在想办法把大模型接进自己的业务。但真正动手时会发现:调个 API 容易,做出一个**能上线、能扛住生产流量、能持续运营**的智能体系统,坑多到怀疑人生。
### 企业落地 AI 智能体的 3 个真实痛点
### 1. 模型不稳定,挂了怎么办?
线上不可能只依赖一个模型供应商。网络抖动、限流、服务降级随时发生。如果系统只接了一家,它一挂,整个智能体就哑火。
SparkX 的做法是:**多候选路由 + 三态熔断 + 自动降级**。一个模型挂了,自动切到下一个候选,配合首包探测保证切换对用户无感知。
### 2. 知识库问答不准,幻觉满天飞
直接把原始文档塞给模型,回答质量看天吃饭。用户问"报销流程",模型可能给你编一个不存在的流程。
真正的 RAG 系统要考虑:文档怎么切分最合理?混合检索怎么融合排序?召回结果怎么去重精排?上下文怎么压缩不超 Token?每一环都是工程决策。
### 3. 单轮问答不够用,复杂场景怎么搞?
很多业务不是一问一答能解决的——查订单要带用户信息、走审批要调多个接口、处理工单要按步骤来。单纯的 RAG 智能体搞不定。
SparkX 提供了**可视化工作流编排**,把多个节点串成图,让 AI 按流程协同工作,而不是只会一问一答。
## 🏗️ SparkX 核心设计
采用前后端分离架构。后端按职责划分模块,知识库(RAG)子系统自包含,移植自经过生产验证的 sparkxV2。
```
spark-x/
├── admin/ # Vue3 + Naive UI 管理后台(智能体/知识库/AI配置/编排/对话调试)
├── server/ # Spring Boot 3.4 后端(包根 sparkx.sparkshop)
└── docker/ # 一键编排(backend + frontend + PgSQL + Redis + MinIO)
```
后端核心模块:
| 模块 | 职责 |
|---|---|
| `knowledge/` | 知识库 / RAG / 智能体子系统(自包含,最大模块) |
| `workflow/` | 工作流编排引擎(可视化节点图执行) |
| `evaluation/` | 评测(意图分类评估面板) |
| `system/` | 系统模块(用户/鉴权/通用) |
| `common/` | 通用基础设施(config / exception / utils) |
> 分层不是为了炫技,而是解决实际问题:`knowledge` 子系统内部进一步按 pipeline / retrieval / ingest / infra / mcp / intent / graph 分包,换模型供应商不用改业务代码,加检索通道不用动生成逻辑。
knowledge 模块完整结构(点击展开) · 后端最大子系统,RAG / 智能体 / 意图 / 图谱 / MCP 全部自包含于此
### 目录结构
```
knowledge/
├── pipeline/ # RAG 流水线引擎(按 @Order 自动装配)
│ └── stages/ # 11 个具体阶段(样例/改写/意图/检索/重排/生成…)
├── retrieval/ # 检索通道 + 后处理链(混合 / 去重 / MMR / RRF 融合)
├── ingest/ # 文档入库流水线(解析 / 分块 / 嵌入 / 索引)
│ ├── block/ # 基于版面的结构化分块(段落 / 标题 / 表格 / 代码…)
│ └── mineru/ # MinerU 复杂版面解析客户端封装
├── intent/ # 意图树 + 规则快路径 + LLM 分类 + 引导澄清
├── graph/ # 知识图谱(Neo4j 存储 + 抽取 + 检索通道)
├── infra/ # LLM / 嵌入 / 重排 基础设施
│ ├── chat/ # 模型客户端(路由 + 三态熔断 + 首包探测 + 流式)
│ └── model/ # 模型健康 / 路由选择 / 路由执行
├── mcp/ # MCP 工具注册中心 + 执行器
├── memory/ # 对话记忆(历史加载 + 摘要压缩)
├── agent/ # 智能体对话编排入口 + 评测
├── prompt/ # 提示词编排(场景路由 + 模板管理)
├── query/ # 查询改写 / 扩展 / 多子问题拆分
├── fallback/ # 模型兜底 / 降级策略
├── config/ # Spring Bean 装配与配置绑定
├── controller/ # REST 入口(各领域 HTTP 接口)
├── service/ + impl/ # 业务逻辑层(接口 + 实现)
├── mapper/ # MyBatis Mapper(各表 CRUD)
├── entity/ # 持久化实体(对应 26 张业务表)
├── vo/ # 出入参 DTO
├── validate/ # 入参校验(每场景一个 Validate 类)
└── common/ # 异常 + 全链路 Trace AOP
├── exception/ # RAG 统一异常
└── trace/ # @RagTraceNode 链路追踪切面
```
### 各目录职责
**流水线核心**
- `pipeline/` — `RagPipeline` 按 `@Order` 自动装配所有 stage;`PipelineStage` 定义 `CONTINUE` / `FALLBACK` / `COMPLETE` 契约;`PipelineContext` 贯穿各阶段共享上下文。
- `pipeline/stages/` — 11 个阶段:样例命中(5) → 改写拆分(10) → 意图分类(20/30) → 歧义澄清(40) → 引导(50) → 检索(60) → 重排(70) → 合并(80) → 生成(90);任一步可短路 `COMPLETE` 直返,异常走 `FallbackStage` 兜底。
**检索**
- `retrieval/` — `ConditionalRetrievalChannel` 接口 + `VectorKeywordHybridChannel`(向量+关键词)、`IntentDirectedChannel`(意图驱动);`HybridContentRetriever` 编排多通道;后处理链 `DeduplicationPostProcessor` / `MmrReranker` / `ParentExpansionPostProcessor` / `FusionPostProcessor`(RRF 融合)。
**入库**
- `ingest/` — `DocumentIngestService` 入库总服务;`AdaptiveDocumentSplitter` / `ParentChildSplitter` / `SpreadsheetRowSplitter` 分块策略;`MultimodalDocumentParser` / `ImageOcrService` 多模态解析;`KgEntityIndexer` / `SampleQueryIndexer` / `QuestionIndexer` 实体 / 样例 / 问答索引。
- `ingest/block/` — 基于版面的结构化切片:`Block` 抽象 + 段落 / 标题 / 列表 / 表格 / 图片 / 代码块,`BlockAwareChunker` 按结构分块并保留 `Provenance` 溯源。
- `ingest/mineru/` — MinerU 复杂 PDF 版面解析客户端封装(`MinerUClient` / `MinerUDocumentParser` / `MinerUImageDescriber` 等)。
**意图**
- `intent/` — `IntentNode` + `IntentTreeCacheManager` 意图树;`RuleBasedIntentRouter` 规则快路径(问候 / 闲聊零成本);`IntentClassifier` / `LlmIntentClassifier` 低温 LLM 分类;`AmbiguityChecker` / `VagueQueryClarifier` / `IntentGuidanceService` 歧义检测与引导澄清;`IntentSeedService` / `IntentEvalService` 种子生成与评测。
**知识图谱**
- `graph/` — `GraphRepository` 接口 + `Neo4jGraphRepository` / `NoopGraphRepository`(未配 Neo4j 兜底);`KnowledgeGraphChannel` 图谱检索通道并入 RAG;`GraphExtractionService` 实体关系抽取;`CommunityService` 社区检测(global 模式前置);`EntityDisambiguator` 实体消歧。
**模型基础设施**
- `infra/` — `LLMService` LLM 统一门面、`EmbeddingModelProvider` 嵌入模型解析、`TsVectorGenerator` 关键词检索向量生成。
- `infra/chat/` — 模型客户端:`RoutingLLMService` 路由入口 + `ModelSelector` 选模型 + `ModelHealthStore` 三态熔断 + `LlmFirstPacketProbe` 首包探测 + `StreamCallback` 流式回调;`OpenAICompatibleChatClient` / `OllamaChatClient` 具体实现。
- `infra/model/` — `ModelHealthStore` 健康状态(CLOSED / OPEN / HALF_OPEN)、`ModelSelector` 策略选模型、`ModelRoutingExecutor` 路由执行。
**工具与记忆**
- `mcp/` — `McpToolRegistry` 注册中心 + `McpToolService` 执行器 + `McpClientManager` 客户端管理;远程 MCP 工具经 `mcp_server` / `mcp_tool` 表接入。
- `memory/` — `ConversationMemoryService` / `ConversationMemoryStore` 历史加载 + `ConversationMemorySummaryService` 摘要压缩,长对话不超 Token。
**智能体与提示词**
- `agent/` — `AgentChatService` 智能体对话总入口(驱动 `RagPipeline`)、`AgentEvalService` 评测、`AgentRerankClient` 重排客户端。
- `prompt/` — `PromptPlanner` 提示词编排(KB_ONLY / MCP_ONLY / MIXED / EMPTY 场景路由)+ `PromptTemplateLoader` / `PromptTemplateManager` 模板管理。
- `query/` — `MultiQuestionRewriteService` 多子问题改写、`QueryExpansionTransformer` 查询扩展、`QueryTermMappingService` 词映射。
**兜底与配置**
- `fallback/` — `FallbackProvider` 接口 + `ModelFallbackProvider` / `FixedFallbackProvider` 模型降级兜底。
- `config/` — Spring Bean 装配与配置绑定:`RagProperties` / `AiModelProperties` / `AsyncConfig` / `LangChain4jConfig` / `McpBeansConfig` / `MinerUConfig` / `MinioConfig` / `KnowledgeGraphConfig` 等。
**支撑层(通用)**
- `controller/` — 各领域 REST 入口(知识库 / 文档 / 智能体 / 意图 / 图谱 / MCP / 样例 / 会话 / 模型 / 管线)。
- `service/` + `service/impl/` — 业务逻辑接口与实现。
- `mapper/` — MyBatis Mapper(22 张表 CRUD)。
- `entity/` — 持久化实体(对应 `KnowledgeBase` / `Chunk` / `IntentNode` / `KgEntity` / `SampleQuery` / `McpTool` / `AiModel` / `Conversation`… 等表)。
- `vo/` — 出入参 DTO(29 个)。
- `validate/` — 入参校验(38 个 Validate 类,每场景一个)。
- `common/exception/` — `RagException` RAG 统一异常。
- `common/trace/` — `RagTraceAspect` / `RagTraceNode` 全链路 Trace AOP 切面(每个环节耗时 / 输入输出记录)。

一次用户提问,在 SparkX 服务里经过的 RAG 核心链路如下:

### 检索引擎 / 模型容错 / 入库 Pipeline 详解
### 多路检索 + 后处理流水线
检索通道独立执行、互不影响,通过线程池并行调度;后处理器按顺序串联,像流水线一样逐步精炼结果。
- **检索通道**:`ConditionalRetrievalChannel`(接口,意图驱动是否启用)← `IntentDirectedChannel` / `VectorKeywordHybridChannel`(向量 + 关键词混合)
- **后处理器链**:`DeduplicationPostProcessor`(去重)→ `RerankPostProcessor`(重排)→ `MmrReranker`(MMR 去冗余)
- **父子扩展**:`ParentChildRetriever` 子块命中时扩展到父块,召回更完整上下文
- **多通道融合(RRF)**:`FusionPostProcessor` 按 `app.rag.fusion.*` 配置做 Reciprocal Rank Fusion
### 模型路由与三态熔断
生产环境不可能只依赖一个模型供应商。SparkX 的容错层解决的就是"模型不稳定怎么办":
```
RoutingLLMService(路由入口)
│
▼
ModelSelector(按策略选模型)
│
▼
多 Provider 客户端
┌──────────────────┬──────────────────┐
│ OpenAICompatible │ OllamaChat │
└──────────────────┴──────────────────┘
│
▼
ModelHealthStore(三态熔断:CLOSED → OPEN → HALF_OPEN)
│
▼
LlmFirstPacketProbe(首包探测,切换无感知)
```
每个模型独立维护健康状态。失败次数达阈值自动熔断,冷却期后进入半开放状态放行探测请求,探测成功恢复、失败继续熔断。配合优先级降级链,一个模型挂了自动切下一个候选。
### 文档入库 Pipeline
文档从上传到可检索,经过一条基于节点编排的 Pipeline:
```
fetch → parse → chunk → enrich → enhance → index
抓取 解析 分块 增强 优化 入库
```
- **解析**:Apache Tika / PDFBox / POI 多格式支持;PDF 复杂版面走 MinerU(自建 / 云端可配)
- **分块**:自适应分块(`adaptiveSplitter`)+ 父子分块(`parentChildSplitter`),按文档类型选择策略
- **入库**:`IngestionEngine` 跑节点图,每个任务和节点都有独立执行日志,出问题能精确定位到哪一步
### 设计模式实战
SparkX 不是为了用设计模式而用,每个模式都对应一个具体的工程问题:
| 设计模式 | 应用场景 | 解决的问题 |
|---|---|---|
| 策略模式 | 检索通道、后处理器、MCP 工具执行器 | 检索通道 / 后处理器 / 工具可插拔替换 |
| 模板方法 | Pipeline Stage 基类 | 阶段统一执行流程,子类只关注核心逻辑 |
| 责任链模式 | 后处理器链、模型降级链 | 多个处理步骤按顺序串联,灵活组合 |
| 装饰器模式 | 首包探测回调 | 不修改原有回调的前提下增加探测能力 |
| 注册表模式 | MCP 工具注册中心、意图节点注册表 | 组件自动发现与注册,新增工具零配置 |
| AOP | `@RagTraceNode` 链路追踪切面 | 追踪逻辑与业务代码解耦 |
### 跨会话持久记忆(原理预研,v2.0 暂不启用)
> ⚠️ **状态说明**:本节描述的 L3 跨会话持久记忆为**已完成原理验证与代码预研、但 v2.0 默认关闭**的能力(`app.rag.memory.persistent-enabled` 默认 `false`)。当前生产使用的是上文的 **L1 滑动窗口 + L2 话题摘要** 双层会话记忆。L3 机制计划在后续「编程智能体」场景正式启用。
**为什么 RAG 场景暂不启用**
普通 RAG 知识库问答的价值在「检索最新文档 → 基于文档回答」,记忆只是辅助:用户问"年假怎么算",不管记不记得他是法务部的张三,答案都是同一份文档。持久记忆能存的「用户画像 / 交互偏好」对检索质量几乎没影响,对生成质量影响也很小;而 RAG 对话又多为「查询 → 回答」的短交互,L1+L2 已能覆盖单会话内的多轮追问。因此在 RAG 场景下 L3 属于过度设计。
这套机制真正发挥价值的场景是**编程智能体**(对标 Claude Code / Cursor):跨会话记住「项目用了 MyBatis 不用 JPA」「昨天决定了用 X 架构」「踩过 N+1 查询的坑」——这些长期上下文直接决定生成质量,是刚需。届时将放开「不记答案」约束、调整分区定义后正式启用。
**预研的四层记忆体系(对标 Claude Code)**
| 层级 | 机制 | 隔离维度 | 生命周期 | v2.0 状态 | 对标 Claude Code |
|---|---|---|---|---|---|
| L1 滑动窗口 | 最近 N 轮原样消息 | conversationId | 单会话 | ✅ 启用 | verbatim tail |
| L2 话题摘要 | 本会话话题索引(只记话题不记答案) | conversationId | 单会话 | ✅ 启用 | 会话内 auto-compact |
| L3 持久记忆 | 跨会话长期事实(结构化 JSON) | agentId + adminId | 跨会话持久 | ⏸️ 预研完成,默认关闭 | CLAUDE.md + wU2 分区 |
| 系统提示词 | 智能体人设 / 角色 | agentId | 永久(人工编辑) | ✅ 启用 | 系统级指令 |
**预研的设计要点**(代码已就绪,启用时直接复用)
- **会话族隔离**:记忆 key = `pmem:{agentId}:{adminId}`,同一管理员在同一智能体下的所有会话共享一份持久记忆。
- **结构化分区**:固定四分区 JSON(用户画像 / 长期约束 / 已确认事实 / 交互偏好),对标 Claude Code 的 wU2 分区摘要。**只记长期事实,不记具体答案**,避免与实时 RAG 检索的最新文档冲突。
- **四重闸门节流**:全局开关 → 智能体开关 → 起步阈值(默认 8 轮)→ 间隔节流(默认每 6 轮才抽一次)。用户消息积累满 8 轮才首次抽取,之后每新增约 6 轮才再抽一次,把 LLM 调用压到极低频。复用 `rewriteModel` 小快模型降本,旧记忆增量合并去重。
- **评估数据零污染**:评估链路不触发抽取 + SQL 层显式排除 `:eval:` 探针会话,双重保障。
- **adminId 跨线程透传**:在 HTTP 线程捕获 adminId 后以方法参数(而非 ThreadLocal)传入异步线程,避开 `RequestContextHolder` 跨线程失效的坑。
```
启用后注入顺序(v2.0 默认不注入 L3):
messages = [
SystemMessage(人设) // agentId 固定
SystemMessage() // ★ L3 跨会话长期事实(当前跳过)
SystemMessage() // L2 本会话话题索引
...滑动窗口历史 // L1 最近 N 轮
UserMessage(当前问题 + 检索证据)
]
```
> 完整原理设计(Claude Code 记忆机制逆向、写入/注入双路径、增量合并算法、抽取提示词、与三种记忆方案对比)见 `xservice` 文档站《跨会话持久记忆设计》。
## ✨ 项目质量怎么样?
说一个平台是企业级,不能光靠嘴说,得看实际的工程质量。
### 1. 工程规范
- **分层架构**:`knowledge` 子系统内部按 pipeline / retrieval / ingest / infra / mcp / intent / graph / memory / fallback 分包,职责清晰,不存在基础设施代码和业务代码混在一起。
- **设计模式实战**:策略、模板方法、责任链、装饰器、注册表——每个都解决实际的扩展性或解耦问题。
- **配置即数据**:模型配置走 `ai_model` 表(页面可编辑,运行时动态读取覆盖 yml 默认值),而不是写死在配置文件里。
### 2. 可扩展性
衡量一个平台是否企业级的关键指标。SparkX 的核心模块都预留了扩展点:
- **新增检索通道**:实现 `ConditionalRetrievalChannel` 接口,注册为 Spring Bean,自动生效。
- **新增 RAG 阶段**:实现 `PipelineStage`,加 `@Component @Order(n)` 即自动并入流水线。
- **新增 MCP 工具**:通过 MCP 服务管理页面配置,原生支持 MCP 协议。
- **新增模型供应商**:实现 ChatClient 接口,配置候选列表即可参与路由。
> 不需要改框架代码,不需要改硬编码列表,加个实现类就完事了。这才是面向接口编程的正确打开方式。
### 3. 生产级特性
| 特性 | 说明 |
|:---|:---|
| **模型容错** | 多候选路由 + 三态熔断器 + 首包探测 + 优先级降级链 |
| **流式输出** | SSE 实时推送,首包探测保证模型切换时用户无感知 |
| **可观测性** | 基于 AOP 的全链路 Trace(`@RagTraceNode`),每个环节耗时、输入输出都有记录 |
| **会话管理** | 对话记忆(历史轮次 + 摘要压缩),不会因为轮次多了就 OOM 或 Token 爆炸 |
| **认证鉴权** | 基于 JWT 的用户认证体系,不是裸奔的 API |
| **对象存储** | MinIO 企业云盘,bucket `sparkx-drive` |
### 4. 数据库设计
26 张业务表,涵盖完整业务域:
- **知识库域**:`knowledge_base` `document` `chunks` `parent_chunks`(父子分块)`knowledge_question`
- **智能体域**:`knowledge_agent`(智能体配置)`t_chat_session` `t_chat_message`
- **对话记忆**:`t_conversation_message` `t_conversation_summary`(历史 + 摘要)
- **意图与样例**:`t_intent_node`(意图树)`sample_query` `sample_query_config`(样例查询)
- **入库流水线**:`t_ingestion_task_node` `t_ingestion_pipeline_node`
- **AI 模型**:`ai_model`(对话/向量/重排/视觉)`ext_service_config`(MinerU 等外部服务)
- **知识图谱**:`kg_config` `kg_entity` `kg_extraction_record`
- **MCP**:`mcp_server` `mcp_tool`
- **工作流**:`workflow` `workflow_runtime` `workflow_runtime_context`
> 数据库是 PostgreSQL(带 vector 扩展),不是 MySQL。向量检索直接用 PgSQL 的 vector 能力,无需额外引入向量数据库。
### 5. 完整控制台
SparkX 提供完整的可视化管理后台,覆盖智能体开发的全生命周期。
#### 智能体管理
支持配置智能体的知识库范围(全部 / 指定 / 无)、对话模型、提示词、欢迎语、建议问题、检索参数(TopK / 向量阈值 / 关键词阈值)、重排参数、改写模型、兜底策略。

#### 知识库
文档上传、分块管理、命中测试、问答对管理、入库流水线监控。

#### AI 模型配置
统一管理对话 / 向量 / 重排 / 视觉四类模型,支持 OpenAI 兼容接口与 Ollama 自建模型。

#### MCP 工具
配置 MCP 服务,让 AI 自由调用外部业务工具。

#### 可视化编排
基于 AntV X6 的流程编排引擎,让多个 Agent 按节点图协同工作。

#### 对话调试
实时 SSE 流式对话调试,查看引用来源、各阶段耗时。

#### 知识图谱

## 🛠️ 技术架构
**后端**:Java 17 + Spring Boot 3.4 + MyBatis-Plus + LangChain4j 1.18 + PostgreSQL(vector) + Redis(Redisson) + MinIO + SSE
**前端**:Vue 3 + TypeScript + Vite + Naive UI + Alova(HTTP) + AntV X6(编排)
**AI 能力**:LangChain4j(模型统一封装)+ langchain4j-mcp(MCP 协议)+ langchain4j-community-neo4j(知识图谱)+ Apache Tika/PDFbox/POI(文档解析)+ HanLP(中文分词)
```
本地开发建议版本
Java 17、Node.js v22.17.0、NPM 10.9.2、PgSQL 15、Navicat Premium Lite 17
未提及的,可以使用任意版本或者项目中已经约定了版本。
```
### 核心依赖一览
| 依赖 | 版本 | 用途 |
|---|---|---|
| Spring Boot | 3.4.13 | Web 框架 |
| LangChain4j | 1.18.1 | 大模型统一封装 |
| langchain4j-mcp | 1.18.1-beta28 | MCP 协议集成 |
| langchain4j-community-neo4j | 1.18.0-beta28 | 知识图谱 |
| MyBatis-Plus | 3.5.7 | ORM |
| Redisson | 3.31.0 | 分布式锁 / 缓存 |
| MinIO | 8.5.12 | 对象存储 |
| HanLP | portable-1.8.6 | 中文分词 |
| TransmittableThreadLocal | 2.14.5 | 跨线程上下文透传 |
## 🚀 快速开始
### 1. 下载源码
```bash
git clone https://gitee.com/shop-sparker/spark-x.git
```
### 2. Docker 一键启动
```bash
cd spark-x/docker
docker compose up -d
```
会自动拉起:后端(sparkx-server)+ 前端(Nginx)+ PostgreSQL + Redis + MinIO。
### 3. 访问
```
http://localhost:8189
```
账号 `admin`
密码 `123456`
## 📖 使用手册
完整使用文档:https://x.sparkshop.cn/
## 🤝 交流群

#### 了解更多细节可咨询

## 📄 版权信息
> 本仓库采用 SparkX 自有商用授权;顶部 Apache-2.0 徽章仅作展示,不代表实际许可范围。具体权利与义务以下列条款为准。
1. 允许用于个人学习、毕业设计、教学案例、公益事业、商业使用。
2. 如果商用必须保留版权信息,请自觉遵守。
3. 不允许将本项目改造为 SaaS / 云托管服务对外提供。
4. 如需去除版权信息请获取商业授权,请联系官方微信:`SparkXAI`。
---
如果觉得项目还不错,点个 Star 支持一下!