实现功能
通过与AI的对话,让AI自动完成将指定内容写入指定目标文件的功能,效果如下:
环境
windows 11、jdk 17、SpringBoot 3.4.4
步骤
1、安装vscode并安装Cline插件
2、在Cline插件中配置大模型
Cline可以配置多种大模型,比如本地的Ollama、阿里的千问、deepseek等等,这里以配置deepseek为例,先去deepseek开放平台注册账号,然后随便充值十来块钱购买使用量,然后创建api-key:
接着就可以在Cline中配置deepseek了:
配置好后可以返回Cline的对话界面,问一个简单的问题试一下大模型是否生效,注意对话界面的右下角有Plan、Act两个选项,Plan可以理解为一般的对话聊天,Act就是需要大模型配合MCP服务执行任务,这里测试大模型是否生效就选择Plan就行:
发句“你好”测试一下:
3、实现MCP服务
首先创建一个SpringBoot项目(注意最好使用JDK 17+和SpringBoot 3+),引入以下依赖:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.4.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>ai-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>ai-demo</name>
<description>ai-demo</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M6</spring-ai.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
其中最重要的一个依赖是spring-ai-mcp-server-spring-boot-starter
,引入这个依赖后项目才能和大模型进行通信
之后编写服务类,实现文件写入的具体逻辑:
import com.example.aidemo.bean.FileWriteRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;
import java.nio.file.Path;
import java.nio.file.Paths;
@Slf4j
@Service
public class LocalFileService {
@Tool(description = "写入本地文件,自动创建文件和目录")
public String writeLocalFile(FileWriteRequest request){
String filePath = request.getFilePath();
Path path = Paths.get(filePath);
Path pathParent = path.getParent();
String content = request.getContent(); // 文件内容
try {
if (!pathParent.toFile().exists()) {
pathParent.toFile().mkdirs();
}
java.nio.file.Files.write(path, content.getBytes());
return "写入成功";
} catch (Exception e) {
log.error("写入文件失败", e);
return "写入文件失败";
}
}
}
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FileWriteRequest {
@JsonProperty(required = true, value = "filePath")
@JsonPropertyDescription("需要写入的文件路径")
private String filePath;
@JsonProperty(required = true, value = "content")
@JsonPropertyDescription("写入文件的具体内容")
private String content;
}
将服务类注册进MCP服务:
import com.example.aidemo.service.LocalFileService;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class McpServerConfig {
@Bean
public ToolCallbackProvider localFileToolCallbackProvider(LocalFileService localFileService) {
return MethodToolCallbackProvider
.builder()
.toolObjects(localFileService)
.build();
}
}
之后可以启动该项目查看日志:
在日志里可以看到,已经成功注册了一个工具,就是之前编写的文件写入服务。然后将该项目打成jar包就行了:
4、在Cline中配置MCP服务
在Cline的右上方点击MCP Server,再点击Installed,再点击下面的Configure MCP Servers
配置文件,其他的基本都是固定的,唯一需要改变的就是jar包的位置:
配置完毕保存后,Cline会自动更新配置,更新完毕后就可以在Installed一栏中看到本地的MCP服务了:
至此已全部完成,之后测试就行
测试
返回Cline对话框,选择Act模式,之后向大模型交代任务:
大模型会根据语义理解,并自动调用本地配置好的MCP服务: