diff --git a/pom.xml b/pom.xml
index 1d22c4c..7054ec9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -50,6 +50,11 @@
org.springframework.ai
spring-ai-starter-model-openai
+
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-starter-dashscope
+
@@ -79,6 +84,13 @@
pom
import
+
+ com.alibaba.cloud.ai
+ spring-ai-alibaba-bom
+ 1.0.0.4
+ pom
+ import
+
diff --git a/src/main/java/com/hanserwei/airobot/controller/DashscopeAIController.java b/src/main/java/com/hanserwei/airobot/controller/DashscopeAIController.java
new file mode 100644
index 0000000..86984f9
--- /dev/null
+++ b/src/main/java/com/hanserwei/airobot/controller/DashscopeAIController.java
@@ -0,0 +1,59 @@
+package com.hanserwei.airobot.controller;
+
+import com.alibaba.cloud.ai.dashscope.chat.DashScopeChatModel;
+import com.hanserwei.airobot.model.AIResponse;
+import jakarta.annotation.Resource;
+import org.springframework.ai.chat.client.ChatClient;
+import org.springframework.ai.chat.model.Generation;
+import org.springframework.http.MediaType;
+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("/v6/ai")
+public class DashscopeAIController {
+
+ @Resource
+ private DashScopeChatModel dashScopeChatModel;
+
+ /**
+ * 普通对话
+ *
+ * @param message 对话输入内容
+ * @return 对话结果
+ */
+ @GetMapping("/generate")
+ public String generate(@RequestParam(value = "message", defaultValue = "你是谁?") String message) {
+ // 一次性返回结果
+ ChatClient chatClient = ChatClient.builder(dashScopeChatModel).build();
+ return chatClient.prompt()
+ .user(message)
+ .call()
+ .content();
+ }
+
+ /**
+ * 流式对话
+ *
+ * @param message 对话输入内容
+ * @return 对话结果
+ */
+ @GetMapping(value = "/generateStream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+ public Flux generateStream(@RequestParam(value = "message", defaultValue = "你是谁?") String message) {
+ ChatClient chatClient = ChatClient.builder(dashScopeChatModel).build();
+ return chatClient.prompt()
+ .user(message)
+ .stream()
+ .chatResponse()
+ .mapNotNull(
+ chatResponse -> {
+ Generation generation = chatResponse.getResult();
+ String text = generation.getOutput().getText();
+ return AIResponse.builder().v(text).build();
+ }
+ );
+ }
+}
diff --git a/src/main/java/com/hanserwei/airobot/controller/OpenAIController.java b/src/main/java/com/hanserwei/airobot/controller/OpenAIController.java
index 04cb942..cbe1ed6 100644
--- a/src/main/java/com/hanserwei/airobot/controller/OpenAIController.java
+++ b/src/main/java/com/hanserwei/airobot/controller/OpenAIController.java
@@ -12,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
-import java.util.Objects;
-
@RestController
@RequestMapping("/v5/ai")
public class OpenAIController {
diff --git a/src/main/java/com/hanserwei/airobot/model/AIResponse.java b/src/main/java/com/hanserwei/airobot/model/AIResponse.java
new file mode 100644
index 0000000..2a53df5
--- /dev/null
+++ b/src/main/java/com/hanserwei/airobot/model/AIResponse.java
@@ -0,0 +1,15 @@
+package com.hanserwei.airobot.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class AIResponse {
+ // 流式响应内容
+ private String v;
+}
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 235ec2e..65068d9 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -30,6 +30,12 @@ spring:
options:
model: gpt-4o # 模型名称
temperature: 0.7 # 温度值
+ dashscope:
+ api-key: ENC(cMgcKZkFllyE88DIbGwLKot9Vg02co+gsmY8L8o4/o3UjhcmqO4lJzFU35Sx0n+qFG8pDL0wBjoWrT8X6BuRw9vNlQhY1LgRWHaF9S1zzyM=)
+ chat:
+ options:
+ model: qwen-plus
+ temperature: 0.7
jasypt:
encryptor: