掘金 人工智能 前天 11:28
mcp是怎么和大模型进行交互的,有哪些交互方式
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

MCP(Model Context Protocol)是由Anthropic提出的开放标准协议,旨在解决大型语言模型(LLM)与外部工具、数据源及服务之间的互联互通问题。它通过标准化接口,让LLM能够像拥有“感官和手脚”一样,调用工具、读取数据库、访问实时信息并执行操作,从而从“纸上谈兵”转变为能够感知世界、采取行动的智能体。MCP支持stdio、SSE和Streamable HTTP三种通信方式,并提供了Prompt驱动和Function Calling两种与LLM交互的模式。Function Calling因其更高的准确性、效率和安全性,被认为是更推荐的集成方式。

💡 MCP协议的核心价值在于打通大型语言模型(LLM)与外部世界的连接,通过标准化接口,使LLM能够调用各种工具、访问数据源和利用外部服务,从而扩展其能力边界,实现从知识问答到实际行动的转变,赋能智能体(Agent)的灵活扩展与安全协作。

🔌 MCP提供了多种通信方式以适应不同场景:stdio适用于本地命令行和容器化环境,通过标准输入输出进行通信;SSE基于HTTP长连接,支持服务器单向推送事件,常用于流式数据传输;而Streamable HTTP(基于HTTP分块传输编码)则支持双向流式通信,并允许在单个连接上进行多次响应,是未来推荐的默认传输方式。

💬 大模型与MCP工具通信主要有两种方式:Prompt驱动是通过自然语言指令要求模型生成符合MCP JSON-RPC规范的调用指令,这种方式对模型的结构化输出能力要求高,且存在可靠性和安全性风险;Function Calling则是模型原生支持的机制,模型在推理过程中直接触发结构化调用事件,框架自动处理后续的调用和结果注入,具有更高的准确性、效率和安全性。

🚀 Function Calling是目前主流且推荐的与MCP集成方式,它利用LLM内核能力,通过框架自动化流程,显著提升了调用的准确性、效率和开发便捷性。主流商业模型API如OpenAI和Anthropic,以及LangChain Agent等都基于此模式,实现了工具调用-执行-结果整合的闭环。

🔧 Prompt驱动方式在特定场景下仍有价值,例如快速原型测试、支持旧模型或在纯前端无服务器环境调用本地代理时,但需要更多工程投入来处理格式转换、错误处理和结果注入,并应对更高的风险。

什么是mcp

MCP(Model Context Protocol,模型上下文协议)是一种由 Anthropic 公司于 2024 年提出的开放标准协议,旨在解决大型语言模型(LLM)与外部工具、数据源及服务之间的互联互通问题。它通过标准化接口实现模型与多样化资源的无缝集成,推动智能体(Agent)应用的灵活扩展和安全协作。

打个比方:

大模型就像一个知识渊博但被隔离的“大脑”,它只能基于训练数据回答问题。 有了 MCP,这个大脑就获得了一套标准化的感官和手脚—— 它可以通过统一的方式调用工具、读取数据库、访问实时信息、执行操作, 从“纸上谈兵”变成真正能感知世界、采取行动的智能体。

mcp工具相当于一个脚本,可以通过prompt或者function call来告诉模型工具是做什么的,需要什么样的参数,可以让模型进行调用

mcp的三种通信方式

1. Stdio:本地交互

Stdio(标准输入/输出)传输是MCP框架中的默认传输机制,它利用标准输入/输出流在客户端和服务器之间进行通信。

工作原理

适用场景

2. SSE

SSE(Server-Sent Events)是一种服务器推送技术,使客户端能够通过HTTP连接从服务器自动接收更新,通常用于服务器向客户端发送消息更新或连续的数据流。

工作原理

在MCP中的应用

3. HTTP-Streamable

比如前端的fetch,在tcp连接上不必等待缓冲区接收到全部内容,而是对每部分内容进行解码返回,就实现了类似于http对通信方式,而且fetch相比sse更灵活,比如支持aborthandler,支持自定义请求头,支持除get(sse只支持get请求)以外的方法

2025年3月26日,MCP引入了一项关键更新:用Streamable HTTP替代原先的HTTP + SSE作为默认传输方式

工作原理

总结对比

stdio就是需要把mcp脚本下载到本地,

sse和http-streamble到mcp服务可以部署在云上,通过api请求这种去调用

大模型怎么调用mcp工具(与mcp工具进行通信)

好的,我们从 Prompt(提示词)Function Calling(函数调用) 两种核心方法深入阐述大模型(如 Claude/GPT)如何与 MCP 工具通信。


🧠 一、Prompt(提示词)驱动方式 - “告诉模型手动打电话”

核心逻辑:在对话上下文中,直接通过自然语言指令要求模型生成符合 MCP JSON-RPC 规范的结构化调用指令

