MCP 架构全解析:Host、Client 与 Server 的协同机制

目录

🏗️ MCP 架构全解析:Host、Client 与 Server 的协同机制

📌 引言

🧩 核心架构组件

1. Host(主机)

2. Client(客户端)

3. Server(服务器)

🔧 三大核心能力

1. Tools(工具)

2. Resources(资源)

3. Prompts(提示)

🔄 通信机制

🧠 工作流程示例

🚀 应用场景



🏗️ MCP 架构全解析:Host、Client 与 Server 的协同机制

📌 引言

在人工智能应用日益复杂的今天,如何高效地将大型语言模型(LLM)与外部数据源和工具集成,成为了开发者面临的重要挑战。模型上下文协议(MCP)应运而生,提供了一种标准化的方式,简化了这一集成过程。

🧩 核心架构组件

MCP 采用了典型的客户端-服务器架构,主要包括以下三个核心组件: (Model Context Protocol)

1. Host(主机)

Host 是运行 MCP 客户端的应用程序,通常是用户直接交互的界面,如 Claude Desktop、集成开发环境(IDE)或其他 AI 工具。它负责管理 MCP 客户端的生命周期,并协调与服务器的通信。

2. Client(客户端)

Client 嵌入在 Host 中,负责与 MCP Server 建立连接并进行通信。每个 Client 与一个 Server 建立一对一的连接,处理能力协商,并在自身和服务器之间协调消息传递。 (MCP 核心概念 -- Resources(上),官方原文分析 - 知乎, 模型上下文协议MCP - AiFly - 博客园)

3. Server(服务器)

Server 是外部程序,通过标准 API 向 AI 模型暴露工具、资源和提示。它连接内部或外部资源,按照 MCP 协议对外提供服务。

🔧 三大核心能力

MCP Server 可以提供以下三种类型的标准能力:

1. Tools(工具)

Tools 是模型可调用的函数或服务,用于执行特定任务。例如,模型可以调用一个天气查询工具,获取指定城市的天气信息。

2. Resources(资源)

Resources 是供模型读取的数据源,如文件数据或 API 响应内容。它们为模型提供了丰富的上下文信息,增强了模型的理解能力。

3. Prompts(提示)

Prompts 是预定义的模板,用于指导模型生成特定内容。它们可以接受动态参数,包含资源上下文,链式多个交互,引导特定工作流程,并作为用户界面元素(如斜杠命令)呈现。 (Prompts - Model Context Protocol)

🔄 通信机制

MCP 支持两种通信机制:

  • 标准输入输出(stdio):适用于本地通信,客户端通过启动 Server 子进程,通过标准输入输出进行消息交换。

  • HTTP + SSE(Server-Sent Events):适用于远程通信,客户端通过 HTTP POST 发送请求,Server 通过 SSE 推送响应。

消息传输采用 JSON-RPC 2.0 格式,支持请求(Request)、结果(Result)、错误(Error)和通知(Notification)等消息类型。

🧠 工作流程示例

以下是 MCP 的典型工作流程:

  1. 初始化:Host 应用启动时,创建 MCP Client,并与 Server 进行能力协商。 (Model Context Protocol (MCP) an overview - Philschmid)

  2. 能力发现:Client 请求 Server 提供的 Tools、Resources 和 Prompts,Server 返回相应的列表和描述。 (Model Context Protocol (MCP) an overview - Philschmid)

  3. 上下文提供:Host 应用将资源和提示提供给用户,或将工具解析为 LLM 兼容的格式,如 JSON 函数调用。 (Model Context Protocol (MCP) an overview - Philschmid)

  4. 调用执行:如果 LLM 需要使用某个工具(例如,根据用户请求“获取 X 仓库的未解决问题”),Host 指示 Client 向相应的 Server 发送调用请求。 (Model Context Protocol (MCP) an overview - Philschmid)

  5. 结果返回:Server 执行请求的操作(例如,调用 GitHub API 获取问题列表),并将结果返回给 Client。 (Model Context Protocol (MCP) an overview - Philschmid)

  6. 响应生成:Client 将结果传递给 Host,Host 将其纳入 LLM 的上下文中,生成最终的响应。 (Model Context Protocol (MCP) an overview - Philschmid)

🚀 应用场景

MCP 的标准化设计使其在多个领域具有广泛的应用前景,包括:

  • 企业数据集成:通过 MCP,AI 模型可以访问企业内部的数据库和工具,实现智能化的数据分析和业务决策支持。

  • 智能助手开发:构建功能丰富的 AI 助手,能够根据用户的需求调用不同的工具和资源,提供个性化的服务。

  • 跨平台应用:MCP 的标准化设计使得 AI 应用可以在不同的平台和环境中部署,提升了系统的灵活性和可移植性。


### 回答1: 以下是Python实现的代码: ```python def CountDigit(number, digit): count = 0 while number != 0: if number % 10 == digit: count += 1 number //= 10 return count ``` 函数首先初始化计数器count为0,然后利用while循环遍历整数number的每一位数字。在每一次循环中,判断number的个位数是否等于digit,如果相等则count加1。最后将number除以10向下取整,以便在下一次循环中处理下一位数字。最终返回count即可。 注意:在Python 2.x版本中,整数除法会自动向下取整,但在Python 3.x版本中,需要使用“//”运算符进行整数除法。 ### 回答2: 函数CountDigit可以通过将整数number转换为字符串,然后遍历字符串中的每个字符,来统计指定数字digit的个数。具体的实现步骤如下: 1. 将整数number转换为字符串,可以使用str()函数。将转换后的字符串保存为变量num_str。 2. 初始化一个计数器count为0,用于统计指定数字digit的个数。 3. 使用for循环遍历num_str中的每个字符: - 每次循环时,判断当前字符是否等于参数digit,如果相等,则计数器count加1。 4. 循环结束后,返回计数器count的值作为结果。 下面是一个实现了上述功能的函数CountDigit的示例代码: ```python def CountDigit(number, digit): num_str = str(number) count = 0 for char in num_str: if int(char) == digit: count += 1 return count ``` 可以通过调用CountDigit函数来获取指定数字在整数中出现的次数。例如,调用CountDigit(123456789, 5)会返回数字5在整数123456789中出现的次数。 注意:上述代码假设参数number是一个整数,digit是位于[1, 9]区间内的整数,并且整数按照从左到右的顺序依次排列。如果需要处理负数或者数字出现的位置不固定的情况,可以对代码进行适当的修改。 ### 回答3: 要实现一个统计整数中指定数字的个数的函数CountDigit(number,digit),可以按照以下步骤进行实现: 1. 将整数number转化为字符串,以便于获取每一位的数字。 2. 初始化计数器count为0,用于记录指定数字digit出现的次数。 3. 遍历字符串中的每一位数字: a. 将字符串中的每一位数字转化为整数。 b. 判断该数字是否等于指定数字digit,如果相等,则计数器count加1。 4. 返回计数器count的值作为指定数字digit在整数number中出现的次数。 以下是具体的实现代码: ```Python def CountDigit(number, digit): number_str = str(number) count = 0 for i in number_str: if int(i) == digit: count += 1 return count ``` 例如,对于整数number=12345和digit=3,调用函数CountDigit(number, digit),会返回整数12345中数字3出现的次数,即2。 注意,上述实现代码假设输入的number是一个整数,digit是[1,9]区间内的整数。如果输入的参数不满足条件,则可能导致结果不准确,需要根据实际情况进行参数校验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值