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

网站做付费推广都需要问什么山西阳泉王平 做网站

网站做付费推广都需要问什么,山西阳泉王平 做网站,做哪些网站比较赚钱方法,海通建设集团有限公司网站1 简介随着AI的不断发展#xff0c;RAG#xff08;检索增强生成#xff09;和function calling等技术的出现#xff0c;使得大语言模型的对话生成能力得到了增强。然而#xff0c;function calling的实现逻辑比较复杂#xff0c;一个简单的工具调用和实现方式需要针对不同…1 简介随着AI的不断发展RAG检索增强生成和function calling等技术的出现使得大语言模型的对话生成能力得到了增强。然而function calling的实现逻辑比较复杂一个简单的工具调用和实现方式需要针对不同的系统和大模型单独编写适配接口十分复杂。在此背景下mcp应运而生为当前业内AI高效可靠地调用外部工具实现了标准化。下面我将带大家一起认识下mcp的基本原理和实现方式。2 执行流程在我们开始今天的正题之前需要先了解下通常用户与大模型进行一次交互的执行流程↓当用户问“北京今天天气怎么样”时我们的程序会将用户的问题、以及预先识别到的工具列表包装成提示词发送给大模型。熟悉function calling原理的小伙伴们都知道这时候大模型会基于预训练的function calling技术识别到想要调用的工具是什么并将其结构化输出。我们的程序识别后再去调用对应的工具最后将得到的结果和之前的上下文再次发送给大模型得到最终的结果返回给用户。当然如何让大模型选择要调用的工具不是本期的重点这里不再赘述。我们需要关注重点在于工具调用的这部分逻辑在mcp没有诞生之前是这样子调用的每次新增一个系统都需要开发者单独做适配即使tool的功能很简单也会有极大的重复开发量。 在mcp出现后调用方式发生了变化系统与工具的调用方式实现了解耦调用逻辑统一封装到了mcp client和 mcp server之间这一步的交互方式由官方提供了不同开发语言的sdk不再需要我们开发者处理了。3 mcp架构3.1 mcp架构设计接下来让我们详细看下mcp的架构设计mcp实现采用了标准的C/S架构模式。host用于承载接受用户请求与大模型交互调用工具的一段程序。广义上我们可以将其看作是一个AI Agent。client 基于mcp规则实现的客户端负责与mcp服务端进行通信。server 基于mcp规则实现的服务端实现了工具内部的逻辑操作并将执行结果返回给mcp客户端。3.2 mcp基本功能当下主流的与大模型交互的三要素无非是工具、资源、提示词而mcp针对这三类均做了标准化处理。 以下是几个重要的功能Resource类似文件的数据可以被客户端读取如数据库数据或文件内容。Tools可以被大模型调用的函数。prompt预先编写的模板帮助用户完成特定任务。sampling允许server主动通过client调用大模型获取数据进行采样。4 mcp通信原理4.1 JSON-RPCMCP采用JSON-RPC作为底层的通信协议。JSON-RPC是一种基于JSON的轻量级远程调用协议相较于HTTP来说它更加简洁、高效、容易处理。 请求结构体{jsonrpc: 2.0,id: number | string,method: string,params?: object }响应结构体{jsonrpc: 2.0,id: number | string,result?: object,error?: {code: number,message: string,data?: unknown} } 在发起通信的源码中我们也可以看到确实使用到了json-rpcOverride public T MonoT sendRequest(String method, Object requestParams, TypeReferenceT typeRef) {String requestId  this.generateRequestId();return Mono.McpSchema.JSONRPCResponsecreate(sink - {this.pendingResponses.put(requestId, sink);// 构建json-rpc请求McpSchema.JSONRPCRequest jsonrpcRequest  new McpSchema.JSONRPCRequest(McpSchema.JSONRPC_VERSION, method,requestId, requestParams);// 发送请求this.transport.sendMessage(jsonrpcRequest).subscribe(v - {}, error - {this.pendingResponses.remove(requestId);sink.error(error);});}).timeout(this.requestTimeout).handle((jsonRpcResponse, sink) - {// 省略异常处理});}json-rpc与http的对比 属性HTTPJSON-RPC本质应用层协议Web核心协议轻量级RPC协议基于JSON格式数据格式支持JSON/XML/二进制等多种格式强制JSON格式结构更简洁协议功能包含缓存/认证/状态码等完整功能仅定义RPC调用规范无底层逻辑通信模式无状态支持GET/POST等多方法无状态基于method字段调用适用场景Web API、浏览器交互、复杂业务微服务内部调用、物联网等轻量场景典型应用RESTful接口、网页加载服务间函数调用、嵌入式设备通信4.2 通信方式mcp基于以上通信协议实现了以下通信方式STDIO采用STDIO的方式server端会在client端启动时作为client端的子进程一起启动。这种方式适用于client和server在同一台机器上通信的场景通常用于工具调试。 它的实现原理是client和server两个进程间通过stdin和stdout进行双向通信。优点:无外部依赖进程间通信极快脱机可用缺点并发能力差是同步阻塞模型不支持多进程通信SSE全名是server send event是一种基于服务端到客户端的流式传输方式同时客户端向服务端通信采用http的方式进行传输。一般用于client在本地server在远程服务器的场景。具体执行流程如下客户端会向服务端的/sse端点发送http请求服务端会返回sessionID等信息建立sse连接。初始化连接完成后客户端会向服务端请求tools/list接口获取所有的tool列表用于之后发送给大模型。在工具调用时客户端会将调用信息如methodargs通过post请求调用tools/call接口发送给服务端处理服务端通过sse连接通知客户端结果。从本质上看sse是一种异步非阻塞的通信模型极大的提高了agent的吞吐能力但其服务器和客户端需要做长连接容易连接中断会丢失上下文。而官方在今年又推出了一项通信方式的更新使用streamable http替代sse解决了以上的问题。5 生命周期以下是mcp的生命周期在mcp client和mcp server建立连接后client会立即向server请求获取可用的工具列表这里也体现了mcp工具的动态可插拔性。 接下来我将用Spring AI带大家一起了解下mcp client的调用流程。 我们需要引入Spring AI的maven依赖以及对spring AI对Mcp的依赖。 5.1 环境搭建我们需要在server端向外暴露一个工具。/** 构建根据城市获取天气的tool* param city 城市名称* return 天气信息*/Tool(name  getWeather, description  根据城市获取天气)public String getWeather(String city) {return new String((city).getBytes(), StandardCharsets.UTF_8)   天气为晴天 25℃;} SpringAi会将标有Tool注解的方法自动注入到ToolCallbackProvider中。 在client端我们需要配置下mcp server的地址。 spring:ai:mcp:client:sse:connections:server1: # sse服务端url: http://127.0.0.1:8080 写一个demo来模拟用户询问大模型的流程。Beanpublic CommandLineRunner callToolByLLM(ChatClient.Builder chatClientBuilder,ToolCallbackProvider toolCallbackProvider,ConfigurableApplicationContext context) {return args - {System.out.println(基于spring-aillm调用方法------);Gson gson  new Gson();// 模拟用户输入的信息并把工具列表传给LLMString userInput  获取北京的天气;System.out.println(用户问:   userInput);var chatClient chatClientBuilder.defaultUser(获取北京的天气).defaultTools(toolCallbackProvider).build();// 包装请求LLMString content chatClient.prompt(userInput).call().content();System.out.println(AI回答:   gson.toJson(content));// 结束会话context.close();};} 5.2 建立连接获取可用工具列表当程序启动后spring会自动注入McpClient和ToolCallbackProvider此时会向server端发送请求获取所有可用的工具列表。 public class SyncMcpToolCallbackProvider implements ToolCallbackProvider {Overridepublic ToolCallback[] getToolCallbacks() {var toolCallbacks  new ArrayList();this.mcpClients.stream().forEach(mcpClient - {// mcpClient.listTools()toolCallbacks.addAll(mcpClient.listTools().tools().stream().filter(tool - toolFilter.test(mcpClient, tool)).map(tool - new SyncMcpToolCallback(mcpClient, tool)).toList());});var array toolCallbacks.toArray(new ToolCallback[0]);validateToolCallbacks(array);return array;} } mcpClient会用json-rpc的格式调用tools/list方法获取当前server下所有可用的工具列表。 public MonoMcpSchema.ListToolsResult listTools(String cursor) {return this.withInitializationCheck(listing tools, initializedResult - {if (this.serverCapabilities.tools()  null) {return Mono.error(new McpError(Server does not provide tools capability));}return this.mcpSession.sendRequest(McpSchema.METHOD_TOOLS_LIST, new McpSchema.PaginatedRequest(cursor),LIST_TOOLS_RESULT_TYPE_REF);}); } 5.3 调用工具当用户询问北京今天天气怎么样时程序会将上述获取到的所有工具和用户的信息生成提示词告诉大模型大模型选择一个合适的工具告诉程序去调用工具。public ChatResponse internalCall(Prompt prompt, ChatResponse previousChatResponse) {// 构建提示词、工具ChatCompletionRequest request createRequest(prompt, false);// 构建要调用的大模型信息ChatModelObservationContext observationContext ChatModelObservationContext.builder().prompt(prompt).provider(OpenAiApiConstants.PROVIDER_NAME).requestOptions(prompt.getOptions()).build();ChatResponse response ChatModelObservationDocumentation.CHAT_MODEL_OPERATION.observation(this.observationConvention, DEFAULT_OBSERVATION_CONVENTION, () - observationContext,this.observationRegistry).observe(() - {// post请求大模型ApiResponseEntityChatCompletion completionEntity  this.retryTemplate.execute(ctx - this.openAiApi.chatCompletionEntity(request, getAdditionalHttpHeaders(prompt)));// 解析结果省略步骤 ...return chatResponse;});// 判断是否是工具调用if (toolExecutionEligibilityPredicate.isToolExecutionRequired(prompt.getOptions(), response)) {var toolExecutionResult  this.toolCallingManager.executeToolCalls(prompt, response);// 判断是否返回结果if (toolExecutionResult.returnDirect()) {// Return tool execution result directly to the client.return ChatResponse.builder().from(response).generations(ToolExecutionResult.buildGenerations(toolExecutionResult)).build();}else {// 带着工具结果直接调用returnthis.internalCall(new Prompt(toolExecutionResult.conversationHistory(), prompt.getOptions()),response);}}return response;} 这里我们对大模型返回的结果进行抓包可以看到大模型想要调用的方法信息 [{assistantMessage: {toolCalls: [{id: call_b4a9cb0f04a3495d941b71,type: function,name: spring_ai_mcp_client_server1_getWeather,arguments: {\city\: \北京\}}],// 中间内容省略...chatGenerationMetadata: {metadata: {},finishReason: TOOL_CALLS,contentFilters: []}} ] mcpClient执行调用逻辑。public MonoMcpSchema.CallToolResult callTool(McpSchema.CallToolRequest callToolRequest) {return this.withInitializationCheck(calling tools, initializedResult - {if (this.serverCapabilities.tools()  null) {return Mono.error(new McpError(Server does not provide tools capability));}return this.mcpSession.sendRequest(McpSchema.METHOD_TOOLS_CALL, callToolRequest, CALL_TOOL_RESULT_TYPE_REF);});} 执行完成后程序会携带结果和上下文再次请求大模型获取结果直到大模型认为可以结束了会将最终的结果返回给用户。 此次请求的执行结果如下:6 总结本文介绍了mcp的基本底层原理mcp作为AI大模型时代的标准化交互协议具备显著的优势。对于开发者来说mcp的出现降低了功能集成的成本有更大的发展前景。但mcp当下也有很多不可回避的缺点比如频繁与大模型交互为了保证消息连贯上下文内容剧增token消耗大使用成本变高。另外在安全性方面不够健全对于提示词注入等手段没有成熟的解决方案。尽管mcp当前不是那么的完美无缺但他的出现给AI的发展提供了一种全新的交互模式和更多的可能。
http://www.pierceye.com/news/647939/

