您现在的位置是:首页 > 文章详情

Spring AI 再进化,支持 MCP 协议

日期:2025-01-08点击:280

Model Context Protocol (MCP) 是一种开放标准,旨在促进人工智能(AI)系统与各种数据源之间的安全双向连接。它为 AI 应用程序提供了统一的接口,使其能够高效地访问和利用外部数据,从而取代了以往需要为每个数据源定制集成的复杂做法。

https://modelcontextprotocol.io/docs/concepts/architecture

1736129106

是什么?

Model Context Protocol(MCP)是由Anthropic推出的一项开放协议,旨在促进大型语言模型(LLM)与外部数据源之间的无缝集成。MCP通过提供一个标准化的客户端-服务器架构,使得不同的AI应用能够高效地访问和共享本地及远程资源,从而解决了数据孤岛问题。

MCP 协议让开发者能够以统一的方式,连接各种本地或远程资源。

统一标准:

开发者只需要针对 MCP 进行一次开发,就能够实现与各种数据来源的对接,免去为每个数据源编写单独连接器的麻烦,从而大幅减少开发和维护的成本。

支持多种数据格式

MCP 能够处理各种不同的数据,包括结构化数据(如数据库)和非结构化数据(如文本或影像),这使得开发者可以在不考虑数据格式的情况下,轻松地将不同来源的资料整合到一起。

无缝整合

开发者可以在一个统一的界面中,从多个来源同时获取并操作数据。例如,MCP 让你可以在语言模型的聊天界面中,直接访问 GitHub、Google Drive 等资源,让团队协作更加流畅,提升工作流程效率。

和 function calling 的区别

MCP(多协议通信)提供了一种灵活且高效的数据交换机制,支持跨系统的通信和数据交换。它通过协议标准化,简化了分布式系统的开发,并有效降低了长期生态开发的成本,实现了数据共享和上下文协同等高级功能。

相较之下,Function Calling 主要适用于简单任务,且与具体的 AI 应用紧密绑定。在实际应用中,Function Calling 一旦设计完毕,通常很难在其他业务场景中复用。而 MCP 的设计初衷是为了应对跨系统、跨工具的复杂场景,它着重解决了复用性和系统间交互的问题,使得数据和功能能够在不同系统间灵活传递,从而提升了系统的整体协同效率。

Spring AI MCP

1736130236

添加依赖

 <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-M5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-ai-mcp</artifactId> <version>0.4.1</version> </dependency> </dependencies> 

增加配置

MCP Client 实现

业务目标,让 MCP 直接加载当前公众号推文,让大模型提出修改意见

 @Bean public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, List<McpFunctionCallback> 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<McpFunctionCallback> 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 init = mcpClient.initialize(); System.out.println("MCP Initialized: " + init); return mcpClient; } private static String getDbPath() { return Paths.get(System.getProperty("user.dir"), "target").toString(); } 

测试执行

运行以下命令来启动Spring Boot应用,测试MCP功能:

mvn springboot:run 

如果您对 Java AI 感兴趣,欢迎订阅我的频道。

原文链接:https://my.oschina.net/giegie/blog/17113995
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章