需求背景
需求分析
目前存在一个需求,需要使用ai辅助用户使用特定产品需求,当前已有产品为为传统产品,需改造为使用聊天交互的方式使用。
示例:今天午饭的预算为100,想订一个麻辣烫,预计12点送达。
自动调用我们定制的个性化服务,返回用户想要的数据。
实现的demo
问题:我的投档分数为500,预计的院校要求投档最低分为480,求概率。
智能体回复内容:
其中,计算的概率为我们应用自行实现,并拒绝除此功能外的回答。
一、mcp搭建
1.1 环境
jdk17、springboot3.2、Trae
1.2 mcp配置
spring AI依赖共计三种方式。
1、支持STDIO(标准流)传输的核心服务器
spring-ai-starter-mcp-server
2、基于Spring MVC的SSE传输实现
spring-ai-starter-mcp-server-webmvc
3、基于Spring WebFlux的SSE传输实现
spring-ai-starter-mcp-server-webflux
二、上代码
talk is cheap, show me your code。
2.1 pom依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.hippo.spring.tools.ai</groupId>
<artifactId>springboot-ai-demos</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.hippo.spring.tools.ai.springai.mcp</groupId>
<artifactId>springai-mcp-server-demo</artifactId>
<packaging>jar</packaging>
<name>springai-mcp-server-demo</name>
<url>http://maven.apache.org</url>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>1.0.0-M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.4</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 实际要用到的依赖,要放在dependencies内 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.hippo.spring.tools.ai.springai.mcp.McpApp</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.2 服务层
/**
* @desc 执行项服务接口
*/
public interface IJointExecItemService {
/**
* @Desc 获取计算结果
* @param validChainParamsDTO
* @return JointExamItemResultDTO
* @author hippo
*/
ProbExecResult getJointExamItemCalculateResult(ValidChainParamsDTO validChainParamsDTO);
}
服务实现层,使用@Tool定义为MCP工具
@Tool(description = "获取统考计算概率结果值")
@Override
public ProbExecResult getJointExamItemCalculateResult(ValidChainParamsDTO validChainParamsDTO) {
if(null == validChainParamsDTO){
return null;
}
/** 省批次线、院校控制线等校验 **/
jointScorePassingLineHandle.next(batchLineHandle);
batchLineHandle.next(schoolControllerLineHandle);
schoolControllerLineHandle.next(scoreLimitHandle);
scoreLimitHandle.next(subjectLimitHandle);
ValidChainResultDTO validChainResultDTO = jointScorePassingLineHandle.doValid(validChainParamsDTO);
if(null != validChainResultDTO.getLineLimitType()){
return ProbExecResult.error(validChainResultDTO.getLineLimitType());
}
return parallelCalculate.getProbability(validChainParamsDTO);
}
2.3 配置类
/**
* @desc 工具配置类
*/
@Configuration
public class ToolConfig {
/**
* 通过Spring beans实现工具规范配置
* 用户信息、计算配置查询 查询tools
* @param userService
* @return
*/
@Bean
public ToolCallbackProvider userTools(IUserService userService, IJointExecItemService jointExecItemService) {
return MethodToolCallbackProvider.builder().toolObjects(userService, jointExecItemService).build();
}
三、mcp配置文件
共计包含内容:
mcpServers:mcp名称
hippo-mcp-server:服务名
command:命令,使用java启动命令,可以指定不同版本jdk,示例为jdk17
args:参数,最后一项为项目打包的jar的地址
{
"mcpServers": {
"hippo-mcp-server": {
"command": "/Library/Java/JavaVirtualMachines/liberica-jdk-17.jdk/Contents/Home/bin/java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-jar",
"/Users/*/target/springai-mcp-server-demo-1.0-SNAPSHOT.jar"
],
"env": {}
}
}
}
四、Trae配置
4.1 配置mcp
进入Trae主界面,右侧的对话上方的设置,点击后,选择MCP,手动添加,将配置贴入并保存。
启动后可以发现注册了三个服务。
4.2 配置智能体
1、选择智能体,创建自定义智能体。
2、选择MCP为自定义的MCP。
3、选择所有工具,保存
4.3 使用自定义智能体
1、选择自定义智能体,选择项目保存位置
2、输入问题:
我的投档分数为500,预计的院校要求投档最低分为480,求概率。
3、智能体回复
首先会按输入内容分析,将问题匹配对应的MCP工具,将参数解析为工具所需参数,调用服务,返回计算结果。
也可以微信搜索公众号:Java程序员那些事
最新文章会在公众号优先发布,感谢关注。
关注后发送代码获取案例代码