跳到主要内容

LangChain接入MCP完整实现流程

课程说明:

  体验课时间有限,若想深度学习大模型技术,欢迎大家报名由我主讲的《2025大模型Agent智能体开发实战》(夏季班)

bef0897853f861af5f4211442be446b

《2025大模型Agent智能体开发实战》(夏季班) 为【100+小时】体系大课,总共20大模块精讲精析,零基础直达大模型企业级应用!

a55d48e952ed59f8d93e050594843bc

部分项目成果演示

from IPython.display import Video
  • MateGen项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/MG%E6%BC%94%E7%A4%BA%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
  • 智能客服项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E6%99%BA%E8%83%BD%E5%AE%A2%E6%9C%8D%E6%A1%88%E4%BE%8B%E8%A7%86%E9%A2%91.mp4", width=800, height=400)
  • Dify项目演示
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/2f1b47f42c65fd59e8d3a83e6cb9f13b_raw.mp4", width=800, height=400)
  • LangChain&LangGraph搭建Multi-Agnet
Video("https://ml2022.oss-cn-hangzhou.aliyuncs.com/%E5%8F%AF%E8%A7%86%E5%8C%96%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90Multi-Agent%E6%95%88%E6%9E%9C%E6%BC%94%E7%A4%BA%E6%95%88%E6%9E%9C.mp4", width=800, height=400)

此外,若是对大模型底层原理感兴趣,也欢迎报名由我和菜菜老师共同主讲的《2025大模型原理与实战课程》(夏季班)

4a11b7807056e9f5b281278c0e37dad

两门大模型课程夏季班目前上新特惠+618年中钜惠双惠叠加,合购还有更多优惠哦~详细信息扫码添加助教,回复“大模型”,即可领取课程大纲&查看课程详情👇

img 6d9391e440ee8df1466cef1bce40705

LangChain快速入门与Agent开发实战

Part 7.LangChain接入MCP技术实现流程

  MCP,全称是Model Context Protocol,模型上下文协议,由Claude母公司Anthropic于去年11月正式提出。

image-20250318201338022

MCP的核心作用,是统一了Agent开发过程中,大模型调用外部工具的技术实现流程,从而大幅提高Agent开发效率。在MCP诞生之前,不同的外部工具各有不同的调用方法,要连接这些外部工具开发Agent,就必须“每一把锁单独配一把钥匙”,开发工作非常繁琐:

image-20250403170211085

而MCP的诞生,则统一了这些外部工具的调用流程,使得无论什么样的工具,都可以借助MCP技术按照统一的一个流程快速接入到大模型中,从而大幅加快Agent开发效率。这就好比现在很多设备都可以使用type-c和电脑连接类似。

image-20250403170238895

从技术实现角度来看,我们可以将MCP看成是Function calling的一种封装,通过server-client架构和一整套开发工具,来规范化Function calling开发流程。

image-20250318202116026

  此前我开设过很多MCP相关公开课,在学习本节内容前,建议先简单了解MCP完整技术体系,可以选择以下公开课进行参考:

MCP技术参考资料详见大模型技术社区。

57d34aa34ec04a98b020018c55b242d

一、MCP基础实现流程

  langchain-mcp-adapters 项目主要为LangChainLangGraph提供MCP的接入和兼容接口,其工作流程主要如下图所示:

  

  实际上load_mcp_tools() 返回的是标准的 LangChain 工具,所以是完全可以直接在LangChain环境中进行使用的。同时,完全支持stdioHttp SSEStreamable HTTP三种不同的通讯协议。

  接下来,我们先尝试手动实现一遍MCP实践流程,然后再考虑将已经部署好的server带入中,作为tools进行调用。

  一个极简的天气查询MCP调用流程如下:

image-20250318172155677 image-20250617202327646 6d9391e440ee8df1466cef1bce40705
  • 借助uv创建MCP运行环境

方法 1:使用 pip 安装(适用于已安装 pip 的系统)

FENCE0

方法 2:使用 curl 直接安装

如果你的系统没有 pip,可以直接运行:

FENCE1

这会自动下载 uv 并安装到 /usr/local/bin

  • 创建 MCP 客户端项目

FENCE0

image-20250317150300621 image-20250617183314728
  • 创建MCP客户端虚拟环境

FENCE0

image-20250317150947534

然后即可通过add方法在虚拟环境中安装相关的库。

FENCE0

image-20250617183357233
  • 编写用于天气查询的server服务器代码:

这里我们需要在服务器上创建一个server.py,并写入如下代码:

FENCE0

image-20250318174907749
  • 创建write_server.py

  为了更好的测试多MCP工具调用流程,这里我们继续创建一个write_server.py服务器:

FENCE0

  • 天气查询客户端client创建流程

  然后创建一个可以和server进行通信的客户端,需要注意的是,该客户端需要包含大模型调用的基础信息。我们需要编写一个client.py脚本,这个脚本内容非常复杂,完整代码如下:

FENCE0

1742291307705
  • 创建.env文件

  接下来继续创建一个.env文件,来保存大模型调用的API-KEY

image-20250317153902986

并写入如下内容:

FENCE0

  • 创建servers_config.json文件

  接下来继续创建servers_config.json文件,用于保存MCP工具基本信息:

{
"mcpServers": {
"weather": {
"command": "python",
"args": ["weather_server.py"],
"transport": "stdio"
},
"write": {
"command": "python",
"args": ["write_server.py"],
"transport": "stdio"
``` }
}
}

此时完整项目结构如下:

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506172025805.png" alt="image-20250617202549758" style="zoom: 33%;" />

- 运行MCP客户端+服务器

&emsp;&emsp;最后在命令行中执行如下命令,即可开启对话:

FENCE0

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506171855700.png" alt="image-20250617185517285" style="zoom:33%;" />

至此,即完成了一次简单的MCP执行流程。

## 3.4 MCP+LangChain基础调用流程

&emsp;&emsp;`LangChain`调用`MCP`是可以将`MCP`的工具直接转换为`LangChain`的工具,然后通过预定义的`MCP_Client`实现与外部`MCP`的读写操作,换而言之就是我们需要改写原先的client,将原先的Function calling调用逻辑修改为LangChain调用逻辑:

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506172028187.png" alt="image-20250617202831129" style="zoom:33%;" />

FENCE0

&emsp;&emsp;`LangChain`接入`MCP`的核心原理为: `weather_server.py` → 启动为子进程 → `stdio` 通信 → `MCP` 协议 → 转换为 `LangChain` 工具 → `LangChain Agent` 执行读写,核心转换过程为::

1. `@mcp.tool()` → 标准 `LangChain Tool`
2. `stdio_client()` → 自动处理 `read/write` 流,其中`read` 表示从 `MCP` 服务器读取响应的流,`write` 表示向 `MCP` 服务器发送请求的流,对于 `stdio weather_server.py`,它们就是子进程的 `stdout` 和 `stdin`
3. `load_mcp_tools()` → 一键转换所有工具

实际对话过程如下所示:

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506171915621.png" alt="image-20250617191543679" style="zoom:33%;" />

&emsp;&emsp;完整的代码已经上传至百度网盘中的`langchain_rag.py`文件中,大家可以扫描下方二维码免费领取

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506172030599.png" alt="image-20250617203037548" style="zoom:33%;" />

<img src="https://ml2022.oss-cn-hangzhou.aliyuncs.com/img/202506102031014.png" alt="6d9391e440ee8df1466cef1bce40705" style="zoom:50%;" />