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

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界:MCP协议与服务器的工作原理

  MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。
  本文以本人开发的fetch_news MPC Server为例 ,该项目基于MCP(Model Control Protocol)框架开发的新闻获取和分析服务器,专门用于获取最新新闻、搜索特定主题的新闻,并对新闻内容进行情感分析和摘要生成。提供了一套完整的工具和资源,可用于快速检索和处理新闻数据。

核心功能(实际上就是提供的几个工具函数)
  • 最新新闻获取:获取指定类别的最新新闻,支持科技、财经、体育、娱乐、社会等类别 get_latest_news, 对于新闻的获取我使用的是https://newsapi.org/提供的API
  • 新闻搜索:根据关键词搜索最近一段时间内的新闻search_news
  • 情感分析:分析新闻文本的情感倾向 analyze_sentiment
  • 新闻摘要:为新闻内容生成简短摘要summarize_news
提出问题

  我在Claude中输入"给我看看今天的十条关于人工智能的新闻,给出链接和相关内容摘要和情感分析",大家可以看到它给出的结果"我很抱歉,我的知识截止到2024年10月,所以我无法提供今天(2025年3月19日)的最新人工智能新闻。此外,我没有直接的网络搜索功能来访问和提供当前新闻链接。"大模型的知识受限于训练数据。

在这里插入图片描述
  其实同样,在CherryStudio中调用qwen-max时也不能给出最新的数据。
在这里插入图片描述
  以下为Claude Desktop中安装了fetch_news的MPC server后,变得可以进行实时搜索。
在这里插入图片描述

MCP是什么?

  简单来说,MCP是一个标准化的通信协议,旨在让大型语言模型与外部资源和工具实现顺畅的集成。它就像一座桥梁,连接了五个关键部分:主机(Host)、客户端(Client)、服务器(Server)、本地资源(Local Resources)和远程资源(Remote Resources)。这五个部分各司其职,但又必须遵守MCP的"游戏规则",才能协同工作。

以下为官方文档的架构图:
https://modelcontextprotocol.io/introduction
在这里插入图片描述
以下为官方对架构中各部分的描述

MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools that want to access data through MCP
MCP Clients: Protocol clients that maintain 1:1 connections with servers
MCP Servers: Lightweight programs that each expose specific capabilities through the standardized Model Context Protocol
Local Data Sources: Your computer's files, databases, and services that MCP servers can securely access
Remote Services: External systems available over the internet (e.g., through APIs) that MCP servers can connect to

对这五个部分逐一解析:

MCP Hosts: Programs like Claude Desktop, IDEs, or AI tools
  • 理解:“Hosts”,因为不同的程序(如Claude Desktop、VS Code、某个AI写作工具)都可以充当MCP的主机。每个主机是一个独立的应用程序,它们通过MCP协议访问外部数据或功能。
  • 场景
    • 用户可能同时运行Claude Desktop和一个IDE,这两个程序都作为Host,通过MCP获取文件或API数据。
    • 在企业环境中,多个AI工具可能并行工作,每个工具都是一个Host。
MCP Clients: Protocol clients that maintain 1:1 connections with servers
  • 理解: “Clients”,因为每个Host内部可以嵌入一个或多个MCP客户端,每个客户端与一个特定的服务器建立一对一连接。系统中可能有多个Client实例,分别处理不同的任务。
  • 场景
    • 一个IDE(Host)可能同时需要访问本地文件和远程API,它会创建两个Client:一个连接本地文件服务器,另一个连接API服务器。
    • 在多用户场景中,每个用户的Host可能都有自己的Client实例。
MCP Servers: Lightweight programs that each expose specific capabilities
  • 理解: “Servers”,因为MCP设计允许多个轻量级服务器程序运行,每个服务器负责暴露特定的功能(如文件读写、数据库查询、API调用)。这些服务器彼此独立,通过MCP协议服务于不同的Client。
  • 场景
    • 用户电脑上可能同时运行一个文件服务器(暴露本地文件)和一个网络服务器(连接远程API),两者都是MCP Servers。
    • 在分布式系统中,可以有多个Server分布在不同设备上,共同支持一个Host。
Local Data Sources: Your computer’s files, databases, and services
  • 理解: “Sources”,因为本地数据源种类繁多(文件、数据库、服务等),而且同一类型的数据源可能有多个实例。MCP服务器可以连接多个本地数据源以满足不同需求。
  • 场景
    • 一个Server可能同时访问你的文档文件夹(文件)和SQLite数据库,这两个都是Local Data Sources。
    • 在复杂应用中,可能有多个文件目录或服务(如本地Web服务)需要被访问。
Remote Services: External systems available over the internet
  • 理解
    “Services”,因为远程服务指的是互联网上的各种外部系统(如天气API、股票API、云存储)。MCP服务器可以连接多个远程服务,提供多样化的功能。
  • 场景
    • 一个MCP Server可能同时调用天气API和GitHub API,这两个都是Remote Services。
    • 在AI任务中,模型可能需要从多个云端服务获取数据,这些服务并存于系统中。
为什么需要MCP?

  你可能会问:为什么不直接让模型自己去抓数据,或者干脆用现有的协议呢?答案在于AI应用的特殊需求和现实中的挑战。MCP的出现,正是为了解决这些问题:

  1. 打破孤岛,提升能力
      大型语言模型很聪明,但它们天生是"孤岛"——只能依靠训练数据或用户输入。如果想让模型读你的文件、查实时天气,甚至调用代码工具,就需要一个标准化的接口。MCP填补了这个空白,让模型从"闭门造车"变成"开门迎客"。

  2. 安全第一
      直接让模型访问本地文件或网络API,听起来很酷,但也很危险。万一模型误删文件,或者被恶意指令利用怎么办?MCP通过服务器的中介作用,加入了权限控制和数据隔离,确保交互既强大又安全。

  3. 标准化带来可扩展性
      想象一下,如果每个AI工具都用自己的方式连接外部资源,开发者得多累啊?MCP提供了一个统一的框架,无论是本地文件还是云端服务,无论是Mac还是Windows,只要遵守MCP,就能轻松集成。这不仅减轻了开发负担,还让生态系统更具扩展性。

  4. 效率与灵活性并存
       MCP基于JSON-RPC 2.0,轻量高效。它支持异步通知,意味着服务器可以在不打断客户端的情况下主动推送更新。这种灵活性特别适合实时性要求高的场景,比如实时协作工具或动态数据分析。

MCP 的工作流程

  当用户说"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统是如何协同工作的?让我们通过一个流程图来详细了解:

数据层
工具层
主机层
用户层
1. 输入请求
2. 传递请求
3. 生成函数调用
4. 传递函数调用
5. 解析和执行函数
6. 调用API
7. 返回数据
8. 返回函数结果
9. 将结果提供给
10. 生成最终回答
11. 展示结果
外部服务
工具函数
LLM
函数调用请求
Host
用户
响应层
步骤分解:

我来结合刚才的流程图,详细解释当用户请求"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"时,整个系统如何协同工作的。按照流程图中的步骤进行详细描述。

用户层

步骤1: 用户输入请求

  • 用户在界面上输入"给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析"
  • 请求被发送到Host系统
主机层

步骤2: Host传递请求给LLM

  • Host接收到用户的自然语言请求
  • Host将这个请求转发给LLM(如Claude)进行处理

步骤3: LLM生成函数调用

  • LLM分析用户请求,理解用户需要:
    1. 获取关于人工智能的最新新闻
    2. 生成内容摘要
    3. 进行情感分析
  • LLM确定需要调用多个工具函数来完成这个任务

步骤4: LLM生成函数调用请求并传递给Host

  • LLM创建一个结构化的函数调用请求,类似于:
{"function": "search_news","parameters": {"query": "人工智能","limit": 10,"days": 1}
}
工具层

步骤5: Host解析和执行函数

  • Host接收到LLM生成的函数调用请求
  • Host找到对应的search_news函数
  • Host准备调用该函数,传入参数"人工智能"、限制10条、时间范围为1天
数据层

步骤6: 工具函数调用外部API

  • search_news函数连接到新闻API服务
  • 函数发送请求获取最新的人工智能相关新闻

步骤7: 外部服务返回数据

  • 新闻API返回10条与人工智能相关的最新新闻
  • 返回的数据包含新闻标题、链接、发布日期等信息
响应层 (第一轮)

步骤8: 工具函数返回结果给Host

  • search_news函数将获取到的新闻数据返回给Host

步骤9: Host将结果提供给LLM

  • Host将新闻数据传递回LLM
  • LLM接收到数据,分析后发现还需要进行摘要和情感分析
第二轮函数调用 (重复步骤3-9)
  • LLM为每条新闻生成进一步的函数调用
  • 对每条新闻内容进行摘要生成:
{"function": "summarize_news","parameters": {"news_text": "新闻全文内容","max_length": 100}
}
  • 对每条新闻进行情感分析:
{"function": "analyze_sentiment","parameters": {"news_text": "新闻全文内容"}
}
  • Host执行这些函数
  • 外部服务进行摘要生成和情感分析
  • 结果返回给Host,再传递给LLM
最终响应

步骤10: LLM生成最终回答

  • LLM整合所有获取到的信息:
    1. 原始新闻数据
    2. 每条新闻的摘要
    3. 每条新闻的情感分析结果
  • LLM将这些信息组织成结构化的回答

步骤11: Host展示结果给用户

  • Host将LLM生成的最终回答呈现给用户
  • 用户看到10条人工智能相关新闻,每条包含链接、摘要和情感分析
