邯郸做网站找谁wordpress 图片展示

张小明 2025/12/31 2:52:07
邯郸做网站找谁,wordpress 图片展示,电商运营培训课程,中文网站建设翻译成英文是什么意思引子 在上一篇文章中#xff0c;我们通过集成 SearXNG#xff0c;成功让大模型“睁眼看世界”#xff0c;具备了获取互联网实时信息的能力。然而#xff0c;无论是 RAG#xff08;检索增强生成#xff09;还是联网搜索#xff0c;本质上都是让 AI “读” 更多的书#…引子在上一篇文章中我们通过集成 SearXNG成功让大模型“睁眼看世界”具备了获取互联网实时信息的能力。然而无论是 RAG检索增强生成还是联网搜索本质上都是让 AI“读”更多的书获取更多的信息。但一个真正的智能助手不仅要能“读”还要能“写”和“做”。试想这样一个场景你希望 AI 帮你整理今天的股市数据并生成一份 Excel 报表保存到桌面或者你希望 AI 帮你给客户发送一封会议邀请邮件。在目前的架构下大模型只能告诉你“邮件内容写好了请你复制粘贴去发送”它就像一个被困在罐子里的“超级大脑”虽然博学却无法触碰现实世界。为了打破这个次元壁我们需要引入MCPModel Context Protocol模型上下文协议。关于它的概念不多赘述概念网上相关的文章已经很多了有需要了解请看MCP中文文档https://docs.mcpcn.org/introduction。本文将分为两个部分实战 MCP作为客户端Client调用现成的 MCP 服务。作为服务端Server开发我们自己的 MCP 服务。调用 MCP 服务操作本地文件Spring AI 提供了spring-ai-mcp-client允许我们的应用连接到任何遵循 MCP 标准的服务器。这里我们以官方提供的文件系统 MCP 服务器为例让 AI 具备在本地创建和读取文件的能力。前提条件由于文件系统 MCP 服务是基于 Node.js 的请确保你的本地环境已安装 Node.js (v18)。1.添加依赖在pom.xml中引入 MCP Client 相关的依赖dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-client/artifactId/dependencydependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-mcp/artifactId/dependency2. 配置 MCP Server 连接MCP 支持两种连接模式stdio标准输入输出适用于本地进程和sseServer-Sent Events适用于网络服务。对于本地文件系统服务我们使用stdio模式。在resources目录下新建mcp-server.json文件定义如何启动文件系统服务{mcpServers:{filesystem:{command:D:\\devolop\\node\\npx.cmd,args:[-y,modelcontextprotocol/server-filesystem,D:\\devolop]}}}配置解析command: 指向你的npx可执行文件路径Windows 下通常是npx.cmd。args:-y: 自动确认安装。modelcontextprotocol/server-filesystem: 官方的文件系统 MCP 服务包。D:\\devolop:这是允许 AI 访问的根目录。为了安全起见AI 只能操作这个目录及其子目录下的文件。接着在application.yml中启用 MCP Client 并加载上述配置spring:ai:mcp:client:enabled:truename:spring-ai-mcp-clienttype:ASYNC# 推荐使用异步非阻塞模式stdio:servers-configuration:classpath:mcp-server.json3.代码改造我们需要在ChatService初始化时将 MCP Client 发现的工具注册到ChatClient中。publicChatServiceImpl(ChatClient.BuilderchatClientBuilder,ToolCallbackProvidertools){// tools 会自动注入所有配置好的 MCP 工具this.chatClientchatClientBuilder.defaultToolCallbacks(tools).build();}4.效果测试启动项目观察控制台日志可以看到MCP工具已经连接成功。现在我们在对话框中输入这些内容打开我们配置的D:\devolop目录可以看到文件已经被成功创建。开发 MCP 服务邮件与时间工具除了调用现有的工具更常见的场景是将我们自己的业务逻辑如查询内部系统、发送通知封装成 MCP 工具供大模型调用。为了演示我们创建一个新的模块mcp-server实现“获取当前时间”和“发送邮件”两个功能。在mcp-server模块的pom.xml中添加必要的依赖。除了 WebFluxMCP Server 常用底层我们还需要spring-boot-starter-mail来发送邮件以及flexmark用于将 AI 生成的 Markdown 内容转换为邮件友好的 HTML。?xml version1.0 encodingUTF-8?projectxmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.cc/groupIdartifactIdSpringAI-MCP-RAG-Dev/artifactIdversion1.0-SNAPSHOT/version/parentartifactIdmcp-server/artifactIdpropertiesmaven.compiler.source17/maven.compiler.sourcemaven.compiler.target17/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesdependencyManagementdependenciesdependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-bom/artifactIdversion1.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies/dependencyManagementdependencies!-- MCP Server 依赖 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-starter-mcp-server-webflux/artifactId/dependency!-- 邮件发送依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-mail/artifactId/dependency!-- Markdown 转 HTML 工具 --dependencygroupIdcom.vladsch.flexmark/groupIdartifactIdflexmark-all/artifactIdversion0.64.8/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.apache.commons/groupIdartifactIdcommons-lang3/artifactIdversion3.17.0/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency/dependencies/project1.添加配置在application.yml中配置 OpenAI Key、Redis用于向量存储或缓存以及 SMTP 邮件服务信息。spring:application:name:spring-ai-mcp-serverdata:redis:host:127.0.0.1port:9379password:123456ai:mcp:server:name:spring-ai-mcp-server-sseversion:1.0.0sse-endpoint:/ssetype:asyncmail:host:smtp.163.comport:465username:123163.compassword:123456# 注意这里通常是邮箱授权码不是登录密码protocol:smtpdefault-encoding:UTF-8properties:mail:smtp:socketFactory:port:465class:javax.net.ssl.SSLSocketFactoryssl:enable:truelogging:level:root:infoserver:port:6080启动项目访问http://localhost:6080/sse如果能正常启动说明配置无误。2. 开发时间查询工具大模型本身对“现在是几点”没有概念我们需要提供一个工具。packagecom.cc.mcp.tool;importlombok.extern.slf4j.Slf4j;importorg.springframework.ai.tool.annotation.Tool;importorg.springframework.stereotype.Component;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;ComponentSlf4jpublicclassDateTool{// Tool 注解将方法暴露为 MCP 工具// description 非常重要大模型根据它来判断何时调用此工具Tool(description获取当前时间)publicStringgetCurrentTime(){log.info(调用MCP工具获取当前时间);returnString.format(当前的时间是 %s,LocalDateTime.now().format(DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss)));}}3. 开发邮件发送工具这是一个稍微复杂一点的工具需要定义参数结构。packagecom.cc.mcp.tool;importcom.vladsch.flexmark.html.HtmlRenderer;importcom.vladsch.flexmark.parser.Parser;importcom.vladsch.flexmark.util.data.MutableDataSet;importjakarta.mail.MessagingException;importjakarta.mail.internet.MimeMessage;importlombok.*;importlombok.extern.slf4j.Slf4j;importorg.springframework.ai.tool.annotation.Tool;importorg.springframework.ai.tool.annotation.ToolParam;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.beans.factory.annotation.Value;importorg.springframework.mail.javamail.JavaMailSender;importorg.springframework.mail.javamail.MimeMessageHelper;importorg.springframework.stereotype.Component;ComponentSlf4jpublicclassEmailTool{privatefinalJavaMailSendermailSender;privatefinalStringfrom;AutowiredprivateEmailTool(JavaMailSendermailSender,Value(${spring.mail.username})Stringfrom){this.mailSendermailSender;this.fromfrom;}// 定义请求参数类大模型会自动填充这些字段DataToStringNoArgsConstructorAllArgsConstructorpublicstaticclassEmailRequest{ToolParam(description收件人邮箱地址)privateStringemail;ToolParam(description发送邮件的标题/主题)privateStringsubject;ToolParam(description发送邮件的消息/正文内容)privateStringmessage;ToolParam(description发送邮件的内容类型1为HTML格式2为普通文本格式)privateIntegercontentType;}Tool(description给指定邮箱发送邮件信息。)publicStringsendEmail(EmailRequestemailRequest){log.info(调用MCP工具sendEmail);log.info(请求详情: {},emailRequest);IntegercontentTypeemailRequest.getContentType();try{MimeMessagemimeMessagemailSender.createMimeMessage();MimeMessageHelpermimeMessageHelpernewMimeMessageHelper(mimeMessage);mimeMessageHelper.setFrom(from);mimeMessageHelper.setTo(emailRequest.getEmail());mimeMessageHelper.setSubject(emailRequest.getSubject());// 智能处理如果是 Markdown 格式自动转 HTMLif(contentType!nullcontentType1){mimeMessageHelper.setText(convertMarkdownToHtml(emailRequest.getMessage()),true);}elseif(contentType!nullcontentType2){mimeMessageHelper.setText(emailRequest.getMessage(),true);}else{// 默认处理mimeMessageHelper.setText(emailRequest.getMessage());}mailSender.send(mimeMessage);return邮件发送成功;}catch(MessagingExceptione){log.error(发送邮件失败,e);return发送邮件失败: e.getMessage();}}/** * 将Markdown格式的字符串转换为HTML格式 */publicstaticStringconvertMarkdownToHtml(StringmarkdownStr){MutableDataSetdataSetnewMutableDataSet();ParserparserParser.builder(dataSet).build();HtmlRendererhtmlRendererHtmlRenderer.builder(dataSet).build();returnhtmlRenderer.render(parser.parse(markdownStr));}}4. 注册工具最后在启动类或配置类中将我们编写的 Tool Bean 注册到ToolCallbackProvider中。package com.cc.mcp; import com.cc.mcp.tool.DateTool; import com.cc.mcp.tool.EmailTool; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.ai.tool.method.MethodToolCallbackProvider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } /** * 注册自定义 MCP 工具 * 这样 ChatClient 就能感知到这些工具的存在 */ Bean public ToolCallbackProvider registerMCPTools(DateTool dateTool, EmailTool emailTool) { return MethodToolCallbackProvider.builder() .toolObjects(dateTool, emailTool) .build(); } }5. 综合测试启动项目观察日志确认工具已加载。测试时间查询测试邮件发送增加记忆功能让对话更连贯在实际使用中我们可能会分多轮对话来完成任务。但默认情况下ChatClient是无状态的它记不住上一句说了什么为了解决这个问题我们需要引入Chat Memory。在ChatServiceImpl中注入ChatMemory并将其配置到ChatClient中privatefinalChatClientchatClient;// 注入 ChatMemorypublicChatServiceImpl(ChatClient.BuilderchatClientBuilder,ToolCallbackProvidertools,ChatMemorychatMemory){this.chatClientchatClientBuilder// 添加记忆 Advisor.defaultAdvisors(MessageChatMemoryAdvisor.builder(chatMemory).build()).defaultToolCallbacks(tools).build();}配置完成后模型就具备了上下文记忆能力能够流畅地处理多轮意图确认。小结通过本篇文章我们实现了 Spring AI 应用功能的重大飞跃从单纯的“信息获取者”进化为了“任务执行者”。利用MCP Client我们轻松集成了现有的文件系统服务。利用Spring AI Tool我们开发了自定义的邮件和时间服务。利用Chat Memory我们赋予了 AI 记忆使其交互更加自然。现在我们的 AI 已经可以操作文件、发送邮件了。但在企业级应用中最核心的数据往往存储在数据库中。如何让大模型安全、准确地查询和操作数据库下一篇我们将探讨基于 MCP 的大模型与数据库交互开发。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

