深入解析MCPs,第一部分:MCP到底是什么?

如果你关注人工智能领域,那么你几乎肯定听说过模型上下文协议(MCP)。自2024年11月Anthropic公司发布这项新标准以来,其受欢迎程度呈爆炸式增长。有用于发送电子邮件的MCP,有用于搜索网络的MCP,还有能运行其他MCP的MCP。MCPs正让谦逊的LLMs发起代码请求和预订机票。五月,微软甚至宣布推出Windows的MCP注册表, 该注册表允许应用程序向人工智能代理暴露功能。 

非常感谢!但是怎么?什么是MCP?如何使用它?为什么它比早期的尝试更受欢迎?它如何让聊天机器人在现实世界中完成任务?那么,你又该如何打造属于你自己的呢?

当我们决定构建 我们自己的MCP服务器来支持DeepL API时时,这似乎令人望而生畏。但一旦真正理解MCP的工作原理——它如何让代理发现并使用工具,以及如何用十行代码搭建基础MCP服务器——便会发现它并不可怕。在本系列文章中,我们将致力于揭开这个话题的神秘面纱。我们将探讨:

  • 什么是MCP
  • 如何在人工智能客户中使用MCP
  • 如何搭建MCP服务器

走吧!

MCP是什么意思?

MCP代表模型上下文协议

“模型”是人工智能模型。这可以是任何类型的人工智能界面,但通常基于大型语言模型构建.在此我们将称之为人工智能代理或人工智能助手。

“上下文”指人工智能代理所处的运行环境。在人工智能领域,我们常提及“上下文窗口”,它指代大型语言模型在生成对提示的响应时所整合的所有上下文信息——包括对话历史、系统提示等要素。要使MCP发挥作用,人工智能界面需为底层大型语言模型提供额外提示,明确其可使用的工具及其使用方式.

“协议”是一套规则,用于描述两个实体在网络上通信的方式。你每天都在使用的协议之一是HTTP——超文本传输协议——它规定了网络服务器与网页客户之间的通信方式。

综合以上内容:“模型上下文协议”是一种提供上下文协议,使人工智能模型能够使用外部工具和资源.

MCP是由 两位Anthropic工程师。它使用 JSON-RPC,这是定义函数调用的常用协议。它受到 语言服务器协议,该协议由微软创建,旨在将处理编程语言的逻辑与集成开发环境(IDE)解耦。

MCP 并非软件、应用程序或 API。但它却让人工智能代理能够访问所有这些!

MCP做什么?

大型语言模型能够对用户的输入提供智能且有用的响应.但它们无法访问外部服务,无法与其他软件通信,也无法获取最新信息。MCP使任何人工智能界面都能向任何软件服务发送请求并获取响应.它为人工智能代理提供了一种标准方式,使其能够访问外部工具、资源和数据。

没有MCP,人工智能客户就像一个没有躯体的头脑,无法接触外部世界。借助MCP,人工智能客户也能成为智能体!

谁可以使用MCP?

由于MCP是一个开放标准,任何人都可以实现MCP客户或MCP服务器。

客户可以是任何基于大型语言模型的应用程序。您可以在诸如应用程序中使用MCPs Claude DesktopVSCodeWindsurf光标。或者你可以使用MCPs配合你用框架构建的人工智能代理,例如 LangChainCrewAI

为什么MCP变得如此受欢迎?

其中一个原因是它是一个开放标准。任何人工智能代理都能实现MCP,任何工具同样可以实现。这使其比特定公司产品的解决方案更具吸引力,例如OpenAI的 函数调用

在创建这个通用解决方案时,MCP的开发者受到了语言服务器协议(LSP)的启发。在LSP出现之前,当集成开发环境(IDE)想要为特定编程语言实现自动完成或语法高亮等功能时,需要自行开发集成方案。结果就是创作者们最近所说的 m×n问题,人们需要为每种可能的IDE/语言组合单独实现语言服务。使用LSP时,每种编码语言只需一个集成库。而支持LSP的集成开发环境(IDE)能够支持任何此类语言。同样地,一旦某个服务实现了MCP服务器,任何支持MCP的AI客户都可以使用它。客户只需支持MCP。

MCP在其他方面也具有灵活性。它可以在本地运行,也可以在网络上运行。该标准由Anthropic公司提出,该公司备受尊敬,且会共享开放标准带来的益处。

为什么人工智能代理需要标准协议?

既然大型语言模型如此擅长理解和应用信息,难道它们不能直接使用任何其训练数据中包含描述的软件服务吗?毕竟,大型语言模型早已掌握了众多流行API的使用方法——只要向Copilot或Sourcegraph这类编程助手寻求帮助,你就会发现这一点.

但若让法律人工智能(LLM)访问其训练数据中的所有API,混乱局面必将随之而来。它如何知道该调用哪些API以及何时调用?它将如何获取您的API密钥和凭据?又将如何使用需要其他类型访问权限的服务?如果你想知道从堪萨斯城到得梅因的驾车距离——或者曼谷的当前气温呢?获取这些信息的办法有很多。作为用户,您希望能够控制大型语言模型(LLM)所采取的行动。尤其当它并非在检索信息,而是在执行影响现实世界的操作时,比如发送电子邮件或为你订购披萨.

诚然,代理程序能够读取并理解低级别的OpenAPI规范,或API 技术文件的全部内容,然后据此执行调用 API。但MCP允许工具制造商定义更高层次的服务,这些服务对人工智能代理尤为有用,能引导该代理走向有益的方向。迄今为止,这仍是人类仍占优势的领域。

因此,目前看来最佳方案是明确界定大型语言模型可使用的工具与资源,以及其使用方式。MCP采用传统方式实现确定性处理——并非依靠大型语言模型施展魔法,而是通过代码和JSON实现.

但LLM如何使用工具?

从根本上说,LLM是一种生成令牌的机器——这些令牌以文本、图像、音频等形式呈现于人类面前.那么,这样的机器如何才能获得工具和资源呢?它如何知道自己拥有这样的访问权限,又如何知道该使用哪一种?

关键在于,正如 马克西米利安·施瓦茨穆勒所指出的那样,大型语言模型只能通过符号与外界交流。它们以令牌作为输入,并生成令牌作为输出。这些令牌可以包含表示“我想使用某个工具”的实体。因此,为了表明它想要使用某个工具或资源,并实际调用该工具,大型语言模型会生成标准标记,其周边软件会将这些标记识别为工具调用并进行拦截。该软件随后调用一项服务,并将输出结果返回给大型语言模型。

LLM在此处可使用专业术语。但通常它仅使用特定分隔符和语言——这样你就能通过微调将这种能力移植到现有的大型语言模型中。例如,你可以使用方括号包裹JSON数据的起始和结束标签,如下所示的代理输出示例:

当然!我可以为您创建一个新的电子表格。等等……

[tool-start] { "tool": "spreadsheets", "action": "create" } [tool-end]

这正是研究人员在 2023年发表的《工具塑造者》论文,正如标题所示,该研究表明"语言模型能够自学使用工具"。在本研究中,作者生成了一组训练数据,其中包含API调用的纯文本表示及其结果。通过使用这些额外数据对大型语言模型进行微调,他们创建了一个能够调用这些API来生成对提示词有前景的响应的大型语言模型。

他们采用了简约的格式:

[function_name(data) → result]

例如,他们知道大型语言模型在数学方面存在困难,因此提供了计算器工具。随后,他们在训练数据中加入了如下字符串:

在1,400名参与者中,有400人(或 [计算器(400 / 1400) → 0.29] 29% 通过了测试。

以及

该名称源自西班牙语“la tortuga”,意为 [MT(“tortuga”) → 海龟] 乌龟。

通过用这类数据对大型语言模型进行微调,他们创建了一个懂得调用 API 的大型语言模型,能够针对给定提示生成最具潜力的响应.

但你不必对大型语言模型进行精细调整,就能让它使用工具。原来你需要的只是一句提示。本文 展示了如何仅通过提供适当的提示,教导LLM使用由[[qwen-tool-start]]和 [[qwen-tool-end]]分隔的JSON格式工具。 您可以亲自尝试!只需访问你收藏的聊天机器人,告诉它:

恭喜!你现在能够使用工具进行乘法运算。当您需要进行计算时,只需输出以下语法: 

[数学] { "arg1": {value}, "arg2": {value} } [/Math] 

其中,每个{value}代表一个需要相乘的值。知道了? 

然后给LLM一个数学问题,看它如何忠实地输出你为数学工具提供的语法。

现代大型语言模型(LLMs)至今仍以类似的方式使用工具。例如,Anthropic描述道 此处 他们如何构建系统提示,以便Claude在其API中使用工具。

LLM如何处理工具生成的输出?

LLM如何接收工具输出的内容?归根结底,还是代币的问题。当人工智能客户接收到工具的输出结果后,会将其作为输入重新输入到大型语言模型中,但会以特定方式处理,确保大型语言模型能够识别这是工具生成的输出,而非终端用户的输入.

整合所有内容

总结,当大型语言模型使用工具时,会发生以下情况:

  • 用户输入内容
  • LLM处理此输入
  • 在生成输出时,大型语言模型会“决定”调用工具是完成其输出的最佳方式。这意味着它会输出经过训练后所知晓的一组令牌,这些令牌能使其调用工具。
  • 人工智能客户端识别出这些令牌需要调用工具,随即拦截请求,将JSON解析为参数及其他请求内容,并将其发送至相应的工具。
  • 该工具会生成输出,其过程可能涉及使用API,也可能不涉及。它将此返回给人工智能客户,该客户将其发送至LLM。
  • LLM处理工具输出
  • LLM利用此输出继续为用户生成响应。

这就是我对MCP是什么以及它如何在LLM中实现的快速导览。在我的下一篇博文中,我将向您展示如何在您自己的人工智能客户中使用MCPs!


关于作者

作为DeepL的开发者布道师,本·莫斯致力于帮助任何人通过DeepL API获取其世界级的AI翻译服务。此前在谷歌任职期间,他曾担任Chrome产品经理,并作为开发者倡导者致力于构建更美好的网络生态。在此之前,他曾在《纽约时报》和美国在线担任软件工程师,还曾是一名全职音乐人。他在哈佛大学获得计算机科学学士学位,并在加州大学戴维斯分校获得音乐博士学位。你或许还能看见他与乐队一起演奏 古早娃,在 摇滚理论,还写着一部其实和史蒂夫·乔布斯没什么关系的音乐剧。

分享