Spring AI MCP查询业务数据

59 阅读1分钟

背景:调用服务实现特定功能

此次演示为demo版,大家可根据需求自定义!

步骤一:服务端模块

基于响应式编程实现,教大家一个绝招,查询依赖底层,可以轻松的解决依赖冲突问题,如下:

image.png

image.png

image.png

最外层的pom.xml引入的不过是层层封装,定义为已有的,如遇到多个依赖冲突,则可以以下方法:

<!--举例说明-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.github.victools</groupId>
            <artifactId>jsonschema-generator</artifactId>
    	</exclusion>
    </exclusions>
</dependency>

[1]pom.xml

<!--核心依赖-->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId>
    <version>${spring-ai.version}</version>
</dependency>

[2]application.yml

spring:
  main:
    banner-mode: off
  ai:
    mcp:
      server:
        name: my-meeting-server
        version: 0.0.1

server:
  port: 9091

[3]MeetingReservationService

@Service
@Slf4j
public class MeetingReservationService {
    /**
     * 查询会议
     *
     * @return
     */
    @Tool(name = "meeting_getMeetingInfo",  description = "查询用户会议")
    public String getMeetingInfo() {
        return "当前用户会议内容: 用户张三,会议室101";
    }

    /**
     * 预约会议
     *
     * @return
     */
    @Tool(name = "meeting_addMeetingRecord", description = "预约会议")
    public String addMeetingRecord() {
        return "会议预约成功";
    }
}

由于是简易版,大家可自定义方法,在方法中编写业务代码!

[4]MyMcpServerApplication

@SpringBootApplication
@ComponentScan(basePackages = {"org.springframework.ai.mcp.sample.service"})
public class MyMcpServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyMcpServerApplication.class, args);
    }

    @Bean
    public ToolCallbackProvider meetingTools(MeetingReservationService meetingReservationService) {
        return MethodToolCallbackProvider.builder()
                .toolObjects(meetingReservationService)
                .build();
    }
}

使用Bean注解实现服务注册,类似于微服务的Nacos、Eureka组件

步骤二:客户端模块

[1]pom.xml

<!--核心依赖-->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId>
    <version>${spring-ai.version}</version>
</dependency>

[2]application.yml

server:
  port: 9092

spring:
  application:
    name: mcp-client
  ai:
    dashscope:
      api-key: 个人key
      chat:
        options:
          model: qwen-max
    mcp:
      client:
        enabled: true
        name: meeting-assistant
        version: 1.0.0
        request-timeout: 30s
        type: ASYNC
        sse:
          connections:
            server1:
              url: http://ip:server模块的port

[3]TestController

@RestController
@RequestMapping("/mcpT")
public class TestController {
    @Autowired
    private ChatModel chatModel;

    @Autowired
    private ToolCallbackProvider toolCallbackProvider;

    @GetMapping("/test")
    public String mcpTest(@RequestParam(value = "input") String input) {
        ChatClient chatClient = ChatClient.builder(chatModel)
                .defaultTools(toolCallbackProvider)
                .build();
        return chatClient.prompt(new Prompt(input)).call().content();
    }
}

步骤三:测试

image.png

接口测试

image.png

image.png

至此,简易版的demo已完成

问题记录

客户端配置信息不完整,错误记录如下

image.png

原因如下:

image.png

更改后,启动成功

image.png

本人正在打造技术交流群,欢迎志同道合的朋友一起探讨,一起努力,通过自己的努力,在技术岗位这条道路上走得更远。QQ群号:925317809 备注:技术交流 即可通过!