什么是智能体:简单了解MCP
MCP的概念
MCP(Model Context Protocol,模型上下文协议)是一种标准化协议,用于连接大语言模型和外部工具。它定义了模型与工具之间的通信方式,使得模型能够调用外部工具来获取信息、执行操作,从而扩展其能力范围。前面的文章《什么是智能体:从概念认知到平台选型》有讲过智能体的应用搭建,MCP也很重要,有些自己实现的工具,可以用这种插件的方式进行开发后再平台上进行注册。
在传统的大语言模型应用中,模型只能基于训练数据和用户输入生成内容,无法与外部系统交互。而通过MCP协议,大语言模型可以调用外部工具,如地理信息查询、价格计算、数据库查询等,从而获取实时信息,执行复杂操作,提高生成内容的准确性和实用性。
MCP的核心价值
MCP协议的核心价值在于:
- 能力扩展:突破大语言模型的知识边界,使其能够访问实时信息和专业工具
- 智能协作:实现模型与工具的智能协作,让模型专注于决策和推理,工具专注于执行具体任务
- 标准化接口:提供统一的接口规范,简化工具集成和开发流程
- 上下文保持:在多轮对话中保持上下文信息,提供连续一致的用户体验
- 可插拔架构:支持工具的动态注册和管理,实现灵活的功能扩展
MCP与传统API调用的对比
| 特性 | MCP协议 | 传统API调用 |
|---|---|---|
| 调用方式 | 模型自主决策调用 | 开发者硬编码调用 |
| 上下文管理 | 自动保持上下文 | 需要手动管理上下文 |
| 工具发现 | 模型自动发现可用工具 | 开发者需要了解所有API |
| 参数处理 | 自动参数验证和转换 | 需要手动验证和转换 |
| 错误处理 | 标准化错误处理机制 | 每个API需要单独处理 |
| 扩展性 | 高度可扩展,支持动态注册 | 扩展性受限,需要修改代码 |
常用MCP框架
目前,常用的MCP框架包括:
| 框架 | 特点 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|---|
| FastMCP | 轻量级MCP实现,本项目使用的框架 | 中小型应用、快速原型开发 | 简单易用、性能优异、启动快速 | 功能相对基础,生态较小 |
| LangChain | 功能丰富的大语言模型应用开发框架 | 复杂应用、企业级项目 | 生态丰富、工具集成多、支持多种模型 | 学习曲线较陡、配置复杂 |
| LlamaIndex | 专注于知识增强的大语言模型应用 | 知识密集型应用、文档处理 | 强大的文档处理能力、检索增强生成 | 工具集成相对有限 |
| OpenAI Functions | OpenAI官方提供的函数调用机制 | OpenAI模型专用场景 | 与OpenAI模型深度集成、官方支持 | 仅支持OpenAI模型、通用性差 |
框架选择建议
选择MCP框架时,应考虑以下因素:
- 项目规模:小型项目推荐FastMCP,大型项目可考虑LangChain
- 功能需求:知识密集型应用优先LlamaIndex,通用应用可选择LangChain
- 模型兼容性:使用OpenAI模型可考虑OpenAI Functions,多模型场景推荐LangChain
- 性能要求:对性能要求高的场景推荐FastMCP
- 开发效率:快速开发和原型验证推荐FastMCP
MCP的实现细节
MCP的核心组件
MCP协议的实现主要包含以下核心组件:
- 服务端:负责注册和管理工具,处理模型的调用请求
- 客户端:负责与服务端通信,发送工具调用请求并接收结果
- 工具注册表:存储所有可用工具的信息,包括名称、参数、描述等
- 参数验证器:验证和转换输入参数,确保参数类型正确
- 上下文管理器:在多轮对话中保持上下文信息
- 错误处理器:处理工具调用过程中的错误,返回标准化的错误信息
MCP的工作原理
MCP协议的工作流程如下:
- 工具注册:开发者通过装饰器将函数注册为MCP工具
- 服务启动:MCP服务启动并监听指定端口
- 模型发现:模型通过API获取可用工具列表和描述
- 工具调用:模型根据用户需求选择合适的工具并发送调用请求
- 参数处理:服务端验证和转换输入参数
- 执行工具:调用实际的工具函数执行具体任务
- 结果返回:将工具执行结果返回给模型
- 结果处理:模型根据工具返回的结果生成最终响应
实现步骤详解
以之前学习时候智能调价系统为例,MCP的实现主要包括以下几个核心步骤:
1. 初始化MCP服务
首先,创建一个FastMCP实例作为智能调价服务的核心,并加载必要的依赖和环境变量:
from fastmcp import FastMCP
from dotenv import load_dotenv
# 加载环境变量
load_dotenv()
# 创建FastMCP实例
mcp = FastMCP("smart-pricing-assistant")
# 可选:服务预热,提高首次请求响应速度
async def warmup_service():
# 预热大语言模型客户端
# 预热高德地图API连接
# 预热地理位置编码服务
pass
2. 定义智能调价工具
使用@mcp.tool()装饰器注册智能调价相关的工具函数,供大语言模型调用:
核心工具函数:
gen_pricing_suggestions:为民宿生成定价建议gen_market_analysis:生成市场分析报告
工具注册流程:
- 定义异步函数并添加
@mcp.tool()装饰器 - 声明函数参数和返回类型
- 编写函数文档字符串,说明参数用途和返回值
- 实现核心业务逻辑
智能调价工具的主要功能:
- 接收房源信息(房型、位置、卧室数、浴室数、容纳人数等)
- 获取地理位置和周边信息(通过高德地图API)
- 分析市场数据和竞争对手价格
- 优先使用大语言模型生成定价建议
- 大语言模型调用失败时回退到本地算法
- 返回结构化的定价建议和市场分析
3. 启动智能调价MCP服务
配置服务地址和端口,启动监听:
# 启动智能调价MCP服务
mcp.run(
transport="sse",
host="0.0.0.0",
port=8002,
path="/mcp",
log_level="debug",
)
感兴趣的同学可以去查查SSE的方式,这里不细说。
4. 客户端调用智能调价工具
大语言模型通过HTTP请求调用智能调价工具:
from fastmcp import Client
async def test_smart_pricing():
async with Client("http://localhost:8001/mcp") as client:
# 获取可用工具列表
tools = await client.get_tools()
# 调用定价建议工具
pricing_result = await client.call_tool(
"gen_pricing_suggestions",
{
"property_type": "公寓",
"location": "北京市朝阳区三里屯",
"bedrooms": "2",
"bathrooms": "1",
"guest_capacity": "4",
"season": "旺季",
"facilities": ["WiFi", "空调", "洗衣机", "冰箱"],
"competitor_prices": ["800", "850", "900", "950"]
}
)
# 调用市场分析工具
market_analysis_result = await client.call_tool(
"gen_market_analysis",
{
"location": "北京市朝阳区三里屯",
"season": "旺季"
}
)
5. MCP工作流程总结
完整的MCP工作流程:
- 工具注册:开发者通过装饰器将函数注册为MCP工具
- 服务启动:MCP服务启动并监听指定端口
- 模型发现:大语言模型通过API获取可用工具列表和描述
- 工具调用:模型根据用户需求选择合适的工具并发送调用请求
- 参数处理:服务端验证和转换输入参数
- 执行工具:调用实际的工具函数执行具体任务
- 结果返回:将工具执行结果返回给模型
- 结果处理:模型根据工具返回的结果生成最终响应
智能调价系统的MCP优势:
- 标准化接口:统一的工具注册和调用方式
- 智能决策:模型自主选择合适的工具
- 实时数据:通过API获取实时的地理位置和周边信息
- 双模式处理:支持大语言模型和本地算法双模式
- 容错机制:网络异常时自动回退到本地算法
- 灵活扩展:支持动态注册新的工具和功能
总结
MCP(模型上下文协议)是一种标准化协议,用于连接大语言模型和外部工具,使模型能够调用工具获取信息、执行操作,从而扩展其能力范围。在本文,只是一下MCP的一些概念为主,不会很详细讲一个完善的开发,后面的文章会有MCP的开发后怎么在蚂蚁百宝箱上进行注册使用。
更多推荐

所有评论(0)