From 5bfa65bc0b2a0a01f0e6396d4dd8e50b25949137 Mon Sep 17 00:00:00 2001
From: Hanserwei <2628273921@qq.com>
Date: Thu, 23 Oct 2025 14:27:38 +0800
Subject: [PATCH] =?UTF-8?q?feat(ai):=20=E9=9B=86=E6=88=90=E9=98=BF?=
=?UTF-8?q?=E9=87=8C=E4=BA=91DashScope=20AI=E6=A8=A1=E5=9E=8B=E6=94=AF?=
=?UTF-8?q?=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增DashScope AI配置项,支持qwen-plus模型
- 添加AIResponse数据模型用于流式响应
- 实现普通对话和流式对话两个接口
- 引入spring-ai-alibaba-starter-dashscope依赖
- 更新OpenAIController移除无用导入
- 在pom.xml中添加spring-ai-alibaba-bom管理依赖版本
---
pom.xml | 12 ++++
.../controller/DashscopeAIController.java | 59 +++++++++++++++++++
.../airobot/controller/OpenAIController.java | 2 -
.../hanserwei/airobot/model/AIResponse.java | 15 +++++
src/main/resources/application.yml | 6 ++
5 files changed, 92 insertions(+), 2 deletions(-)
create mode 100644 src/main/java/com/hanserwei/airobot/controller/DashscopeAIController.java
create mode 100644 src/main/java/com/hanserwei/airobot/model/AIResponse.java
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: