2025年不得不知道AI 智能系列五:打通大模型与工具的最后一公里

B站影视 电影资讯 2025-05-20 08:12 2

摘要:今天要说的"模型上下文协议"(MCP)就是专门解决这个问题的。它就像一套万能插座,给大模型和各类工具、数据之间制定了标准连接方式。接下来我会简短介绍MCP,再用Python代码示范怎么搭建MCP Server。

距离上次更新"AI智能系列"已经过去一周了,我决定给这个系列做个完美收尾。当然,肯定少不了MCP。

在搭建AI智能系统时,最关键的就三大块:大脑(大模型)、工具(各种功能模块)和知识库。但现在新技术层出不穷,要整合这些东西变得特别麻烦。

今天要说的"模型上下文协议"(MCP)就是专门解决这个问题的。它就像一套万能插座,给大模型和各类工具、数据之间制定了标准连接方式。接下来我会简短介绍MCP,再用Python代码示范怎么搭建MCP Server

简单来说,MCP就是给AI系统制定了统一的接线标准。Anthropic公司解释说,有了它开发者就不用自己从头设计连接方式,直接用这套现成的标准就行。

这样做最直接的好处就是:整个开发者社区可以无缝协作了!不同团队开发的工具和应用,现在都能像乐高积木一样直接拼在一起用。

以下是MCP的实际应用场景举例

Cursor中集成自定义工具(如SlackGoogle Drive)轻松将个人工具和上下文接入多个 AI 应用(如Claude、Cursor 或 n8n 工作流)应用开发者可以直接利用社区提供的预构建 MCP 服务器,无需额外开发即可扩展产品功能!

MCP 采用Client-Server架构。也就是说,MCP Client向 MCP Server发送请求,而Server会返回对工具、资源和提示的访问权限

这一过程类似于你去咖啡店(Client)向咖啡师(Server)点一杯陨石拿铁(Response),咖啡师随后将它递给你(Response)。

Connect(连接) 客户端初始化连接 服务器响应 客户端发送初始化完成的确认Exchange(交互) 所有请求、响应和通知均采用 JSON 格式交换Terminate(终止) 连接关闭的三种方式: 客户端主动关闭 传输断开(如网络问题) 发生错误导致终止

MCP** Client****直接集成在AI应用中**(例如Claude、Cursor、n8n工作流或使用OpenAI Agents SDK开发的自定义AI代理)[1]。

它代表AI应用与MCP Server通信,主要功能包括

识别Server支持的功能接收Server返回的数据管理AI工具的执行

当你使用现成的AI应用(如Claude或Cursor)时,无需自行开发MCP Client——这些应用已内置该功能。但你可能需要自行搭建一个定制的MCP Server

MCP ****Server是 AI 应用的独立服务模块。它们**[监听Client的请求并返回响应]** [2],具体功能取决于Server的能力。

Server为AI应用提供**[三个核心功能类型]** [2][3]:

[提示模板]:预定义的提示词模板[数据资源]:支持访问文件、数据库等数据源[工具方法]:函数调用、API对接和图像处理等功能

现在我用Anthropic的Python SDK来演示一个实际案例。这个案例会帮助理解MCP Server的具体实现。

这个Server将实现以下功能:

为外部AI应用提供我之前开发的工具集该工具集原是我用OpenAI Agents SDK开发的虚拟助手(AVA)的一部分主要包含三个功能: 提供邮件写作的提示模板 提供示例邮件 支持在我的Gmail邮箱中起草邮件

需要完整代码的朋友们请私信联系

开发 Python 版的 MCP 服务器时,推荐使用uv这个工具。它能简化Server的启动过程,只需一条命令就能启动Server并安装所有依赖。

安装方法如下:

# Mac/Linuxcurl -LsSf https://astral.sh/uv/install.sh | sh# Windowspowershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

使用 Anthropic 的 Python SDK 可以轻松创建自定义 MCP Server。下面是创建名为 "AVA" Server的代码:

from mcp.server.fastmcp import FastMCP# 创建MCP服务mcp = FastMCP("AVA")

MCP Server提供三种核心功能:

提示模板:预设的文本模板资源:可用的数据和文件工具:可调用的函数和接口

接下来我们将逐一为Server添加这些功能。

提示模板是一种函数,它能接收文本输入并按预设的格式生成最终的提示内容。当你需要重复使用同一个提示模板时,这个功能特别实用。

下面是为AVA助理添加基本指令的简单范例:

@mcp.promptdef ava(user_name: str, user_title: str) -> str:"""人工虚拟助手(AVA)的全局指令"""return f"""# AVA (人工虚拟助手)你是AVA,是{user_name}({user_title})的虚拟助手。你帮助他们处理行政任务。**偏好设置:**- 与用户的沟通保持简洁明了"""

