随着 AI 技术的快速发展,如何让 AI 系统高效地获取和处理外部数据成为一个关键挑战。今天为大家介绍 Spring AI 最新支持的 MCP 协议,它将为 AI 应用打开一个全新的数据互联世界。
MCP:AI 与外部世界的"万能翻译官"
想象一下,如果你的 AI 应用需要同时读取数据库、访问文件系统、调用 API,以前你可能需要为每个数据源写一个专门的接口。而现在,Model Context Protocol (MCP)的出现彻底改变了这一切。
为什么 MCP 这么特别?
-
统一标准
:一次开发,到处运行。MCP 就像一个"万能适配器",让 AI 应用可以用同一种方式与各种数据源对话。
-
全面兼容
:无论是结构化的数据库表,还是非结构化的文本文件,MCP 都能轻松应对。
-
即插即用
:想在聊天界面中直接查看 GitHub 代码或 Google 文档?MCP 让这一切变得自然而流畅。
MCP vs Function Calling:不止是简单的函数调用
很多开发者可能会问:这和 Function Calling 有什么不同?关键区别在于:
-
Function Calling 更像是"一次性订制":完成特定任务,但难以复用
-
MCP 则是"通用翻译官":为不同系统搭建沟通的桥梁,让数据和功能自由流动
Spring AI + MCP:几行代码搞定数据互联
让我们通过一个实际例子,看看如何在 Spring AI 中使用 MCP:
让 AI 帮你优化文章
有了 MCP 的支持,我们可以让 AI 直接读取本地文档,数据库,各种数据源,这种能力让 AI 应用的实用性大大提升,为内容创作、文档处理等场景带来新的可能。
1. 添加依赖
首先在 pom.xml 中添加必要的依赖:
<dependency>
<groupId>org.springframework.experimentalgroupId>
<artifactId>spring-ai-mcpartifactId>
<version>0.4.1version>
dependency>
2. 基础配置
在 application.properties 中配置 AI 服务:
spring.ai.openai.base-url=your-api-base-url
spring.ai.openai.api-key=your-api-key
3. 核心实现
@Bean
public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder,
List functionCallbacks, ConfigurableApplicationContext context) {
return args -> {
var chatClient = chatClientBuilder
.defaultFunctions(functionCallbacks.toArray(new McpFunctionCallback[0]))
.build();
String question1 = "mcp.txt 这篇文档有什么建议吗?方便公众号传播推广";
System.out.println("ASSISTANT: " + chatClient.prompt(question1).call().content());
context.close();
};
}
@Bean
public List functionCallbacks(McpSyncClient mcpClient) {
return mcpClient.listTools(null)
.tools()
.stream()
.map(tool -> new McpFunctionCallback(mcpClient, tool))
.toList();
}
@Bean(destroyMethod = "close")
public McpSyncClient mcpClient() {
var stdioParams = ServerParameters.builder("npx")
.args("-y", "@modelcontextprotocol/server-filesystem", getDbPath())
.build();
var mcpClient = McpClient.using(new StdioClientTransport(stdioParams))
.requestTimeout(Duration.ofSeconds(10)).sync();
var