From 5b2d1988dafa7fd5c653e81ae4864929c4e4ab33 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Sat, 17 May 2025 09:31:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=80=BC=EF=BC=9AAI=E5=A4=A7=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B=E6=8E=A5=E5=85=A5-Spring=20AI=E6=8E=A5=E5=85=A5=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=9AAI=E5=A4=A7=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=8E=A5=E5=85=A5-http=E5=92=8Csdk=E6=B5=8B=E8=AF=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=BF=94=E5=9B=9E=E7=B1=BB=E5=9E=8B=E6=94=B9=E4=B8=BA?= =?UTF-8?q?JSONObject=EF=BC=8C=E4=BE=BF=E4=BA=8E=E6=9F=A5=E7=9C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 19 +++++++++++++ .../aiagent/Service/InvokeService.java | 7 +++-- .../Service/impl/InvokeServiceImpl.java | 27 ++++++++++++++----- .../controller/invoke/InvokeController.java | 22 +++++++++++---- 4 files changed, 62 insertions(+), 13 deletions(-) diff --git a/pom.xml b/pom.xml index f208525..023b8cd 100644 --- a/pom.xml +++ b/pom.xml @@ -81,8 +81,27 @@ dashscope-sdk-java 2.20.0 + + + com.alibaba.cloud.ai + spring-ai-alibaba-starter + 1.0.0-M6.1 + + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + diff --git a/src/main/java/com/huangge1199/aiagent/Service/InvokeService.java b/src/main/java/com/huangge1199/aiagent/Service/InvokeService.java index e758c00..a6fa4ea 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/InvokeService.java +++ b/src/main/java/com/huangge1199/aiagent/Service/InvokeService.java @@ -1,5 +1,6 @@ package com.huangge1199.aiagent.Service; +import cn.hutool.json.JSONObject; import com.alibaba.dashscope.aigc.generation.GenerationResult; import com.alibaba.dashscope.exception.InputRequiredException; import com.alibaba.dashscope.exception.NoApiKeyException; @@ -11,7 +12,9 @@ import com.alibaba.dashscope.exception.NoApiKeyException; * @since 2025/5/14 13:27:08 */ public interface InvokeService { - GenerationResult callWithMessage() throws NoApiKeyException, InputRequiredException; + JSONObject callWithMessage(String question) throws NoApiKeyException, InputRequiredException; - String getMsgByHttp(String question); + JSONObject getMsgByHttp(String question); + + String getMsgBySpringAi(String question); } diff --git a/src/main/java/com/huangge1199/aiagent/Service/impl/InvokeServiceImpl.java b/src/main/java/com/huangge1199/aiagent/Service/impl/InvokeServiceImpl.java index f2b910b..d759586 100644 --- a/src/main/java/com/huangge1199/aiagent/Service/impl/InvokeServiceImpl.java +++ b/src/main/java/com/huangge1199/aiagent/Service/impl/InvokeServiceImpl.java @@ -5,14 +5,18 @@ import java.util.Arrays; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.alibaba.dashscope.aigc.generation.Generation; import com.alibaba.dashscope.aigc.generation.GenerationParam; -import com.alibaba.dashscope.aigc.generation.GenerationResult; import com.alibaba.dashscope.common.Message; import com.alibaba.dashscope.common.Role; import com.alibaba.dashscope.exception.InputRequiredException; import com.alibaba.dashscope.exception.NoApiKeyException; import com.huangge1199.aiagent.Service.InvokeService; +import jakarta.annotation.Resource; +import org.springframework.ai.chat.messages.AssistantMessage; +import org.springframework.ai.chat.model.ChatModel; +import org.springframework.ai.chat.prompt.Prompt; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -28,8 +32,11 @@ public class InvokeServiceImpl implements InvokeService { @Value("${bailian.API-KEY}") private String baiLianKey; + @Resource + private ChatModel dashscopeChatModel; + @Override - public GenerationResult callWithMessage() throws NoApiKeyException, InputRequiredException { + public JSONObject callWithMessage(String question) throws NoApiKeyException, InputRequiredException { Generation gen = new Generation(); Message systemMsg = Message.builder() .role(Role.SYSTEM.getValue()) @@ -37,7 +44,7 @@ public class InvokeServiceImpl implements InvokeService { .build(); Message userMsg = Message.builder() .role(Role.USER.getValue()) - .content("你是谁?") + .content(question) .build(); GenerationParam param = GenerationParam.builder() // 若没有配置环境变量,请用百炼API Key将下行替换为:.apiKey("sk-xxx") @@ -47,11 +54,11 @@ public class InvokeServiceImpl implements InvokeService { .messages(Arrays.asList(systemMsg, userMsg)) .resultFormat(GenerationParam.ResultFormat.MESSAGE) .build(); - return gen.call(param); + return JSONUtil.parseObj(gen.call(param)); } @Override - public String getMsgByHttp(String question) { + public JSONObject getMsgByHttp(String question) { // API URL String url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation"; @@ -89,6 +96,14 @@ public class InvokeServiceImpl implements InvokeService { .execute(); // 获取响应内容 - return response.body(); + return JSONUtil.parseObj(response.body()); + } + + @Override + public String getMsgBySpringAi(String question) { + AssistantMessage output = dashscopeChatModel.call(new Prompt(question)) + .getResult() + .getOutput(); + return output.getText(); } } diff --git a/src/main/java/com/huangge1199/aiagent/controller/invoke/InvokeController.java b/src/main/java/com/huangge1199/aiagent/controller/invoke/InvokeController.java index 9794a30..7ebbd96 100644 --- a/src/main/java/com/huangge1199/aiagent/controller/invoke/InvokeController.java +++ b/src/main/java/com/huangge1199/aiagent/controller/invoke/InvokeController.java @@ -1,5 +1,6 @@ package com.huangge1199.aiagent.controller.invoke; +import cn.hutool.json.JSONObject; import com.alibaba.dashscope.aigc.generation.GenerationResult; import com.alibaba.dashscope.exception.ApiException; import com.alibaba.dashscope.exception.InputRequiredException; @@ -31,10 +32,10 @@ public class InvokeController { @PostMapping("/sdk") @Operation(summary = "sdk接入") - public R sdkAiInvoke() { + public R sdkAiInvoke(@RequestBody String question) { try { - GenerationResult result = invokeService.callWithMessage(); - return R.ok(JsonUtils.toJson(result)); + JSONObject result = invokeService.callWithMessage(question); + return R.ok(result); } catch (ApiException | NoApiKeyException | InputRequiredException e) { return R.fail(e.getMessage()); } @@ -42,9 +43,20 @@ public class InvokeController { @PostMapping("/http") @Operation(summary = "http接入") - public R httpAiInvoke(@RequestBody String question) { + public R httpAiInvoke(@RequestBody String question) { try { - String result = invokeService.getMsgByHttp(question); + JSONObject result = invokeService.getMsgByHttp(question); + return R.ok(result); + } catch (ApiException e) { + return R.fail(e.getMessage()); + } + } + + @PostMapping("/springAi") + @Operation(summary = "spring ai 接入") + public R springAiInvoke(@RequestBody String question) { + try { + String result = invokeService.getMsgBySpringAi(question); return R.ok(result); } catch (ApiException e) { return R.fail(e.getMessage());