系统各组件如何协同工作(举例)
  1. 用户请求:用户要求获取人工智能相关新闻、摘要和情感分析

  2. LLM解析请求:我(作为LLM)理解了需求,并开始生成函数调用

  3. 首次函数调用:调用fetch_news_search函数搜索人工智能相关新闻

    • 参数:查询词"人工智能"、最近5天、限制2条
    • 结果:系统返回了2条相关新闻
  4. 后续函数调用

    • 对第一条新闻进行摘要(summarize_news
    • 返回:简洁的新闻摘要
    • 对第一条新闻进行情感分析(analyze_sentiment
    • 返回:情感得分1.5(积极)
  5. 整合信息:我将所有获取到的信息(新闻、摘要、情感分析)整合成一个完整的回答

  通过这个过程,我们可以看到MCP(Model Context Protocol)如何使LLM能够通过结构化函数调用与外部工具和数据源交互,从而提供更丰富、更实时的信息给用户。

新闻查询服务时序图
用户 主机/系统 大语言模型 工具函数 外部新闻API 请求人工智能新闻、摘要和情感分析 转发用户请求 生成search_news函数调用 执行search_news函数 请求人工智能相关新闻 返回10条新闻数据 返回新闻数据 提供新闻数据 生成summarize_news函数调用 执行summarize_news函数 返回新闻摘要 提供新闻摘要 生成analyze_sentiment函数调用 执行analyze_sentiment函数 返回情感分析结果 提供情感分析结果 loop [对每条新闻] 生成最终格式化回答 展示完整结果(新闻、摘要、情感分析) 用户 主机/系统 大语言模型 工具函数 外部新闻API

  这个时序图详细展示了新闻查询服务的完整流程,从用户发起请求到最终获得结果的整个过程。以下是对时序图的关键环节解释:

  1. 初始请求阶段
    • 用户向主机系统发送请求,要求获取人工智能新闻、摘要和情感分析
    • 主机将请求转发给大语言模型(LLM)进行处理
  2. 新闻搜索阶段
    • LLM分析用户意图后,生成search_news函数调用
    • 主机执行该函数,通过工具层向外部新闻API发送请求
    • API返回新闻数据,经过工具层处理后回传给主机
    • 主机将新闻数据提供给LLM
  3. 内容处理阶段(循环处理每条新闻):
    • LLM生成summarize_news函数调用,请求生成摘要
    • 摘要结果返回给LLM
    • LLM生成analyze_sentiment函数调用,请求情感分析
    • 情感分析结果返回给LLM
  4. 最终响应阶段
    • LLM整合所有信息,生成结构化的最终回答
    • 主机将完整结果展示给用户

  这个时序图清晰地表现了系统各组件间的交互顺序和信息流动路径,特别是通过循环结构展示了对多条新闻的批量处理过程。图中的信息流向遵循了单向性原则,使整个流程更加清晰易懂。
  读懂这两张图后应该就清楚了:当你输入 “给我看看今天的十条关于人工智能的新闻,给出链接、相关内容摘要及情感分析”,就能得知调用 MPC Server 的秘密。

小结:

  MCP核心概念: 让LLM能够与外部工具和服务交互。

  MCP (Model Context Protocol) 是一种标准化通信协议,它的核心目的是让大型语言模型能够安全、高效地与外部资源和工具进行交互。它就像AI世界中的"HTTP协议",定义了不同组件之间如何交换信息的规则,让语言模型摆脱"知识孤岛"的限制。
  MCP Server 是实现MCP协议的服务器程序,它在整个生态系统中扮演着"翻译官"和"守门人"的角色。就像我们例子中的fetch_news服务器,它负责接收来自AI的请求,转化为对外部资源(如新闻API)的调用,然后将获取的数据安全地返回给模型。每个MCP Server通常专注于提供一种特定能力(如文件访问、API调用、数据分析等)。
  简而言之,MCP是标准,MCP Server是实现。MCP定义了"游戏规则",而MCP Server则是遵循这些规则的"玩家"。这种分离设计带来了极大的灵活性和安全性,使AI应用生态系统能够像积木一样组合不同功能。
  随着AI技术的普及,MCP有望成为连接AI与数字世界的重要桥梁,让语言模型不再局限于训练数据,而能实时获取和处理各类信息。未来,我们可能会看到更多专业化的MCP Server出现,形成一个丰富多彩的工具生态系统,大大扩展AI应用的边界。如果你对开发自己的MCP Server感兴趣,可以参考官方文档和开源项目,加入这个正在蓬勃发展的生态系统。


http://www.mrgr.cn/news/95114.html

相关文章:

  • AI学习——卷积神经网络(CNN)入门
  • P2786 英语1(eng1)- 英语作文
  • STM32原理性知识
  • SAP 附件增删改查与文件服务器交互应用
  • dijkstra算法——47. 参加科学大会
  • PostgreSQL:语言基础与数据库操作
  • 数据大屏标题加载顶部流光
  • LEDNet总结
  • Python Pyecharts面试题及参考答案
  • 数据结构-------栈
  • 【C++】动态规划从入门到精通
  • 详解Sympy:符号计算利器
  • MySQL 调优
  • Firebase崩溃:ViewBinding not init!!
  • Quartus + VScode 实现模块化流水灯
  • MySQL 入门大全:查询语言分类
  • 【免费网址/插件】视频和图片数据采集推荐~
  • Python散点图(Scatt Plot):数据探索的“第一张图表”
  • 数仓开发那些事(10)
  • YOLOv11 目标检测