MCP协议介绍和应用细节简明教程
MCP协议介绍和应用细节简明教程
在 AI 逐步渗透到各类应用的今天,我们需要一种 通用的通信协议 ,让 AI 能够 轻松对接各种业务接口 ,以提供更加智能化的功能。 MCP(Model Communication Protocol) 就是这样一种协议,它定义了一套标准化的 C/S(Client/Server)交互机制 ,可以让 AI 通过 Function Calling 机制 ,调用 MCP 提供的各种功能,比如 获取天气、查询时间、控制物联网设备等 。 本文将详细介绍 MCP 协议的概念、如何调用 MCP 服务,以及 Function Calling 调用 MCP 服务的流程细节,以 OpenAI 举例 。 ## 1. 什么是 MCP?
1.1 MCP 的来历和用途
MCP(Model Communication Protocol,模型通信协议) 是一种通用的 AI 接口协议 ,由 Anthropic 推出,用于标准化 AI 和业务服务的交互方式,解决社区中工具实现风格不统一、难以跨模型共享的问题 在 AI 应用开发中,模型本身并不具备执行外部操作的能力,比如: * 查询 天气 数据
- 获取 当前时间
- 访问 数据库
- 控制 物联网设备
为了解决这个问题,MCP 提供了一种 统一的 API 交互协议 ,让 AI 可以像调用函数一样,与各种业务接口交互, 提高通用性、可扩展性和跨平台能力 。 ### 1.2 MCP 的优势
✅ 标准化 JSON 交互 :请求和返回数据采用 JSON 格式 ,保证兼容性。 ✅ 兼容 Function Calling :可以无缝配合 Function Call 机制,让 AI 具备调用外部 API 的能力。 ✅ 解耦 AI 和业务逻辑 :AI 不需要硬编码 API 逻辑,只需要根据 Function Call 选择合适的 MCP 方法,提升开发效率。 ## 2. 如何调用 MCP?
我们首先要获取 MCP 服务提供的函数列表,然后将其转换成对应模型的 Function Call ,在 Function Calling 机制 下,AI 不会直接调用 MCP API ,而是 解析用户意图,决定调用哪个 MCP 函数 ,然后 由开发者解析 AI 返回的 function call 相关请求,获取需要调用的函数名和参数 ,进而手动调用 MCP 服务对应功能。如下: 步骤 角色 动作 1️⃣ 用户 发送问题
"请告诉我北京的天气"2️⃣ AI模型 解析问题,选择 function call{ "name": "get_weather", "arguments": { "city": "北京" } }3️⃣ 代码 解析 response,提取 function name & 参数 4️⃣ 代码 调用 MCP APIget_weather("北京")5️⃣ MCP 服务器 返回天气数据{ "weather": "Sunny", "temperature": "22°C" }6️⃣ 代码 把 MCP 结果作为function角色消息,传回 OpenAI 7️⃣ AI模型 生成自然语言回答"北京今天是晴天,气温 22°C"### 2.1 MCP 的请求与响应格式 🔹 客户端请求(AI → MCP 服务器) ``` { "request_id": "123456", "function": "get_weather", "parameters": { "city": "北京" } }
🔹 服务器返回(MCP → AI) ```
{
"request_id": "123456",
"status": "success",
"result": {
"city": "北京",
"weather": "Sunny",
"temperature": "22°C"
}
}
3. Function Call 技术细节
3.1 解析用户意图,选择正确的函数
模型通过 Function Calling 机制,可以分析用户的输入,并自动选择最合适的函数。例如: 用户输入 : ``` "请告诉我北京的天气和当前时间"
AI 解析 function call ```
{
"function_calls": [
{
"name": "get_current_time",
"arguments": {}
},
{
"name": "get_weather",
"arguments": {
"city": "北京"
}
}
]
}
AI 识别到用户的问题涉及两个 API: * get_current_time (获取当前时间)
get_weather(获取天气信息) AI 主要依赖description来确定 function 的作用,而name只是辅助信息! ### 3.2 解析 AI 返回的 function call,并执行 MCP 逻辑 AI 只会返回 调用建议 ,不会自动执行函数。我们需要解析 function call ,并手动调用 MCP 服务器。 ``` import openai import requests import uuid import json
openai.api_key = "your-openai-api-key"
MCP协议介绍和应用细节简明教程
functions = [ { "name": "get_current_time", "description": "获取当前时间", "parameters": {} }, { "name": "get_weather", "description": "获取指定城市的天气", "parameters": { "city": { "type": "string", "description": "查询天气的城市名称" } } } ]
MCP协议介绍和应用细节简明教程
user_input = "请告诉我北京的天气"
MCP协议介绍和应用细节简明教程
response = openai.ChatCompletion.create( model="gpt-4-turbo", messages=[{"role": "user", "content": user_input}], functions=functions )
MCP协议介绍和应用细节简明教程
if response["choices"][0]["finish_reason"] == "function_call": function_call = response["choices"][0]["message"]["function_call"] function_name = function_call["name"] parameters = json.loads(function_call.get("arguments", "{}"))
print(f"AI 选择调用: {function_name}, 参数: {parameters}")
# 2️⃣ 调用 MCP 服务器
def call_mcp_server(function_name, parameters={}):
url = "http://127.0.0.1:5000/mcp"
request_id = str(uuid.uuid4())
payload = {
"request_id": request_id,
"function": function_name,
"parameters": parameters
}
response = requests.post(url, json=payload)
return response.json()
# 执行 MCP 逻辑
mcp_response = call_mcp_server(function_name, parameters)
print("MCP 服务器返回:", mcp_response)
# 3️⃣ 让 AI 进行最终总结
if "result" in mcp_response:
ai_response = openai.ChatCompletion.create(
model="gpt-4-turbo",
messages=[
{"role": "user", "content": user_input},
{"role": "assistant", "content": None, "function_call": function_call},
{"role": "function", "name": function_name, "content": json.dumps(mcp_response["result"])}
]
)
print("最终 AI 回复:", ai_response["choices"][0]["message"]["content"])
### 3.3 让 AI 总结最终结果并回复
调用 MCP 服务器后,返回的结果需要 重新传递给 OpenAI,让 AI 生成自然语言回复 : ```
{"role": "function", "name": "get_weather", "content": "MCP返回的天气数据"}
AI 看到这个数据后,就能生成最终的回答: ``` "北京今天是晴天,气温 22°C,适合外出游玩!"
## 4. 未来展望
✅ 标准化 API 调用 (适用于 AI + 业务集成) ✅ 智能客服、自动化办公、物联网控制 ✅ 提升 AI 可操作性,使 AI 具备真正的执行能力! MCP 让 AI 迈向更强大的执行能力,而 Function Calling 让 AI 能理解并合理调用 API, 这才是 AI 迈向真正智能化的关键!
> 原文链接: https://www.cnblogs.com/magicdmer/p/18787748