diff --git a/pom.xml b/pom.xml
index 462eee0..d93520b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,6 +15,7 @@
21
1.0.3
+ 3.19.0
@@ -39,6 +40,12 @@
spring-boot-starter-test
test
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
diff --git a/src/main/java/com/hanserwei/airobot/controller/DeepSeekChatController.java b/src/main/java/com/hanserwei/airobot/controller/DeepSeekChatController.java
index 12b66fb..5e1ab0e 100644
--- a/src/main/java/com/hanserwei/airobot/controller/DeepSeekChatController.java
+++ b/src/main/java/com/hanserwei/airobot/controller/DeepSeekChatController.java
@@ -1,11 +1,14 @@
package com.hanserwei.airobot.controller;
import jakarta.annotation.Resource;
+import org.springframework.ai.chat.messages.UserMessage;
+import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.deepseek.DeepSeekChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/ai")
@@ -25,4 +28,19 @@ public class DeepSeekChatController {
return chatModel.call(message);
}
+ /**
+ * 流式对话
+ * @param message 对话输入内容
+ * @return 对话结果
+ */
+ @GetMapping(value = "/generateStream", produces = "text/html;charset=utf-8")
+ public Flux generateStream(@RequestParam(value = "message", defaultValue = "你是谁?") String message) {
+ // 构建提示词
+ Prompt prompt = new Prompt(new UserMessage(message));
+
+ // 流式输出
+ return chatModel.stream(prompt)
+ .mapNotNull(chatResponse -> chatResponse.getResult().getOutput().getText());
+ }
+
}
\ No newline at end of file
diff --git a/src/main/java/com/hanserwei/airobot/controller/DeepSeekR1ChatController.java b/src/main/java/com/hanserwei/airobot/controller/DeepSeekR1ChatController.java
new file mode 100644
index 0000000..ff4ced5
--- /dev/null
+++ b/src/main/java/com/hanserwei/airobot/controller/DeepSeekR1ChatController.java
@@ -0,0 +1,49 @@
+package com.hanserwei.airobot.controller;
+
+import jakarta.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.ai.chat.messages.UserMessage;
+import org.springframework.ai.chat.prompt.Prompt;
+import org.springframework.ai.deepseek.DeepSeekAssistantMessage;
+import org.springframework.ai.deepseek.DeepSeekChatModel;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Flux;
+
+@RestController
+@RequestMapping("/v1/ai")
+public class DeepSeekR1ChatController {
+
+ @Resource
+ private DeepSeekChatModel chatModel;
+
+ /**
+ * 流式对话
+ * @param message 对话输入内容
+ * @return 对话结果
+ */
+ @GetMapping(value = "/generateStream", produces = "text/html;charset=utf-8")
+ public Flux generateStream(@RequestParam(value = "message", defaultValue = "你是谁?") String message) {
+ // 构建提示词
+ Prompt prompt = new Prompt(new UserMessage(message));
+
+ // 流式输出
+ return chatModel.stream(prompt)
+ .mapNotNull(chatResponse -> {
+ // 获取响应内容
+ DeepSeekAssistantMessage deepSeekAssistantMessage = (DeepSeekAssistantMessage) chatResponse.getResult().getOutput();
+ // 推理内容
+ String reasoningContent = deepSeekAssistantMessage.getReasoningContent();
+ // 推理结束后的正式回答
+ String text = deepSeekAssistantMessage.getText();
+
+ // 若推理内容有值,则响应推理内容,否则,说明推理结束了,响应正式回答
+ return StringUtils.isNotBlank(reasoningContent) ? reasoningContent : text;
+ });
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 04a8fe6..3be31b2 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -8,7 +8,7 @@ spring:
base-url: https://api.deepseek.com # DeepSeek 的请求 URL, 可不填,默认值为 api.deepseek.com
chat:
options:
- model: deepseek-chat # 使用哪个模型
+ model: deepseek-reasoner # 使用哪个模型
temperature: 0.8 # 温度值
jasypt:
encryptor: