上一篇用
create_agent搭出了第一个智能体,结尾留了三个现实问题:外部工具接入成本高、Agent 天生失忆、敏感操作无人把关。这一篇分别用 MCP 协议、Checkpointer 记忆和中间件解决它们。这也是本系列的最后一篇,文末对四大模块做一个总收束。
一、MCP:给工具接入定一个标准#
1.1 为什么需要 MCP#
假设你想让 Agent 具备"查火车票"的能力。自己写本地工具意味着:研究 12306 的接口文档、处理认证签名、处理各种异常边界、接口一变还得跟着维护。而如果有人已经把这个能力封装成了服务,你只要"接上去"就好。
但现实的麻烦在于,每个人封装服务的方式都不一样——REST、WebSocket、gRPC 各行其是,每接一个外部工具就要写一套适配代码。**MCP(Model Context Protocol,模型上下文协议)**就是为此而生的统一标准:所有工具服务以相同的方式暴露能力,AI 应用以相同的方式接入,无论底层工具是什么、跑在哪里。最贴切的类比是 USB-C——MCP 是 AI 领域的"USB-C 标准",统一了大模型与外部工具之间的接口。
1.2 架构与工作流程#
MCP 是客户端-服务器架构,三个角色:
| 角色 | 职责 | 在我们的场景中对应 |
|---|---|---|
| MCP Host | 运行 AI 应用的宿主程序 | 你的 LangChain Agent 程序 |
| MCP Client | 与 Server 通信的客户端 | LangChain 的 MCP 适配器 |
| MCP Server | 提供工具能力的服务端 | 别人封装好的工具服务 |
工作流程五步:Agent 启动时与 Server 握手,拿到工具列表和描述;Host 把工具描述随用户问题注入给模型;模型决策调用哪个工具、传什么参数;Host 通过 MCP 协议把调用请求路由给 Server 执行并取回结果;结果交还模型继续推理。
发现关键了吗——这和上一篇讲的 Function Calling 流程一模一样。对模型来说,MCP 工具和本地工具没有任何区别,它看到的都是"工具名 + 描述 + 参数"。MCP 改变的只是工具在你代码端的接入方式,对模型完全透明。
Client 和 Server 之间的通信支持多种传输方式:Stdio 通过标准输入/输出通信,适合 Server 和你的程序在同一台机器上(本地开发调试);Streamable HTTP 走 HTTP 流式传输,适合 Server 部署在远程(生产环境)。实际开发中用得最多的就是这两种。
1.3 写一个 MCP Server#
接别人的 Server 之前,先自己写一个,理解服务端是怎么工作的。官方 SDK 的 FastMCP 让这件事和写 @tool 一样简单:
# mcp_server_stdio.py (pip install mcp)
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("MyTools")
@mcp.tool()
() -> :
a + b
() -> :
a * b
__name__ == :
mcp.run(transport=)


还没有公开留言,成为第一个写下回声的人。