当前位置: 首页 > news >正文

佛山建设网站公司制作个人网页教程

佛山建设网站公司,制作个人网页教程,wordpress禁止视频另存为,网站调用时间目录 一、前言 二、MCP 介绍 2.1 MCP是什么 2.2 MCP 核心特点 2.3 Spring AI MCP 介绍 2.3.1 Spring AI MCP架构 2.3.2 Spring AI MCP分层说明 2.4 两种模式介绍 三、本地开发SSE模式 3.1 搭建mcp-server 3.1.1 导入工程核心依赖 3.1.2 添加配置文件 3.1.3 提供两个…目录 一、前言 二、MCP 介绍 2.1 MCP是什么 2.2 MCP 核心特点 2.3 Spring AI MCP 介绍 2.3.1 Spring AI MCP架构 2.3.2 Spring AI MCP分层说明 2.4 两种模式介绍 三、本地开发SSE模式 3.1 搭建mcp-server 3.1.1 导入工程核心依赖 3.1.2 添加配置文件 3.1.3 提供两个Tool 3.1.4 注册Tool 3.2 搭建mcp-client 3.2.1 导入核心依赖 3.2.2 添加配置文件 3.2.3 增加测试接口 3.2.4 效果测试 四、本地开发stdio模式 4.1 server 端开发 4.1.1 导入核心依赖 4.1.2 调整配置文件 4.1.3 提供Tool工具方法 4.1.4 注册工具方法 4.1.5 添加日志文件 4.1.6 构建jar包 4.2 mcp-client 开发 4.2.1 pom文件中导入下面核心依赖 4.2.2 添加下面的配置文件 4.2.3 接口改造 4.2.4 效果测试 五、Spring AI 对接第三方MCP服务 5.1 高德MCP服务前置说明 5.1.2 获取apikey 5.2 代码集成 5.2.1 配置文件信息 5.2.2 增加配置类 5.2.3 增加测试接口 六、写在文末 一、前言 MCPModel Context Protocol 是一种由 Anthropic 于 2024 年 11 月发布的开源协议旨在标准化大型语言模型LLM与外部数据源和工具的交互。它像“AI的USB-C接口”通过统一接口让 AI 模型无缝连接数据库、文件、API 等外部资源。随着人工智能技术的发展越来越多的框架和工具被开发出来以帮助开发者快速构建智能化的应用程序。Spring AI 是 Spring 家族的一员它提供了丰富的机器学习和人工智能相关的支持。同时Spring AI也适应时代的发展快速跟进于近期开始了对MCP生态的能力整合本篇将详细介绍下如何在Spring AI中集成和使用MCP能力。 二、MCP 介绍 2.1 MCP是什么 模型上下文协议即 Model Context ProtocolMCP是一个开放协议它规范了应用程序如何向大型语言模型LLM提供上下文。MCP 提供了一种统一的方式将 AI 模型连接到不同的数据源和工具它定义了统一的集成方式。在开发智能体Agent的过程中我们经常需要将将智能体与数据和工具集成MCP 以标准的方式规范了智能体与数据及工具的集成方式可以帮助您在 LLM 之上构建智能体Agent和复杂的工作流。目前已经有大量的服务接入并提供了 MCP server 实现当前这个生态正在以非常快的速度不断的丰富中。 2.2 MCP 核心特点 MCP 具备如下核心特点 标准化集成 MCP统一了不同AI模型如Claude、GPT等与外部工具如数据库、API、浏览器等的交互方式避免了传统定制化API开发的重复劳动 双向通信 不同于传统AI只能被动接收数据MCP支持AI主动检索信息并执行操作如更新数据库、触发工作流实现真正的“代理式AI” 动态上下文管理 MCP允许AI在会话中持续携带上下文信息如用户偏好、历史记录使多步骤任务如“查询天气→推荐行程→预订酒店”能自动串联执行 安全与灵活性 MCP支持本地或云端部署通过OAuth 2.1认证和数据沙箱机制保障敏感信息的安全访问 2.3 Spring AI MCP 介绍 官网入口Model Context Protocol (MCP) :: Spring AI Reference 2.3.1 Spring AI MCP架构 Spring 官网对于MCP给出了下面的架构图 从上面的架构图不难看出Spring AI MCP 采用模块化架构包括以下组件 Spring AI 应用程序使用 Spring AI 框架构建想要通过 MCP 访问数据的生成式 AI 应用程序 Spring MCP 客户端MCP 协议的 Spring AI 实现与服务器保持 1:1 连接 MCP 服务器轻量级程序每个程序都通过标准化的模型上下文协议公开特定的功能 本地数据源MCP 服务器可以安全访问的计算机文件、数据库和服务 远程服务MCP 服务器可以通过互联网例如通过 API连接到的外部系统 2.3.2 Spring AI MCP分层说明 Spring AI MCP实现遵循三层架构 三层架构实现说明 Java MCP 实现遵循三层架构 客户端/服务器层McpClient 处理客户端操作McpServer 管理服务器端协议操作 会话层(McpSession)管理通信模式和状态 传输层(McpTransport)处理 JSON-RPC 消息的序列化和反序列化支持多种传输方式 2.4 两种模式介绍 在Spring AI MCP模式下目前主要提供了2种的通信协议的模式即SSE和STDIO STDIO传输协议 STDIO方式是基于进程间通信MCP Client和MCP Server运行在同一主机主要用于本地集成、命令行工具等场景。 优点 简单可靠无需网络配置适合本地部署场景进程隔离安全性好。 缺点 仅支持单机部署不支持跨网络访问每个客户端需要独立启动服务器进程。 SSE传输协议 SSEServer-Sent Events传输层是基于HTTP的单向通信机制专门用于服务器向客户端推送数据。MCP Client远程调用MCP Server提供的SSE服务。实现客户端和服务端远程通信。 优点 支持分布式部署可跨网络访问支持多客户端连接轻量级使用标准HTTP协议。 缺点 需要额外的网络配置相比stdio实现略微复杂需要考虑网络安全性。 三、本地开发SSE模式 3.1 搭建mcp-server 分别搭建mcp-server 和 mcp-client两个工程下面依次说明。 3.1.1 导入工程核心依赖 在pom文件中导入下面的核心依赖 propertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring-ai.version1.0.0-M7/spring-ai.version /propertiesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.4.4/versionrelativePath/ /parentdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0-M7/versiontypepom/typescopeimport/scope/dependency/dependencies /dependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-server-webflux/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency /dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins /buildrepositoriesrepositoryidcentral/idurlhttps://maven.aliyun.com/repository/central/urlreleasesenabledtrue/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repositoryrepositorynameCentral Portal Snapshots/nameidcentral-portal-snapshots/idurlhttps://central.sonatype.com/repository/maven-snapshots//urlreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repositoryrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repository /repositories 3.1.2 添加配置文件 在配置文件中添加下面的配置信息 spring:ai:mcp:server:name: mcp-serverversion: 1.0.0type: ASYNCsse-message-endpoint: /mcp/messages 3.1.3 提供两个Tool 自定义一个类增加两个Tool方法参考下面的代码 package com.congge.tool;import org.springframework.ai.tool.annotation.Tool; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service;import java.time.LocalDateTime;Service(weatherServiceTool) public class WeatherServiceTool {Tool(description 获取指定城市的天气)public String getWeather(String cityName){if(cityName.equals(北京)){return 晴天;}else if(cityName.equals(上海)){return 阴天;}else {return 未知;}}Tool(description 获取当前用户所在的时区时间)String getCurrentDateTime() {return LocalDateTime.now().atZone(LocaleContextHolder.getTimeZone().toZoneId()).toString();}} 3.1.4 注册Tool 提供一个配置类将上面的Tool方法进行注册 package com.congge.config;import com.congge.tool.WeatherServiceTool; 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 ToolCallbackProviderConfig {Beanpublic ToolCallbackProvider toolCallbackProvider(WeatherServiceTool weatherServiceTool) {return MethodToolCallbackProvider.builder().toolObjects(weatherServiceTool).build();} } 以上做完之后启动项目通过控制台的输出可以看到注册了2个Tool方法 3.2 搭建mcp-client mcp-client 即调用server端提供的大模型工具的客户端在实际业务中可以有多个客户端都需要server端提供的各类Tool能力统称为客户端。 3.2.1 导入核心依赖 在pom文件中导入下面的核心依赖 propertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncodingspring-ai.version1.0.0-M7/spring-ai.version/propertiesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.4.4/versionrelativePath//parentdependenciesdependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter/artifactIdversion1.0.0-M6.1/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-client/artifactId/dependency/dependenciesrepositoriesrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repositoryrepositorynameCentral Portal Snapshots/nameidcentral-portal-snapshots/idurlhttps://central.sonatype.com/repository/maven-snapshots//urlreleasesenabledfalse/enabled/releasessnapshotsenabledtrue/enabled/snapshots/repositoryrepositoryidspring-milestones/idnameSpring Milestones/nameurlhttps://repo.spring.io/milestone/urlsnapshotsenabledfalse/enabled/snapshots/repositoryrepositoryidspring-snapshots/idnameSpring Snapshots/nameurlhttps://repo.spring.io/snapshot/urlreleasesenabledfalse/enabled/releases/repository/repositoriesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0-M7/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build 3.2.2 添加配置文件 在配置文件中添加如下信息 spring:ai:dashscope:api-key: 你的apikeymcp:client:sse:connections:server1:url: http://localhost:8080toolcallback:enabled: true 3.2.3 增加测试接口 增加一个测试接口用于测试调用server端的Tool能力 package com.congge.web;import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/client/ai) public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder) {this.chatClient chatClientBuilder.build();}Resourceprivate ToolCallbackProvider toolCallbackProvider;//localhost:8082/client/ai/chat?message今天北京的天气如何//localhost:8082/client/ai/chat?message你是谁//localhost:8082/client/ai/chat?message当前时间是多少GetMapping(/chat)public String chat(String message){return chatClient.prompt().user(message).tools(toolCallbackProvider.getToolCallbacks()).call().content();} } 3.2.4 效果测试 下面通过几个不同的测试场景分别验证下server端提供的工具能力是否生效 1测试效果一 调用接口localhost:8082/client/ai/chat?message今天北京的天气如何 问题是Tool工具中相关的可以给出预期的结果 2测试效果二 调用接口localhost:8082/client/ai/chat?message你是谁 问题是Tool工具中非相关的 3测试效果三 调用接口localhost:8082/client/ai/chat?message当前时间是多少 问题是Tool工具中相关的可以给出预期的结果 四、本地开发stdio模式 基于stdio的MCP服务端通过标准输入输出流与客户端通信适用于作为子进程被客户端启动和管理的场景非常适合嵌入式应用。 通过Java开发工具创建一个springboot工程模拟开发一个算术计算器服务通过stdio传输协议发布为MCP Server。 4.1 server 端开发 4.1.1 导入核心依赖 在pom中导入如下核心的依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-server-webflux-spring-boot-starter/artifactId/dependency 4.1.2 调整配置文件 在配置文件中添加下面的配置信息 server:port: 8088spring:ai:mcp:server:name: mcp-stdio-serverversion: 1.0.0 4.1.3 提供Tool工具方法 可以复用上一个案例中的工具方法 4.1.4 注册工具方法 同上一个案例 4.1.5 添加日志文件 为了方便后续查看运行过程中的日志在resources目录下增加一个日志配置文件logback-spring.xml configurationappender nameFILE classch.qos.logback.core.FileAppenderfilemcp-server.log/fileencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appenderroot levelINFOappender-ref refFILE //root /configuration 4.1.6 构建jar包 到这里一个通过Spring AI创建的MCP Server完成了。stdio方式是server和client通过进程通信所以需要把server打包成jar以便client命令启动执行。 jar包的完整路径E:\code-self\517\server\mcp-server\target\mcp-server-1.0-SNAPSHOT.jar 测试该服务是否发布成功在cmd命令行窗口里输入如下命令 java -Dspring.ai.mcp.server.stdiotrue -Dspring.main.web-application-typenone -Dspring.main.banner-modeoff -jar E:/code-self/517/server/mcp-server/target/mcp-server-1.0-SNAPSHOT.jar 至此我们通过spring ai框架开发完成了2个MCP Server服务一个通过sse协议发布另一个通过stdio协议发布接下来开发一个MCP Client端调用这两个MCP Server服务。 4.2 mcp-client 开发 4.2.1 pom文件中导入下面核心依赖 导入下面核心依赖之前的可以保持不变 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId /dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp-client-webflux-spring-boot-starter/artifactIdversion1.0.0-M6/version /dependency 4.2.2 添加下面的配置文件 配置文件中添加下面的配置信息 args参数中根据你的包的实际路径填写 server:port: 8082spring:ai:dashscope:api-key: 你的apikeychat:options:#model: qwen-maxmodel: qwen-plusmcp:client:connection-timeout: 60stype: ASYNCstdio:connections:server2:command: javaargs:- -Dspring.ai.mcp.server.stdiotrue- -Dspring.main.web-application-typenone- -Dspring.main.banner-modeoff- -jar- D:/self-code/0522/mcp-server/target/mcp-server.jar另一种方式是在resource目录下增加一个配置文件比如叫做mcp-servers-config.json 然后将上述的args里面的参数放到该json文件中如下 {mcpServers: {weather: {command: java,args: [-Dspring.ai.mcp.server.stdiotrue,-Dspring.main.web-application-typenone,-Dspring.main.banner-modeoff,-jar,E:/code-self/517/集成/mcp-server/target/mcp-server.jar],env: {}}} } 最后再重新调整下原始的配置文件改为对该json文件的引用即可 server:port: 8082spring:ai:mcp:client:stdio:servers-configuration: classpath:/mcp-servers-config.json # connections: # server2: # command: java # args: # - -Dspring.ai.mcp.server.stdiotrue # - -Dspring.main.web-application-typenone # - -Dspring.main.banner-modeoff # - -jar # - D:/self-code/0522/mcp-server/target/mcp-server.jardashscope:api-key: 你的apikeychat:options:#模型名称 qwen-plus deepseek-v3 deepseek-r1model: qwen-plus以上这两种方式任选其一即可更推荐引用json文件的方式这样方便全局管理 4.2.3 接口改造 在原来的测试接口中做一些调整参考下面的代码 主要是把ToolCallbackProvider 配置到ChatClient 中 package com.congge.web;import jakarta.annotation.Resource; import org.springframework.ai.chat.client.ChatClient; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;RestController RequestMapping(/client/ai) public class ChatController {private final ChatClient chatClient;public ChatController(ChatClient.Builder chatClientBuilder,ToolCallbackProvider tools) {this.chatClient chatClientBuilder.defaultTools(tools).build();}Resourceprivate ToolCallbackProvider toolCallbackProvider;//localhost:8082/client/ai/chat?message今天北京的天气如何//localhost:8082/client/ai/chat?message你是谁//localhost:8082/client/ai/chat?message当前时间是多少GetMapping(/chat)public String chat(String message){return chatClient.prompt().user(message).tools(toolCallbackProvider.getToolCallbacks()).call().content();} } 4.2.4 效果测试 仿照上面的案例测试问一个与Tool中无关的问题和一个相关的问题 1测试效果一 调用接口localhost:8082/client/ai/chat?message你是谁 问题是Tool工具中非相关的 2测试效果二 调用接口http://localhost:8082/client/ai/chat?message当前时间是多少 五、Spring AI 对接第三方MCP服务 随着MCP的概念火了之后也有很多平台开始逐步开放自己的MCP利用这些平台的能力即可快速对接各类特定场景下的MCP服务从而为自身的应用赋能下面介绍一下如何在自己的Spring AI应用中对接第三方的MCP服务。下面的案例中以高德地图提供的MCP服务为例进行说明。 5.1 高德MCP服务前置说明 使用高德MCP服务有多个渠道第一种是直接通过高德开放平台本身进行对接第二种是通过第三方平台对接高德MCP服务比如阿里云百炼平台。 入口地址一概述-MCP Server | 高德地图API 入口地址二百炼控制台 5.1.2 获取apikey 在后文的代码中为了集成并使用高德的mcp服务时需要用到apikey因此需要提前在高德开放平台注册账号并获取apikey参考该文档即可完成apikey 的获取创建应用和 Key-MCP Server | 高德地图API 最后在控制台我的应用这里就能看到你创建的这个应用的apikey信息了 5.2 代码集成 在代码中集成高德MCP也很简单官方提供的参考文档地址快速接入-MCP Server | 高德地图API下面看代码中的集成过程。 5.2.1 配置文件信息 在工程配置文件中增加下面的配置信息 spring:ai:dashscope:api-key: 你的apikeychat:options:model: qwen-maxmcp:client:connection-timeout: 60stype: ASYNC 5.2.2 增加配置类 在工程中增加如下配置类 package com.congge.tool;import com.fasterxml.jackson.databind.ObjectMapper; import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport; import io.modelcontextprotocol.spec.McpClientTransport; import org.springframework.ai.mcp.client.autoconfigure.NamedClientMcpTransport; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;import java.util.Collections; import java.util.List;Configuration public class McpConfig {Beanpublic ListNamedClientMcpTransport mcpClientTransport() {McpClientTransport transport HttpClientSseClientTransport.builder(https://mcp.amap.com).sseEndpoint(/sse?key你的高德的apikey).objectMapper(new ObjectMapper()).build();return Collections.singletonList(new NamedClientMcpTransport(amap, transport));}} 5.2.3 增加测试接口 添加如下测试接口用于测试效果 package com.congge.web;import io.modelcontextprotocol.client.McpAsyncClient; import io.modelcontextprotocol.spec.McpSchema; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import reactor.core.publisher.Mono;import java.util.List; import java.util.Map;RestController RequestMapping(/client/mcp) public class McpController {AutowiredListMcpAsyncClient mcpAsyncClients;//localhost:8082/client/mcp/testRequestMapping(/test)public MonoMcpSchema.CallToolResult test() {var mcpClient mcpAsyncClients.get(0);return mcpClient.listTools().flatMap(tools - {//logger.info(tools: {}, tools);System.out.println(tools);return mcpClient.callTool(new McpSchema.CallToolRequest(maps_weather,Map.of(city, 北京)));});}} 启动工程后调用一下上述的接口成功返回了数据实际应用时可以进一步参考官方API对相应的字段进行解析使用 六、写在文末 本文通过较大的篇幅详细介绍了基于Spring AI使用MCP的常用几种开发模式细节部分还有待进一步的完善希望对看到的同学有用本篇到此结束感谢观看。
http://www.zqtcl.cn/news/544129/

