MCP的概念

MCP(Model Context Protocol,模型上下文协议)是一种标准化协议,用于连接大语言模型和外部工具。它定义了模型与工具之间的通信方式,使得模型能够调用外部工具来获取信息、执行操作,从而扩展其能力范围。前面的文章《什么是智能体:从概念认知到平台选型》有讲过智能体的应用搭建,MCP也很重要,有些自己实现的工具,可以用这种插件的方式进行开发后再平台上进行注册。

在传统的大语言模型应用中,模型只能基于训练数据和用户输入生成内容,无法与外部系统交互。而通过MCP协议,大语言模型可以调用外部工具,如地理信息查询、价格计算、数据库查询等,从而获取实时信息,执行复杂操作,提高生成内容的准确性和实用性。

MCP的核心价值

MCP协议的核心价值在于:

  1. 能力扩展:突破大语言模型的知识边界,使其能够访问实时信息和专业工具
  2. 智能协作:实现模型与工具的智能协作,让模型专注于决策和推理,工具专注于执行具体任务
  3. 标准化接口:提供统一的接口规范,简化工具集成和开发流程
  4. 上下文保持:在多轮对话中保持上下文信息,提供连续一致的用户体验
  5. 可插拔架构:支持工具的动态注册和管理,实现灵活的功能扩展

MCP与传统API调用的对比

特性 MCP协议 传统API调用
调用方式 模型自主决策调用 开发者硬编码调用
上下文管理 自动保持上下文 需要手动管理上下文
工具发现 模型自动发现可用工具 开发者需要了解所有API
参数处理 自动参数验证和转换 需要手动验证和转换
错误处理 标准化错误处理机制 每个API需要单独处理
扩展性 高度可扩展,支持动态注册 扩展性受限,需要修改代码

常用MCP框架

目前,常用的MCP框架包括:

框架 特点 适用场景 优势 劣势
FastMCP 轻量级MCP实现,本项目使用的框架 中小型应用、快速原型开发 简单易用、性能优异、启动快速 功能相对基础,生态较小
LangChain 功能丰富的大语言模型应用开发框架 复杂应用、企业级项目 生态丰富、工具集成多、支持多种模型 学习曲线较陡、配置复杂
LlamaIndex 专注于知识增强的大语言模型应用 知识密集型应用、文档处理 强大的文档处理能力、检索增强生成 工具集成相对有限
OpenAI Functions OpenAI官方提供的函数调用机制 OpenAI模型专用场景 与OpenAI模型深度集成、官方支持 仅支持OpenAI模型、通用性差

框架选择建议

选择MCP框架时,应考虑以下因素:

  1. 项目规模:小型项目推荐FastMCP,大型项目可考虑LangChain
  2. 功能需求:知识密集型应用优先LlamaIndex,通用应用可选择LangChain
  3. 模型兼容性:使用OpenAI模型可考虑OpenAI Functions,多模型场景推荐LangChain
  4. 性能要求:对性能要求高的场景推荐FastMCP
  5. 开发效率:快速开发和原型验证推荐FastMCP

MCP的实现细节

MCP的核心组件

MCP协议的实现主要包含以下核心组件:

  1. 服务端:负责注册和管理工具,处理模型的调用请求
  2. 客户端:负责与服务端通信,发送工具调用请求并接收结果
  3. 工具注册表:存储所有可用工具的信息,包括名称、参数、描述等
  4. 参数验证器:验证和转换输入参数,确保参数类型正确
  5. 上下文管理器:在多轮对话中保持上下文信息
  6. 错误处理器:处理工具调用过程中的错误,返回标准化的错误信息

MCP的工作原理

MCP协议的工作流程如下:

  1. 工具注册:开发者通过装饰器将函数注册为MCP工具
  2. 服务启动:MCP服务启动并监听指定端口
  3. 模型发现:模型通过API获取可用工具列表和描述
  4. 工具调用:模型根据用户需求选择合适的工具并发送调用请求
  5. 参数处理:服务端验证和转换输入参数
  6. 执行工具:调用实际的工具函数执行具体任务
  7. 结果返回:将工具执行结果返回给模型
  8. 结果处理:模型根据工具返回的结果生成最终响应

实现步骤详解

以之前学习时候智能调价系统为例,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:生成市场分析报告

工具注册流程:

  1. 定义异步函数并添加@mcp.tool()装饰器
  2. 声明函数参数和返回类型
  3. 编写函数文档字符串,说明参数用途和返回值
  4. 实现核心业务逻辑

智能调价工具的主要功能:

  • 接收房源信息(房型、位置、卧室数、浴室数、容纳人数等)
  • 获取地理位置和周边信息(通过高德地图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工作流程:

  1. 工具注册:开发者通过装饰器将函数注册为MCP工具
  2. 服务启动:MCP服务启动并监听指定端口
  3. 模型发现:大语言模型通过API获取可用工具列表和描述
  4. 工具调用:模型根据用户需求选择合适的工具并发送调用请求
  5. 参数处理:服务端验证和转换输入参数
  6. 执行工具:调用实际的工具函数执行具体任务
  7. 结果返回:将工具执行结果返回给模型
  8. 结果处理:模型根据工具返回的结果生成最终响应

智能调价系统的MCP优势:

  • 标准化接口:统一的工具注册和调用方式
  • 智能决策:模型自主选择合适的工具
  • 实时数据:通过API获取实时的地理位置和周边信息
  • 双模式处理:支持大语言模型和本地算法双模式
  • 容错机制:网络异常时自动回退到本地算法
  • 灵活扩展:支持动态注册新的工具和功能

总结

MCP(模型上下文协议)是一种标准化协议,用于连接大语言模型和外部工具,使模型能够调用工具获取信息、执行操作,从而扩展其能力范围。在本文,只是一下MCP的一些概念为主,不会很详细讲一个完善的开发,后面的文章会有MCP的开发后怎么在蚂蚁百宝箱上进行注册使用。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