规划设计导航网站高新快速建设网站找哪家
2025/12/29 23:53:44 网站建设 项目流程
规划设计导航网站,高新快速建设网站找哪家,福建省建设工程职业注册网站,google官网入口下载前言对于 MCP 是什么以及如何开发一个 MCP Server 的文章现在可以说是汗牛充栋#xff0c;不再拾人牙慧。我们通过使用 MCP 的一些场景#xff0c;看看 MCP 到底有什么魔力#xff0c;解决了什么问题。MCP 可以做什么MCP 和 Function Call很多人说 MCP 就是一个协议#xf…前言对于 MCP 是什么以及如何开发一个 MCP Server 的文章现在可以说是汗牛充栋不再拾人牙慧。我们通过使用 MCP 的一些场景看看 MCP 到底有什么魔力解决了什么问题。MCP 可以做什么MCP 和 Function Call很多人说 MCP 就是一个协议就是对传统 function calling 技术的一层封装。我们从 function calling 出发看看 MCP 到底做了什么解决了什么问题。function call众所周知LLM (Large Language Model) 由于其架构和训练方式的限制有两个非常致命的弱点内部存储的知识是有限的内容广度和时间范围有限制训练完毕的那一刻记忆就封印了可以看到最新的 GPT-5最多也只有 2024 年十一国庆之前的知识。要知道过去的这接近大半年的时间世界发生了很多事情。GPT-5 的知识结构里显然不会有 DeepSeek更不要说对其的了解了。不擅长做数学运算这一点从他的实现原理来说是几乎无解的。基于 Transformer 架构的 LLM 只能基于输入不断预测输出说白了他是在猜测一个合理的输出。这种模式对于输出没有确定答案的创作类型课题非常合适比如写作、绘画之类的生成式任务LLM 可以自由发挥。但是算术是一个纯粹的计算任务无论是掰着手指头还是借助算盘亦或是使用计算器算术的结果有唯一性112是颠之不破的真理而 LLM 恰好不擅长这件事。记得 ChatGPT 刚出来的时候很多人让做数学题遇到位数多一些小学生都会做的加减法他就会翻车,因此被很多人嘲讽。用户询问的问题千奇百怪有问天气的有用来算命甚至还有把他朋友用来谈心的。对于这么多样的问题只要问题陷入上面这两个缺陷时ChatGPT 就无能为力了。面对这种类型的难题function call 应运而生。对于查询天气这种大模型原本无能为力的事情借助 function call 得以优雅的解决。def get_current_weather(location, unitcelsius): # 实际应用中这里会调用天气API return json.dumps({location: location, temperature: 22, unit: unit}) # 用户询问天气 response openai.ChatCompletion.create( modelgpt-3.5-turbo, messages[{role: user, content: 北京的天气}], functions[{ name: get_current_weather, description: 获取指定位置的当前天气, parameters: { type: object, properties: { location: {type: string, description: 城市和地区}, unit: {type: string, enum: [celsius, fahrenheit]}, }, required: [location], }, }], ) response_message response.choices[0].message # 从返回的结果中确定是否需要 function call if response_message.get(function_call): function_name response_message[function_call][name] function_args json.loads(response_message[function_call][arguments]) # 调用本地函数 function_response globals()[function_name](**function_args) messages.append(response_message) # 添加助手的函数调用消息 messages.append( { role: function, name: function_name, content: function_response, } ) second_response openai.ChatCompletion.create( modelgpt-3.5-turbo, messagesmessages, )这里的实现很简单通过 functions 参数事先给 LLM 预置一个方法 ,其中包括这个方法用来做什么以及方法的参数信息。LLM 在推理的过程中会参考这些信息如果用户的提问恰好符合这个方法的描述LLM 就会返回这个参数名称让开发者调用对应的方法获取获取信息并将这些信息再次传递给 LLMLLM 在综合这些信息给出一个合适的回答。通过给functions参数定义json schema格式的方法描述模型就可以基于用户 query 返回合适的结果了。同时可以看到functions支持数组类型的输入也就是说可以支持多个 function。实际实现中根据模型返回的 function name 做映射调用即可。可以说function call 让 LLM 如虎添翼 function call解决了 ChatGPT 的两个主要限制数据实时性问题通过连接实时数据源和与已有应用系统集成问题通过调用业务系统API。function call 有什么问题function call 看起来不错但是他也有很多问题function call 不是协议他是具体实现。他只是一种解题思路其他大模型也可以支持 function call ,但是实现细节不一定甚至为了避免被大家说是抄作业会刻意修改实现细节相同输入参数中 functions 如何定义返回的 response 中从哪个字段获取可以调用的 function name各个 LLM 都有不同的实现因此切换不同的 LLM 之后function call 的迁移成本非常高。function 的 json schema 描述是一个 json 字符串很难维护和共享无法形成生态。当定义的 function 越来越多时每次调用 LLM 的 input token 就会越来越多用户问的问题可能都不需要 function call但是还是会带上这些参数无形中浪费了算力。可以看到 function call 本身还是依赖 LLM 的能力不同的 LLM 需要通过不同的 system prompt 进行约束确保模型可以正常的返回 function name 和参数。不同的 LLM、不同的 function json schema 、不同的 system prompt 约束随着业务的发展这将会是一个越来越复杂的问题。最后如果一个 LLM 不支持 function call,面对用户诸如北京今天的天气483939x998439这类模型无法处理的问题就得添加一个中间层想办法绕过 LLM 用传统的方式解决问题, 或者添加更多的提示词让模型去调用预置的工具。MCP面对 function call 存在的问题MCP 应用而生, 对于一个典型的 MCP 使用场景, 核心实现如下async def connect_to_server(self): 连接到 MCP 服务器 server_params StdioServerParameters( commandpython, args[math_server.py], envNone ) stdio_transport await self.exit_stack.enter_async_context( stdio_client(server_params)) stdio, write stdio_transport self.session await self.exit_stack.enter_async_context( ClientSession(stdio, write)) await self.session.initialize() async def process_query(self, query: str) - str: messages [ {role: user, content: query} ] # 获取可用工具列表 response await self.session.list_tools() # 构建函数调用格式 available_tools [{ type: function, function: { name: tool.name, description: tool.description, parameters: tool.inputSchema } } for tool in response.tools] # 使用 Deepseek 模型通过 Ollama 生成回复 try: response self.client.chat.completions.create( modeldeepseek-chat, # 使用 Ollama 中的 Deepseek 模型 messagesmessages, toolsavailable_tools, tool_choiceauto ) # 处理响应 content response.choices[0] message content.message # 检查是否需要工具调用 if hasattr(message, tool_calls) and message.tool_calls: # 执行工具调用 tool_call message.tool_calls[0] tool_name tool_call.function.name tool_args json.loads(tool_call.function.arguments) # 调用 MCP 工具 result await self.session.call_tool(tool_name, tool_args) # 将结果添加到消息中 messages.append(message.model_dump()) messages.append({ role: tool, content: str(result.content[0].text), tool_call_id: tool_call.id, }) # 让 Deepseek 继续处理结果 response self.client.chat.completions.create( modeldeepseek-coder, messagesmessages, ) return response.choices[0].message.content return message.content except Exception as e: return f发生错误: {str(e)}可以看到使用 mcp 提供的 SDK 之后将 function 的定义规范化了. 提出了 MCP Server 这样一个概念专门用来提供可以让 MCP Client 调用的方法。无论是 Python、JavaScript 还是 Go ,都可以用于提供可供 Client 端调用的方法只要遵循 MCP 协议就好。 使用 MCP 的整个流程可以总结如下可以看到最核心的步骤就是1. 从 MCP Server 获取可用的工具2. 将可用的工具通过合理的方式传递给 LLM3. 基于 LLM 的返回结果处理调用工具返回最终的结果而 Cursor/Claude DeskTop/Trae 的这样 IDE 其实在做的就是以上这些事。当然这起其中的细节很多比如如何配置 system prompt 确保 LLM 一定会调用合适的工具如果用户本地安装了几十个 MCP Server, 怎么选择工具如何尽可能的避免出现幻觉。这其中有很多 prompt engineer 的工作。不同 LLM 厂商对于 function call 定义有差异这件事木已成舟MCP 协议只能做约束这些 IDE 通过对这些 function call 用法的兼容让开发者聚焦于 MCP Server 的开发即可只要按照协议实现使用任意 LLM 都能确保正确的调用相应的方法。了解了这个与原理其实你也可以摆脱这些 IDE 自己做一个可以支持 MCP Server 的实现但是似乎没有必要。MCP 解决了什么问题MCP 本身就是协议因此如果更多人参与进来开始遵循和支持 MCP那么对整个 AI 生态的发展就是好事。就像互联网时代大家都基于 HTTP 协议做应用即便各自的业务千差万别但是当需要合作的时候就会方便一些。对于上面 function call 提到的问题MCP 并没有完全解决。MCP 让开发者放心大胆的去开发 MCP Server各类 MCP Host 可以非常轻松的配置 MCP Server,session.list_tools()返回的可用工具越来越多默认情况下会携带所有工具一股脑的传给 LLMtoken 浪费的情况依然存在。尤其是现阶段 MCP Server 的质量良莠不齐各类 MCP Server 站点提供了大量可用的 MCP Server但是对这些 MCP Server 的质量似乎没有人做把控就像移动互联网早期的应用市场随便做个东西就能发布。当然这个问题无法靠 MCP 解决理论上我们可以在用户 Query 和最终的 LLM 请求之间再添加一层专门用来选择合适的available tools类似 RAG 基于用户的问题选择合适的 tools 给 LLM。Cursor/Claude DeskTop/Trae这类 MCP Host 应该早就这么干了毕竟这是一个很容易想到的思路。我们可以对比一下 LLM 使用 function call 和 MCP 与外接交互的差异可以清晰的看到没有 MCP 的时候LLM 与外部世界交互是直接进行交互的。而 MCP 出现之后作为中间层将 LLM 和外界工具进行了隔离这样就避免了随着 LLM 的发展业务被某个LLM 深度绑定的囧境。总结MCP 本身并无法提升 LLM 的能力他不会让 LLM 变得更聪明。但是他提供了一种让应用层开发者更友好的与 LLM 进行融合的方案。MCP 自然不是 function call 的替代者同时 MCP 也不仅仅是一个约束 LLM 如何与调用外部函数的协议他还有更多的内容值得我们去深入学习。学习资源推荐如果你想更深入地学习大模型以下是一些非常有价值的学习资源这些资源将帮助你从不同角度学习大模型提升你的实践能力。一、全套AGI大模型学习路线AI大模型时代的学习之旅从基础到前沿掌握人工智能的核心技能​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取二、640套AI大模型报告合集这套包含640份报告的合集涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师还是对AI大模型感兴趣的爱好者这套报告合集都将为您提供宝贵的信息和启示​因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取三、AI大模型经典PDF籍随着人工智能技术的飞速发展AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型如GPT-3、BERT、XLNet等以其强大的语言理解和生成能力正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。因篇幅有限仅展示部分资料需要点击文章最下方名片即可前往获取四、AI大模型商业化落地方案作为普通人入局大模型时代需要持续学习和实践不断提高自己的技能和认知水平同时也需要有责任感和伦理意识为人工智能的健康发展贡献力量。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询