制作网站需要什么东莞市建设局网站

SolrCloud的架构和主要组件是什么?SolrCloud的架构和主要组件包括以下几部分:1、集群节点: SolrCloud环境中的每个Solr实例被视为一个节点,可以承担索引和查询的工作。2、ZooKeeper: 用于集群管理和配置信息的存储。Zo…

张小明 2025/12/31 1:14:09 网站建设

太仓网站建设服务推广软文营销案例

重庆毕业论文(设计)开题报告软件工程学院计算机科学与技术专业( 本 科)2021级21计本3班班课题名称:智能音乐推荐小程序的设计与实现毕业论文(设计)起止时间:~(共周)学生姓名:学号:2021105097指导…

张小明 2025/12/31 1:14:06 网站建设

企业3合1网站建设电话个人网站建设背景和目的

ncmdump:免费快速的网易云音乐NCM文件终极解密方案 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 还在为网易云音乐的NCM格式文件无法在其他设备上播放而烦恼吗?ncmdump为你提供…

张小明 2025/12/31 1:14:03 网站建设

电子网站怎么做的访问网站慢

第一章:Open-AutoGLM部署需要什么硬件部署 Open-AutoGLM 模型对硬件资源配置有较高要求,尤其在推理和微调场景下,合理的硬件选型直接影响模型性能与响应效率。GPU 资源需求 Open-AutoGLM 作为基于 Transformer 架构的大语言模型,强…

张小明 2025/12/31 1:14:01 网站建设

系统开发唐山网站建设方案优化

EmotiVoice语音前后处理工具链推荐清单 在虚拟助手、数字人、有声书和游戏NPC日益普及的今天,用户早已不再满足于“能说话”的AI语音——他们期待的是会表达、有性格、带情绪的声音。传统TTS系统虽然清晰流畅,但往往语气单调、缺乏情感起伏,听…

张小明 2025/12/31 2:44:46 网站建设