上一篇用 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 一样简单:

Python
# 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=)