相关文章:

  • 做网站不赚钱了网站关键词排行查询
  • 印度人通过什么网站做国际贸易三门峡做网站
  • 网站排名快速提升工具招远建网站首选公司
  • 手机网站格式商城网游开发公司
  • 手机怎样创建网站长春网站建设哪家专业
  • 做pop网站定制开发教程
  • 成都响应式网站建报告问题
  • 做设计找素材的+网站有哪些建立平台什么意思
  • 网站设置在哪里找宁德网站建设制作
  • logo网站设计素材品牌高端网站建设公司
  • 芙蓉区乡建设局网站郑州网站建设qicaizz
  • 网站建设的缺陷个人网站制作图片
  • 四川省建设厅注册管理中心网站设计上海2021门票
  • 帝国cms做微网站人力资源公司怎么开
  • 网站建设学徒松江品划做网站公司
  • 灯饰网站需要这么做深圳专业网站设计公司
  • 政务网站设计wordpress 嵌入html5
  • 移动网站 pc网站的区别吗网站建设工厂
  • 有意义网站织梦圈子如何调用网站默认模板
  • 南京公司网站模板建站网页制作中的网站维护
  • 微信分享 淘宝网站 怎么做wordpress访问慢
  • 网站后台制作沈阳营销型网站制作技术
  • 微页制作平台网站建设wordpress文章显示数量
  • 望野古诗王绩seo优化系统
  • 网站设计大概流程惠城区龙丰街道
  • 游戏平台十大排名南宁seo优化公司
  • 佛山外贸网站建设方案企业管理控制系统
  • 分类信息网站如何做排名品牌建设卓有成效
  • 企业网站报价方案模板下载营销软件crm
  • 湛江网站开发哪家专业东莞营销型手机网站建设