当前位置: 首页 > news >正文

MCP从零开始

MCP简介

MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于去年11月正式提出。MCP解决的最大痛点就是Agent开发中调用外部工具的技术门槛过高的问题。

能调用外部工具,是大模型进化为智能体Agent的关键,如果不能调用外部工具,那么大模型仅仅只是聊天机器人。由于底层技术限制,大模型本身是无法和外部工具直接通信的,因此Function calling的思路就此诞生,即创建一个外部函数(function)作为中介,一边传递大模型的请求,另一边调用外部工具,最终让大模型能够间接的调用外部工具。如下图所示:

Function Calling 的核心思想是: 将大语言模型的语言理解能力与外部工具的功能结合起来,让大语言模型能够理解用户的意图,并调用合适的工具来完成任务。唯一的问题就是,编写这个外部函数的工作量太大了,一个简单的外部函数往往就得上百行代码。

MCP目标,就是能在Agent开发过程中,让大模型更加便捷的调用外部工具, 统一Function calling的运行规范。

首先是先统一名称,MCP把大模型运行环境称作 MCP Client,也就是MCP客户端,同时,把外部函数运行环境称作MCP Server,也就是MCP服务器,然后,统一MCP客户端和服务器的运行规范,并且要求MCP客户端和服务器之间,也统一按照某个既定的提示词模板进行通信。如下图所示:

这种设计的好处就是可以避免MCP服务器的重复开发,即避免外部函数重复编写,大家有一个人开发了一个服务器就好,开发完大家都能复制到自己的项目里来使用,不用每个人每次都单独写一套。目前GitHub上就出现了海量的已经开发好的MCP 服务器,从SQL数据库检索、到网页浏览信息爬取,从命令行操作电脑、到数据分析机器学习建模等。

下面摘取两张MCP官网的图形象的说明MCP。

MPC出现之前:

MPC出现之后:

MCP 有以下几个核心功能:

  • Resources 资源
  • Prompts 提示词
  • Tools 工具
  • Sampling 采样
  • Roots 根目录
  • Transports 传输层

其中 MCP 的传输层支持了 2 种协议的实现:stdio(标准输入/输出)和 SSE(服务器发送事件),因为 stdio 更为常用,所以本文会以 stdio 为例。

开发一个简单的MPC Server

MCP 采用 客户端-服务器(Client-Server)架构,其中主机应用可以连接多个 MCP 服务器: 

    设置开发环境

    安装 uv 

    Linux / Mac 安装uc

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Windows 安装 uv(建议使用 WSL)

    wsl curl -LsSf https://astral.sh/uv/install.sh | sh

    或者

    pip3 install uv

    创建项目目录并设置环境

    # 初始化项目
    uv init mympc
    cd mympc
    
    # 创建虚拟环境并进入虚拟环境
    uv venv
    source .venv/bin/activate
    
    # 安装基本依赖
    uv add "mcp[cli]"
    
    # 创建server文件
    touch mympc.py

    编写代码

    #mymcp.py
    from mcp.server.fastmcp import FastMCP
     
    mcp = FastMCP("Demo")# 这个Demo就是MCP Server的名字
     
    @mcp.tool()
    def add(a: int, b: int) -> int:
        """Add two numbers"""
        # print('...', file=sys.stderr)
        return a+b
     
     
    if __name__ == "__main__":
        print("Starting MCP server...")
        mcp.run(transport='stdio')

    调试服务

    mcp dev mymcp.py

    运行后,如果如下图所示,则表明成功。

    在浏览器中输入:http://localhost:5173,按下面步骤:

    运行结果如下:

    注意:一些图片来源与网络!

    相关文章:

  • 网页设计师证书考试搜索引擎推广和优化方案
  • 网站公安局备案株洲24小时新闻
  • 移动网站开发认证企业查询平台
  • 上海网络推广工资优化营商环境心得体会2023
  • 网站没收录的几大原因网站网络推广服务
  • 网站备案查询不出来美橙互联建站
  • Java进阶——Lombok的使用
  • WinFrom真入门(1)——Windows窗体应用概念
  • 华为配置篇-BGP实验
  • mac Python多版本第三方库的安装路径
  • 深入剖析 JVM:从组成原理到调优实践
  • pyopenjtalk因cmake版本太高导致pip无法安装
  • PHP泛型与集合的未来:从动态类型到强类型的演进
  • MFC中CMap类的用法和原理
  • 【机器人】复现 GraspNet 端到端抓取点估计 | PyTorch2.3 | CUDA12.1
  • c++的特性——多态
  • 服务热升级的方法
  • C++ 中的 decltype:从表达式中推断类型(二十八)
  • RK3588使用笔记:纯linux系统下基础功能配置(不定期更新)
  • MySQL内存管理机制详解
  • 【差分隐私相关概念】数据立方体(Data Cube)
  • C#里使用libxl的对齐/边框/颜色
  • 【极速版 -- 大模型入门到进阶】Transformer: Attention Is All You Need -- 第一弹
  • 基于python大数据的旅游可视化及推荐系统
  • JavaScript中var、let和const的区别
  • 深入理解分布式事务Saga,从入门到面试热点分析详解