相关文章:

  • 发布个人免费网站的一般流程图宣传广告
  • php学什么可以做网站po wordpress
  • 875网站建设怎么样网站设计高端网站设计
  • qq钓鱼网站怎么制作扬州网站建设哪个好薇
  • 域名和网站空间怎么做解析南阳seo网站推广费用
  • 烟台企业网站建设国内ui网站有哪些
  • 手机网站建设选 朗创营销电商运营的核心公式
  • seo网站排名软件飞机网页设计实训报告
  • 禹城做网站做网站的教科书
  • 基木鱼建站公众号怎么做网站
  • 无水印做海报的网站百度技术培训中心
  • 如何在阿里云上做网站现在最流行的网站开发工具
  • 济宁网站建设联系方式漳州本地网
  • 口腔网站建设wordpress顶部提示
  • 葫芦岛做网站公司如皋网站开发公司
  • 国外开源 企业网站服务好质量好的网站制作
  • sql网站的发布流程品牌建设是什么意思
  • 营口网站建设价格江苏住房和建设厅网站
  • 网站稳定性不好的原因打金新开传奇网站
  • 做网站怎么上传图片厦门建站网址费用
  • 网站设计方案和技巧做设计有必要买素材网站会员吗
  • 成都制作网站软件网站别人帮做的要注意什么东西
  • 徐州建筑网站建网站要自己买服务器吗
  • 网站订单系统模板专业的做网站公司
  • 怎么做加盟美容院网站黄骅港开发区
  • 品牌高端网站制作官网做网站用的小图标
  • 成都网站设计合理柚v米科技泉州建设公司
  • 网页制作与网站建设完全学习手册软件下载网站怎么做
  • linux系统网站空间如何分析网站关键词
  • 以下属于网站页面设计的原则有查询网站空间商