diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index 3cea655c09a004ef8fcbd89534ac4334c0b08902..8470d759e504410655a1bd046f90cb66f6deb9db 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -20,7 +20,7 @@ services:
retries: 10
backend:
- image: crpi-35xwxmfks2ouwnqn.cn-shanghai.personal.cr.aliyuncs.com/sparkx/sparkx-backend:1.1.1
+ image: crpi-35xwxmfks2ouwnqn.cn-shanghai.personal.cr.aliyuncs.com/sparkx/sparkx-backend:1.1.2
container_name: sparkx-backend
depends_on:
postgres:
@@ -33,7 +33,7 @@ services:
- "8989:8989"
frontend:
- image: crpi-35xwxmfks2ouwnqn.cn-shanghai.personal.cr.aliyuncs.com/sparkx/sparkx-frontend:1.1.1
+ image: crpi-35xwxmfks2ouwnqn.cn-shanghai.personal.cr.aliyuncs.com/sparkx/sparkx-frontend:1.1.2
container_name: sparkx-frontend
ports:
- "8189:80"
diff --git a/docker/sql/sparkx.sql b/docker/sql/sparkx.sql
index 1360072ac2089299c76bc8dd1182e677eb98a91f..f7cd7c1f9507359cd8c85f73d3d5b1ea4261b027 100644
--- a/docker/sql/sparkx.sql
+++ b/docker/sql/sparkx.sql
@@ -404,6 +404,8 @@ INSERT INTO "public"."models" VALUES ('6f4f2e21-df9d-419d-a65b-ed272b6cf5c8', '
INSERT INTO "public"."models" VALUES ('6f6f2e81-eg9b-429d-a57b-ed371g6cf8c9', 'Ollama', 'ollama', 1, '[{"field":"apiKey","value":"SparkX"}]', '[{"field":"temperature","name":"温度","range":[0.01,1],"value":0.95},{"field":"url","name":"模型地址","value": "http://localhost:11434"}]', 1, '', '/icons/ollama.png', '', NULL, '2025-07-29 12:05:50');
INSERT INTO "public"."models" VALUES ('6f6f2e88-eg9c-429e-a58b-ed381g6cf9c9', 'Ollama', 'ollama', 2, '[{"field":"apiKey","value":"SparkX"}]', '[{"field":"temperature","name":"温度","range":[0.01,1],"value":0.95},{"field":"url","name":"模型地址","value": "http://localhost:11434"}]', 1, '', '/icons/ollama.png', '', NULL, '2025-07-29 12:05:50');
INSERT INTO "public"."models" VALUES ('6f6f2e89-eg9f-439e-a68b-ed382g7cf9e9', 'Ollama', 'ollama', 3, '[{"field":"apiKey","value":"SparkX"}]', '[{"field":"temperature","name":"温度","range":[0.01,1],"value":0.95},{"field":"url","name":"模型地址","value": "http://localhost:11434"}]', 1, '', '/icons/ollama.png', '', NULL, '2025-07-29 12:05:50');
+INSERT INTO "public"."models" VALUES ('5f6f2e81-ef9b-419d-a56b-ed271g6cf6c9', 'DeepSeek', 'deepseek', 1, '[{"field":"apiKey","value":""}]', '[{"field":"temperature","name":"温度","range":[0.01,1],"value":0.95},{"field":"url","name":"模型地址","value": "https://api.deepseek.com/v1"}]', 1, 'deepseek-chat,deepseek-reasoner', '/icons/deepseek.png', 'deepseek-chat', NULL, '2025-07-29 12:05:50');
+INSERT INTO "public"."models" VALUES ('4f6f2e82-ef9c-439d-a57b-ed271g6cf8c9', '模力方舟', 'gitee', 1, '[{"field":"apiKey","value":""}]', '[{"field":"temperature","name":"温度","range":[0.01,1],"value":0.95},{"field":"url","name":"模型地址","value":"https://ai.gitee.com/v1"}]', 1, 'kimi-k2-instruct,internlm3-8b-instruct,Qwen3-235B-A22B', '/icons/gitee.png', '', NULL, '2025-07-30 16:26:00');
CREATE TABLE "public"."application_workflow" (
"id" INT8 NOT NULL GENERATED ALWAYS AS IDENTITY (INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1),
diff --git a/server/pom.xml b/server/pom.xml
index 54f1b474362a3e81f1cf97fdcb6884f8a850ae36..085d1845f57320dfca7fb39998a7f905b2063add 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -5,7 +5,7 @@
cn.sparkshop.ai
cn.sparkshop
- 1.1.1
+ 1.1.2
pom
SparkX
基于大语言模型和 RAG 的知识库问答系统。开箱即用、模型中立、灵活编排,支持快速嵌入到第三方业务系统。
@@ -22,7 +22,7 @@
true
17
5.8.26
- 1.1.1
+ 1.1.2
1.18.24
3.4.2
3.5.10.1
@@ -31,13 +31,13 @@
3.5.10.1
9.0.0.CR1
2.18.2
- 1.1.0
+ 1.2.0
1.1.0-beta7
0.64.8
portable-1.8.6
3.1.0
2.9.0
- 1.1.0-rc1
+ 1.2.0
1.21.3
@@ -126,6 +126,13 @@
${langchain4j.version}
+
+ dev.langchain4j
+ langchain4j-core
+ ${langchain4j.version}
+ compile
+
+
dev.langchain4j
langchain4j-document-parser-apache-pdfbox
diff --git a/server/sparkx-common/pom.xml b/server/sparkx-common/pom.xml
index a9e425dfbaea266446cc5412d3713df8d1cde65a..134dde65a98c5b2e965b5f9ddb655a3c7b71b88c 100644
--- a/server/sparkx-common/pom.xml
+++ b/server/sparkx-common/pom.xml
@@ -5,11 +5,11 @@
cn.sparkshop.ai
cn.sparkshop
- 1.1.1
+ 1.1.2
sparkx-common
- 1.1.1
+ 1.1.2
jar
diff --git a/server/sparkx-service/pom.xml b/server/sparkx-service/pom.xml
index 356454f800a12d955d0e54a66a9d53d3816fb5dd..8d83081abdcb479a4ea44af3bacafa5c90855194 100644
--- a/server/sparkx-service/pom.xml
+++ b/server/sparkx-service/pom.xml
@@ -5,11 +5,11 @@
cn.sparkshop.ai
cn.sparkshop
- 1.1.1
+ 1.1.2
sparkx-service
- 1.1.1
+ 1.1.2
jar
@@ -126,6 +126,11 @@
com.squareup.retrofit2
converter-jackson
+
+
+ dev.langchain4j
+ langchain4j-core
+
diff --git a/server/sparkx-service/src/main/java/sparkx/service/helper/SseEmitterHelper.java b/server/sparkx-service/src/main/java/sparkx/service/helper/SseEmitterHelper.java
index bf74be2240084e310fac0d48ee91cf9ffccd1005..2fdb9c0e00f1efe02da50f006bfa2d382023bf2c 100644
--- a/server/sparkx-service/src/main/java/sparkx/service/helper/SseEmitterHelper.java
+++ b/server/sparkx-service/src/main/java/sparkx/service/helper/SseEmitterHelper.java
@@ -12,6 +12,7 @@ package sparkx.service.helper;
import cn.hutool.core.date.TimeInterval;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
+import dev.langchain4j.model.chat.response.PartialThinking;
import dev.langchain4j.service.TokenStream;
import dev.langchain4j.service.tool.ToolExecution;
import lombok.extern.slf4j.Slf4j;
@@ -25,6 +26,7 @@ import sparkx.service.extend.workflow.SendEndCallback;
import java.io.IOException;
import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
@Slf4j
@Component
@@ -45,11 +47,14 @@ public class SseEmitterHelper {
// 消息开始
sendStartSse(emitter);
+ AtomicBoolean hasReasoningContent = new AtomicBoolean(false); // 是否有思考过程
+ AtomicBoolean hasSendStart = new AtomicBoolean(false); // 是有发送了思考开始标识
+ AtomicBoolean hasSendEnd = new AtomicBoolean(false); // 是否发送了思考结束标识
final TimeInterval timer = new TimeInterval();
tokenStream
+ // 整理并转换召回的片段数据,返回前端
.onRetrieved((retrievedList) -> {
- // 整理并转换召回的片段数据,返回前端
List