MCP:简化开发者与语言模型交互的新标准协议
最近在软件工程界,Model Context Protocol(MCP)逐渐成为了热门话题。本文将解答三个关键问题:什么是MCP?为什么需要它?以及开发者如何使用或构建MCP? 什么是Model Context Protocol(MCP)? Model Context Protocol(MCP)是一种新兴的标准,旨在解决大型语言模型(LLM)在提示工程中遇到的复杂问题。随着LLM的发展,提供结构化和相关上下文成为提高其响应质量的关键。MCP由Anthropic于2024年11月提出,定义了一种一致且标准化的方式,使得应用程序能够向AI模型传递结构化的上下文信息。这相当于在应用和模型之间建立了一个中间协议层,使它们能够更清洁、更一致地交换工具、资源、数据库、函数和用户状态等信息。 从手动提示到MCP的演变 1. 手动提示 在RAG(检索增强生成)和函数调用等技术出现之前,为模型提供上下文是一个手动且容易出错的过程。例如,如果你想构建一个回答公司内部问题的聊天机器人,你需要手动编写每个请求的定制提示,而这不仅效率低下,而且难以维护。 2. RAG:从数据中获取上下文 为了改善这一情况,RAG技术应运而生。通过RAG,模型可以动态地从外部信息源中检索相关数据,而不是将所有知识硬编码到提示中。例如,当用户问:“我有多少天的假期?”系统会搜索HR政策文档,找到相关段落,然后将其添加到提示中,从而提高准确性和响应质量。 3. 函数调用:从被动到主动 尽管RAG大大提升了模型的表现,但它仍然是只读的。随后,函数调用功能的引入使得模型不仅能处理文本,还能与工具互动。例如,模型可以通过调用get_user_profile函数来获取用户的个人资料信息。然而,各平台的方法和函数定义不同,导致开发者需要编写额外的胶合代码(glue code)来连接模型、工具和数据源。 MCP的出现 MCP旨在解决上述碎片化问题,提供一种共享语言,使应用程序与模型之间的交互更加标准化和可扩展。它类似于USB-C,在硬件设备连接上起到了统一作用,现在MCP试图在上下文传递上实现同样的效果。 MCP的工作原理 MCP架构包含三个主要组件:主机(Host)、客户端(Client)和服务器(Server)。 1. 主机 主机是用户面向的应用程序,作为与语言模型交互的主要环境。它管理输入输出,内嵌MCP客户端。 2. 客户端 客户端在主机中运行,管理与一个或多个MCP服务器的通信。负责服务发现、功能交换和消息路由。 3. 服务器 服务器向模型暴露功能,包括工具(函数)、资源(数据)和提示(模板)。每个服务器在握手过程中注册其功能。 能力交换 能力交换是客户端查询可用MCP服务器的功能列表的过程。这样,模型就能了解可用的工具、提示和资源,而无需硬编码任何逻辑。 工具执行生命周期 工具发现:客户端发送tools/list请求,发现可用工具。 模型选择:客户端将这些工具纳入提示中,模型选择合适的工具并返回JSON块。 执行:客户端解析模型的响应,并通过服务器执行所选工具。 结果处理:结果返回给模型进行最终解读。 实际使用案例 假设用户问:“我的桌面上有哪些文件?” 1. 主机(如Claude Desktop或Cursor)接收到用户的查询。 2. 主机分析提示,确定需要访问本地文件系统。 3. 内嵌的MCP客户端初始化与文件系统MCP服务器的连接。 4. 客户端和服务器进行能力交换。 5. 服务器提供可用的工具列表(如list_txt_files)。 6. 客户端调用相应的工具。 7. 服务器返回结果(桌面文件列表)。 8. 主机生成并显示最终答案给用户。 MCP的实际应用 目前,最容易开始使用MCP的方法是通过Cursor——一个支持MCP的开发人员专用AI集成开发环境(IDE)。 1. 在Cursor中使用MCP 当你在Cursor中询问类似“为这个函数编写单元测试”、“这个代码依赖哪些库”、“扫描我的项目中的TODO”等问题时,Cursor会在后台自动发现可用的工具和上下文,如果需要则调用适当的工具,将结果传递回模型,生成准确的回答。 2. 使用Python构建自定义工具 开发者可以通过创建自定义MCP服务器来集成自己的后端逻辑。以下是具体步骤: 1. 安装必备库:使用uv或pip安装MCP库。 2. 初始化MCP项目:使用mcp uv init mcp-demo命令创建项目结构。 3. 设置虚拟环境:uv venv和source .venv/bin/activate命令设置和激活虚拟环境。 4. 添加核心包:uv add mcp和uv add 'mcp[cli]'命令添加必要的MCP包。 5. 编写代码:在server.py中定义工具,如列出项目文件夹中的所有.txt文件、统计文件中的单词数等。 6. 运行服务器:uv run mcp dev main.py命令在开发模式下启动MCP服务器并查看调用和结果。 7. 配置Cursor:在全局Cursor配置文件中添加MCP服务器,使其在所有Cursor项目中可用。 8. 重启Cursor:重启Cursor以启用新的MCP服务器,你现在就可以直接在编辑器中使用这些自定义工具。 行业评价与公司背景 MCP为开发者提供了一种更加一致和高效的方式来处理现有的日常任务,同时增强了AI模型的能力。这标志着AI集成在现代开发栈中的重要性日益增加。Anthropic是一家领先的人工智能研究和开发公司,致力于推动AI技术的进步和应用。MCP的推出不仅简化了开发流程,还提高了系统的可维护性和扩展性。随着更多平台支持MCP,预计这一协议将在未来几年内迅速普及。对于希望构建更智能、更快捷且更稳定的系统的软件工程师来说,掌握MCP将是下一个重要的步骤。