MCP服务器可以加载资源文件,这些是提供给AI模型的静态数据,不包含复杂计算逻辑。

以下是添加资源文件的方法(需要文件的朋友私信):

# 定义资源@mcp.resource("email-examples://3-way-intro")def write_3way_intro -> str:"""三向介绍邮件的示例"""with open("email-examples/3-way-intro.md", "r") as file:return file.read@mcp.resource("email-examples://call-follow-up")def write_call_followup -> str:"""通话后续邮件的示例"""with open("email-examples/call-follow-up.md", "r") as file:return file.read@mcp.resource("directory://all")def get_directory -> str:"""获取所有联系人目录"""with open("directory.csv", "r") as file:return file.read

我们可以为服务器添加各种工具。工具可以执行具体操作,例如运行Python函数、调用API、处理数据等。

以下是在Gmail账户中创建邮件草稿的工具示例:

from tools.gmail import get_gmail_servicefrom googleapiclient.errors import HttpErrorimport base64from email.message import EmailMessageimport os# 定义工具@mcp.tooldef write_email_draft(recipient_email: str, subject: str, body: str) -> dict:"""使用 Gmail API 创建邮件草稿。参数:recipient_email (str): 收件人的电子邮件地址。subject (str): 邮件的主题行。body (str): 邮件的主要内容/正文。返回:dict or None: 如果成功,返回包含草稿信息的字典,包括'id'和'message';如果发生错误,返回 None。异常:HttpError: 与 Gmail API 通信时发生错误时抛出。注意:此函数需要:- Gmail API 凭证正确配置- 设置 USER_EMAIL 环境变量为发件人的电子邮件地址- 具有创建草稿的适当 Gmail API 权限"""try:# 创建 gmail api 客户端service = get_gmail_servicemessage = EmailMessagemessage.set_content(body)message["To"] = recipient_emailmessage["From"] = os.getenv("USER_EMAIL")message["Subject"] = subject# 编码消息encoded_message = base64.urlsafe_b64encode(message.as_bytes).decodecreate_message = {"message": {"raw": encoded_message}}# pylint: disable=E1101draft = (service.users.drafts.create(userId="me", body=create_message).execute)print(f'草稿 ID: {draft["id"]}\n草稿消息: {draft["message"]}')except HttpError as error:print(f"发生错误: {error}")draft = Nonereturn draft

重要提示:如需在自己的Gmail账户中使用此工具,需要通过OAuth进行授权。详细步骤请参考官网文档

要让服务器在本地运行,只需在Python脚本末尾添加以下代码:

if __name__ == "__main__":mcp.run(transport='stdio')

为了检查服务器是否正常工作,可以通过命令行启动开发模式:

uv run mcp dev mcp-server-example.py

启动后会自动打开浏览器界面,你可以:

测试服务器各项功能查看可用的提示词模板检查已加载的资源文件测试工具是否正常运行

(注意:如果你是从GitHub克隆的项目,环境应该已经自动配置好了)

确认服务器正常运行后,可以把它接入AI应用。以下是接入Claude桌面端的步骤(当前仅支持本地运行,无法接入网页版claude.ai):

具体操作:

安装软件:先下载安装Claude桌面版应用打开设置:打开Claude后进入 设置 > 开发者选项修改配置:点击"编辑配置文件"进行设置

!(https://secure2.wostatic.cn/static/kch8G64zRTpJR6VesQF9yH/image (1).png?auth_key=1747699733-si9Wx32DtSn2NZcV6PkVx6-0-409e64e2a84b62c6423226a3b5ebf308)

把下面这段JSON配置粘贴到配置文件中{"mcpServers": {"AVA": {"command": "uv","args": ["--directory","/global/path/to/mcp/server/code/","run","mcp-server-example.py"]}}}

注意:如果无法运行,可能需要将uv替换为它的完整路径(比如/Users/你的用户名/.local/bin/uv)。你可以通过以下命令查看uv的具体位置:

重启 Claude,集成功能应该就会生效了!

说明:uv在这里很有用,因为 Claude 会在本地运行这个服务器。由于我们的 Python 脚本依赖多个包,uv run命令会自动处理这些依赖,省去了手动安装的麻烦。

MCP 提供了一种通用方法,可以将工具和上下文集成到 LLM 应用中。在这个示例中,我们创建了一个自定义的 MCP 服务器。虽然我们只把它接入了 Claude 桌面版,但实际上它可以轻松集成到 Cursor、Agents SDK 或任何其他支持 MCP 的应用中。

来源:MobotStone一点号

相关推荐