- 目的: 解决 function call 平台依赖性强
- MCP (Model Context Protocol,模型上下文协议)定义了应用程序和 AI 模型之间交换上下文信息的方式。
MCP 使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型(一个中间协议层),就像 USB-C 让不同设备能够通过相同的接口连接一样。

- 整体流程

- 区别

- 组成: host(交互) , client(建立与sever的连接), server(tools), 其中server包含如下:
- Tools:使大语言模型能够通过你的 Server 执行操作。
- Resources:将 Server 上的数据和内容开放给大语言模型。
- Prompts:创建可复用的提示词模板和工作流程。

- 通信流程sse Transport (主要分sse 和本地标准io通信 stadio两种)
-
- 建立连接:通过 /sse 建立连接, 这时会返回一个专用的消息发送端点endpoint
- 初始化:请求该endpoint, 并获取server的功能列表
- 工具调用
-
-
- 获取toolList
- 执行tool
-
- 通信特点
-
- 双向异步,接收通过sse,发送通过http, 前者仅用于推送数据,后者其实只用来判断2xx
其中每向http中发送一个请求,sse就会返回一次消息,
- 双向异步,接收通过sse,发送通过http, 前者仅用于推送数据,后者其实只用来判断2xx
- mcp只是提供了一个默认的system prompt
您是一个有用的助手, 可以访问这些工具:{ tools_description} 根据用户的问题选择合适的工具。 如果不需要工具, 请直接回复。
重要提示: 当您需要使用工具时, 您必须只回复下面确切的JSON对象格式, 不回复别的内容: {
"tool": "tool-name",
"arguments": {
"argument-name": "value"
}
}
收到执行结果后:
(1) 将原始数据转换为自然的对话式响应
2.保持回答简洁但信息丰富
3.关注最相关的信息
4.使用用户问题中的适当上下文
5.避免简单地重复原始数据
你只能使用上面明确定义的工具。
- 模型怎么决定需要调用哪些fc:
模型是通过 prompt engineering,即提供所有工具的结构化描述和 few-shot 的 example 来确定该使用哪些工具。
理解其本质
1.采用client-host-server架构,支持多种服务器连接;
2.实现了有状态的双向RPC模型,结合了事件驱动特性;
3.提供了标准化的工具调用和资源访问机制;
4.支持动态能力协商和功能发现;
5.相比较MQ、API、WS,占据了独特的功能位置,专为AI应用与外部系统集成而优化;
总结
- mcp是一套协议,其中定义的一些组件,需要承担特定的作用

- 其中mcp的优势
-
- mcp的链路中,会不断去获取tool list,如果参数什么的发生变化,会被立刻感知到,而不像原来那样如果tool发生了参数变化,会导致调用报错
- 通过prompt和tool对协议的遵守,来指定一套tool api标准的接口协议,当大模型返回planing的结果之后,直接拿去做调用,而不是有不同的api格式,去对接不同的厂商,这也是为什么说mcp协议是转接口
- 两个协议,http+sse,根据tools的情况可以来回切换
- 核心代码
async def request(self, req: McpRequest):
if req.method == "initialize":
await self.queue.put({"event": "message", "data": self.response(self.info, req.id)})
elif req.method == "tools/list":
await self.queue.put({"event": "message", "data": self.response({"tools": self.list_tool()}, req.id)})
elif req.method == "tools/call":
1万+

被折叠的 条评论
为什么被折叠?



