返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

Spring AI MCP:AI智能体与本地数据无缝集成详解来了!

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 12:55 |阅读模式 打印 上一主题 下一主题

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">在人工智能飞速发展的今天,大语言模型(LLM)已成为企业数字化转型的核心引擎。

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">但是,模型的能力往往受限于输入数据的范围——如何将本地文件、数据库甚至外部API中的海量数据注入模型,成为技术人员面临的一大挑战。

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">近日,Spring AI推出的MCP(Model Context Protocol)集成方案,为这一问题提供了标准化答案。

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">通过MCP协议,开发者可以像连接USB设备一样,轻松将本地数据源、数据库甚至远程服务接入AI智能体,构建具备上下文感知能力的复杂应用。

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;font-optical-sizing: inherit;font-size-adjust: inherit;font-kerning: inherit;font-feature-settings: inherit;font-variation-settings: inherit;vertical-align: baseline;word-break: break-word;overflow-wrap: break-word;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">本文将从技术原理、实战案例到未来趋势,全面解析Spring AI MCP的生态价值。

ingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Helvetica, Arial, "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", "Source Han Sans CN", sans-serif;vertical-align: baseline;color: rgba(0, 0, 0, 0.9);letter-spacing: normal;orphans: 2;text-align: start;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;white-space: normal;background-color: rgb(252, 252, 252);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;">

Spring AI MCP为Java开发者提供了与MCP协议深度集成的解决方案,

其核心组件包括:


Spring AI应用:基于Spring框架构建的智能体应用,负责与用户交互和任务调度。
MCP客户端:封装了与MCP Server通信的逻辑,支持同步/异步调用。
MCP Server:轻量级服务端程序,暴露特定功能的标准化接口(如文件读写、数据库查询)。
本地/远程数据源:MCP Server可直接访问的文件系统、数据库或第三方API。

关键组件解析:


1.Function Callbacks
Spring AI MCP通过McpFunctionCallback将MCP工具转换为标准的Spring AI函数调用。


例如,当模型需要查询本地文件时,McpFunctionCallback会触发MCP Client与Server的通信,最终将文件内容作为上下文返回模型。

2.ChatClient集成
开发者只需在ChatClient中注入McpFunctionCallback,即可让模型在对话中动态调用外部工具。以下代码展示了这一过程的简洁性:

java@BeanpublicChatClientchatClient(McpSyncClientmcpClient){List<McpFunctionCallback>callbacks=mcpClient.listTools(null).tools().stream().map(tool->newMcpFunctionCallback(mcpClient,tool)).collect(Collectors.toList());returnchatClientBuilder.defaultFunctions(callbacks).build();}

示例演示:

Step1:用到的组件

1. MCP Client,与 MCP 集成的关键,提供了与本地文件系统进行交互的能力。

2. Function Callbacks,Spring AI MCP 的 function calling 声明方式。

3. Chat Client,Spring AI 关键组件,用于 LLM 模型交互、智能体代理。


Step2:声明 ChatClient

//List<McpFunctionCallback>functionCallbacks;varchatClient=chatClientBuilder.defaultFunctions(functionCallbacks).build();

这里首先定义一个 ChatClient Bean,作为代理与大模型进行交互。


Step3:声明 MCP Function Callbacks


下面代码通过mcpClient与MCP server 交互,把MCP通过 McpFunctionCallback 适配为标准的 Spring AI function。

  1. 发现 MCP server 中可用的工具 tool(Spring AI 中叫做 function)列表。
  2. 依次将每个 tool 转换成 Spring AI function callback。
  3. 最终我们会将这些 McpFunctionCallback 注册到 ChatClient 使用。
@BeanpublicList<McpFunctionCallback>functionCallbacks(McpSyncClientmcpClient){returnmcpClient.listTools(null).tools().stream().map(tool->newMcpFunctionCallback(mcpClient,tool)).toList();}

通过上面我们可以知道,ChatClient 与模型交互过程是无感知的,模型在需要的时候告知 ChatClient 去做函数调用。

只不过 Spring AI 通过 McpFunctionCallback 将实际的函数调用过程委托给了 MCP,通过标准的 MCP 协议与本地文件系统交互:

  • 在与大模交互的过程中,ChatClient 处理相关的 function calls 请求;
  • ChatClient 调用 MCP 工具(通过 McpClient);
  • McpClient 与 MCP server(即 filesystem)交互;


Step4:初始化 McpClient

该智能体应用使用同步 MCP 客户端与本地运行的文件系统 MCP server 通信:

@Bean(destroyMethod ="close")publicMcpSyncClient mcpClient() { varstdioParams = ServerParameters.builder("npx")      .args("-y","@modelcontextprotocol/server-filesystem","path))      .build(); // 1
var mcpClient = McpClient.sync(new StdioServerTransport(stdioParams), Duration.ofSeconds(10), new ObjectMapper()); //2
var init = mcpClient.initialize(); // 3 System.out.println("MCP Initialized:" + init);
return mcpClient;}

运行示例,这里前提条件要注意:

1. 安装 npx(Node Package eXecute)
首先确保本地机器安装了 npm[4],然后运行如下命令:

npminstall-gnpx

2. 下载示例源码

gitclonehttps://github.com/springaialibaba/spring-ai-alibaba-examples.gitcdspring-ai-alibaba-examples/spring-ai-alibaba-mcp-example/filesystem

3. 设置环境变量

#通义大模型DashscopeAPI-KEYexportAI_DASHSCOPE_API_KEY=${your-api-key-here}

4. 构建示例

./mvnwcleaninstall

Step6:运行示例

智能体将向模型发起提问,可通过控制台查看输出结果。

./mvnwspring-boot:run

至此示例演示就顺利完成!

写在最后


从本地文件到企业数据库,从实时API到物联网设备,MCP协议正在重新定义AI与数据的交互方式。

Spring AI MCP凭借其强大的生态兼容性和易用性,为开发者提供了一把打开智能体时代的钥匙。

无论是构建个人助手还是企业级应用,掌握MCP都将让你在AI竞赛中抢占先机。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