适用模型:理论支持所有 LLM,但对模型的结构化输出能力要求极高(Claude 3/GPT-4 为佳)。

    工具描述注入

      在 Prompt 的开头,显式声明所有可用的 MCP 工具信息(名称、功能描述、参数 JSON Schema)。

      例如:

      你可以使用以下工具完成用户请求(调用格式为JSON):[{"name": "get_weather", "description": "查询指定城市天气", "parameters": {"type": "object", "properties": {"city": {"type": "string", "description": "城市名"}}, "required": ["city"]}}]

    指令约束声明

      强制模型结构化输出:在 Prompt 中严格规定输出格式。

      例如:

      如果用户请求需要使用工具,请输出 **仅包含且严格遵循以下 JSON 结构** 的文本:{  "tool_call": "工具名称",  "arguments": {    "参数1": "值1",    ...   }}否则输出自然语言回复。

    模型生成调用文本

      用户提问:今天北京天气怎么样?

      模型(如果决定调用工具)

      生成字符串输出:

      {"tool_call": "get_weather", "arguments": {"city": "北京"}}

    客户端提取 & 转发

      LLM 应用客户端(MCP Host)检测到输出的 JSON 文本块。客户端解析 JSON,将其转化为真正的 MCP JSON-RPC 请求。客户端通过之前建立的通信通道(stdio/Streamable HTTP)将请求发送给对应的 MCP Server

    处理结果 & 反馈模型

      MCP Server 执行工具逻辑。

      结果返回给客户端(Host)。

      客户端将工具执行结果(JSON)作为新消息注入上下文中

      模型“看到”这个结果后,生成最终的自然语言回答给用户:

      北京今天天气为:多云,气温 25℃。

⚠️ 局限与风险:


🤖 二、Function Calling(函数调用)方式 - “让模型使用内置电话”

核心逻辑:在模型推理过程中,模型识别到调用工具的意图,触发一个内部的、预定义的“函数调用事件” (包含完整的 JSON 参数)。应用框架(Host)捕获此事件并执行真正的 MCP 调用,结果自动注入后续推理。

适用模型与框架:原生支持 Function Calling 的模型(如 OpenAI GPT-3.5+, Anthropic Claude 3+, 等)+ 集成了 MCP 功能调用支持的 LLM 应用框架。

    工具功能向模型注册

      开发者向 LLM 应用框架/Host 注册可用工具列表。

      框架自动将工具信息转换成模型原生理解的“Function Calling Schema”

      注册示例如下(API级别):

      client = ChatClient(...)client.register_tool(    name="get_weather",    description="查询指定城市天气",    parameters={        "type": "object",        "properties": {            "city": {"type": "string", "description": "城市名"}        },        "required": ["city"]    })# 或自动发现并注册所有 MCP Server 提供的工具

    推理触发 Function Call

      用户提问:今天北京天气怎么样?

      模型内部决策:

        判断是否需要调用工具 (get_weather)。直接在推理过程中触发一个结构化调用事件 (API 返回的是一个特殊的 tool_calls 对象,而文本字符串输出)。此事件包含精确的 工具名 和结构化 参数列表(已根据 Schema 验证)。

    框架捕获 & 执行调用

      LLM 应用框架/Host 接收到的 API 响应不再是普通文本,而是包含 tool_calls 和占位文本的结构。框架自动解析 tool_calls,提取工具名和参数框架将参数转换成 MCP JSON-RPC 请求框架通过已建立的通信通道(stdio/Streamable HTTP)将请求发送给对应的 MCP Server 执行

    自动注入结果 & 最终推理

      MCP Server 返回结果(JSON)。框架自动收集执行结果,并将其以结构化方式(作为该 Function Call 的 “tool use result”)注入回模型的下一次输入上下文中模型自动整合结果,生成最终的自然语言回复,此过程对开发者透明。

✅ 核心优势:


📊 对比总结:Prompt vs. Function Calling

特性Prompt (提示词)Function Calling (函数调用)
核心驱动外部 Prompt 约束文本输出模型推理内核的意图识别与结构化触发
模型要求理解 Prompt 并有良好结构化输出能力的模型必须原生支持函数调用功能的模型
调用指令形式模型输出一个 JSON 格式的文本块模型在推理过程中触发一个内部的结构化调用事件
可靠性较低 (依赖 Prompt,易出错) (格式强约束,调用决策更准确)
安全性较低 (Prompt 可能被篡改)较高 (API 层控制参数)
开发者体验手动处理 JSON 解析、错误处理、结果注入框架自动处理调用、结果注入、错误处理
是否需要复杂框架支持不需要 (基本客户端即可实现)需要 (Host 框架或 API 需原生支持 Function Call)
推荐场景快速原型测试、不支持 Function Call 的模型或环境生产环境首选 (主流商业模型 API 或支持功能调用的开源框架)

📌 结论

内容就到这里了,如果有不清楚的推荐去看下下面这个up的视频,讲的蛮清楚的

【MCP是怎么对接大模型的?抓取AI提示词,拆解MCP的底层原理】www.bilibili.com/video/BV1P3…

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

MCP 模型上下文协议 大型语言模型 LLM 智能体 Function Calling
相关文章