From fadd140cbe93a7fe02f8feda1d2d7d002fba02ce Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Mon, 2 Jun 2025 18:37:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E5=9C=B0=E5=9B=BE=20MCP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 7 ++++++ .../aiagent/controller/ResController.java | 23 +++++++++++++++++++ src/main/resources/application.yml | 4 ++++ 3 files changed, 34 insertions(+) diff --git a/pom.xml b/pom.xml index e3a775e..ac9ce42 100644 --- a/pom.xml +++ b/pom.xml @@ -140,6 +140,13 @@ 9.1.0 test + + + org.springframework.ai + spring-ai-mcp-client-spring-boot-starter + 1.0.0-M6 + + diff --git a/src/main/java/com/huangge1199/aiagent/controller/ResController.java b/src/main/java/com/huangge1199/aiagent/controller/ResController.java index 01b7fb6..122d2cf 100644 --- a/src/main/java/com/huangge1199/aiagent/controller/ResController.java +++ b/src/main/java/com/huangge1199/aiagent/controller/ResController.java @@ -1,10 +1,13 @@ package com.huangge1199.aiagent.controller; import com.huangge1199.aiagent.common.R; +import com.huangge1199.aiagent.config.MyLoggerAdvisor; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.chat.model.ChatResponse; +import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.core.ParameterizedTypeReference; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -34,6 +37,11 @@ public class ResController { record ActorFilms(String actor, List movies) { } + // AI 调用 MCP 服务 + + @Resource + private ToolCallbackProvider toolCallbackProvider; + @PostMapping("/chatRes") @Operation(summary = "返回 ChatResponse") public R chatResRes(@RequestBody String question) { @@ -85,4 +93,19 @@ public class ResController { .chatResponse(); return R.ok(output); } + + @PostMapping("/doChatWithMcp") + @Operation(summary = "使用mcp返回会话") + public R doChatWithMcp(@RequestBody String question) { + ChatResponse chatResponse = chatClient + .prompt() + .user(question) + // 开启日志,便于观察效果 + .advisors(new MyLoggerAdvisor()) + .tools(toolCallbackProvider) + .call() + .chatResponse(); + String content = chatResponse.getResult().getOutput().getText(); + return R.ok(content); + } } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 92f3a5c..2c51b80 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -18,6 +18,10 @@ spring: distance-type: COSINE_DISTANCE dimensions: 1536 max-document-batch-size: 10000 + mcp: + client: + stdio: + servers-configuration: classpath:mcp-servers.json server: port: 8123 servlet: