在LangChain中无缝接入MCP服务器扩展AI智能体能力
MCP(ModelContextProtocol)是解决大语言模型与外部工具交互痛点的开放协议。它通过标准化通信方式,实现工具与LLM的无缝集成,提供权限控制和安全保障。文章详细介绍了在LangChain中接入MCP服务器的完整流程:首先安装必要库并准备MCP服务器,然后通过创建客户端会话、配置服务器参数、生成LangChain工具等步骤完成集成。这种设计使开发者无需重复编写适配代码,即可直接利用
为什么需要MCP?
在构建复杂的AI智能体(Agent)时,一个核心的挑战是如何让大语言模型(LLM)与外部世界安全、高效地交互。传统上,我们需要为每一个工具(如数据库、API、文件系统)编写大量的适配代码,这个过程繁琐且难以标准化。
Model Context Protocol(MCP)的出现正是为了解决这一痛点。MCP是一个开放的协议,它定义了LLM应用程序(如LangChain)与工具、数据源(统称为“服务器”)之间通信的标准方式。这意味着:
-
标准化:工具提供商可以编写一个标准的MCP服务器,任何支持MCP的客户端(如LangChain、OpenAI GPTs)都能立即使用。
-
安全性:MCP提供了明确的权限控制,客户端可以控制智能体能访问哪些工具和数据,避免了潜在的安全风险。
-
开发效率:开发者无需再为每个工具重复编写集成代码,只需专注于业务逻辑。可以直接利用社区丰富的MCP服务器资源。
LangChain作为最流行的AI应用开发框架之一,自然提供了对MCP的一流支持。本文将深入浅出地带你完成在LangChain中接入MCP服务器的完整流程。
一、准备工作与环境配置
在开始编码之前,你需要确保已经安装了必要的库,并准备好一个MCP服务器。
1. 安装LangChain
首先,确保你安装了最新版本的langchain
和langchain-core
。MCP相关功能通常包含在核心库中。
pip install -U langchain langchain-core
2. 获取或创建一个MCP服务器
MCP服务器的本质是一个独立的进程,可以通过标准输入输出(stdio)或套接字(socket)与LangChain通信。
-
选项A:使用现有服务器:社区已经提供了大量实用的MCP服务器。
-
克隆仓库:
git clone https://github.com/modelcontextprotocol/servers
-
进入目录:
cd servers/python/filesystem
-
安装依赖:
pip install -e .
-
现在,你就有了一个可用的
filesystem
服务器命令。
-
示例:文件系统服务器:一个官方示例服务器,允许LLM读写文件。
-
-
选项B:查找更多服务器:在MCP官方组织的Servers仓库中可以找到由社区维护的服务器列表,包括GitHub、SQLite、Jira等。
本文将以filesystem
服务器为例进行演示。
MCP学习交流群
二、核心实现流程与代码解析
在LangChain中接入MCP的核心步骤如下:
1. 导入关键模块
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 最重要的:导入MCP工具相关的模块
from langchain.tools.mcp import create_mcp_tool, MCPClientSession, MCPServerParameters
2. 创建MCP客户端会话并配置服务器
这一步是告诉LangChain如何启动和连接到你选择的MCP服务器。
# 定义服务器参数,指定如何启动服务器进程
server_params = MCPServerParameters(
# 命令名,即你在步骤一中安装的 filesystem 服务器命令
command="filesystem",
# 可选:传递给服务器的参数,例如指定当前工作目录
args=["--directory", "/tmp/mcp-demo"]
)
# 创建一个MCP客户端会话,管理客户端与服务器的连接和通信
session = MCPClientSession(server_params=server_params)
3. 从会话中创建LangChain工具
这是最关键的一步。create_mcp_tool
函数会与MCP服务器握手,获取服务器提供的所有工具列表,并将它们动态地转换为LangChain智能体可以直接调用的Tool对象。
# 获取所有工具
tools = create_mcp_tool(session, name="mcp-filesystem-tools")
# 注意:`tools` 通常是一个工具列表(List[Tool]),因为一个服务器可能提供多个工具。
你可以打印一下tools
来看看这个服务器具体提供了什么:
for tool in tools:
print(f"工具名: {tool.name}")
print(f"描述: {tool.description}")
print("---")
对于filesystem服务器,你可能会看到read_file
, write_file
, list_directory
等工具。
4. 构建智能体(Agent)并执行
现在,这些MCP工具已经和普通的LangChain Tool没有任何区别了。我们可以像使用任何其他工具一样,将它们组装进智能体。
# 1. 初始化LLM
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 2. 创建Prompt模板,指引智能体使用工具
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个有帮助的助手,可以读写文件。请根据用户要求调用相应的工具。"),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
])
# 3. 构建智能体
agent = create_tool_calling_agent(llm=llm, tools=tools, prompt=prompt)
# 4. 创建智能体执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 5. 执行一个任务!
asyncdef main():
asyncwith session: # 确保使用异步上下文管理器来管理MCP会话
result = await agent_executor.ainvoke({
"input": "请在 /tmp/mcp-demo 目录下创建一个名为 'hello.txt' 的文件,并写入内容 'Hello, MCP World!'"
})
print(result["output"])
# 运行异步主函数
import asyncio
asyncio.run(main())
三、流程解析与幕后发生了什么
当你运行上述代码时,LangChain和MCP服务器之间会发生以下交互:
-
启动服务器:LangChain根据
MCPServerParameters
的配置,作为一个父进程启动filesystem
服务器子进程。 -
初始化握手:LangChain(客户端)与服务器通过stdio交换初始化信息,客户端获取服务器提供的工具列表和其模式(Schema)(包括名称、描述、参数等)。
-
工具调用:
-
用户输入提问。
-
LLM根据Prompt和工具描述,决定调用
write_file
工具,并生成符合该工具模式的参数JSON。 -
AgentExecutor
捕获到这个调用请求。 -
LangChain将调用请求通过MCP协议发送给服务器进程。
-
filesystem
服务器收到请求,在其内部执行真正的“写文件”操作。 -
服务器将操作结果(成功或失败信息)通过M协议返回给LangChain。
-
LangChain将结果返回给LLM。
-
LLM根据结果生成最终回答,返回给用户。
-
整个过程中,LangChain并不需要知道write_file
这个工具内部是如何实现的,它只负责按照MCP协议进行转发。这种关注点分离的设计极大地提升了系统的可维护性和扩展性。
四、总结与展望
通过MCP协议,LangChain智能体获得了一种标准化、模块化的方式来扩展其能力。开发者不再被束缚于有限的内置工具,可以自由地“即插即用”任何遵循MCP协议的工具服务器,从操作本地文件到管理云上资源,几乎无所不能。
下一步尝试:
-
探索更多的MCP服务器,如
sqlite
(操作数据库)、github
(管理PR、Issue)。 -
尝试使用Socket模式连接服务器,而不是Stdio模式,这更适合于生产环境中将服务器作为独立服务部署的场景。
-
关注MCP协议的快速发展,它正在成为连接LLM与外部工具生态的重要桥梁。
通过本文的指南,希望你已经掌握了将MCP强大能力融入你的LangChain智能体的钥匙,快去构建更强大、更智能的AI应用吧!人工智能测试开发技术学习交流群
推荐阅读
精选技术干货
精选文章
Docker
Selenium
学社精选
- 测试开发之路 大厂面试总结 - 霍格沃兹测试开发学社 - 爱测-测试人社区
- 【面试】分享一个面试题总结,来置个顶 - 霍格沃兹测试学院校内交流 - 爱测-测试人社区
- 测试人生 | 从外包菜鸟到测试开发,薪资一年翻三倍,连自己都不敢信!(附面试真题与答案) - 测试开发 - 爱测-测试人社区
- 人工智能与自动化测试结合实战-探索人工智能在测试领域中的应用
- 爱测智能化测试平台
- 自动化测试平台
- 精准测试平台
- AI测试开发企业技术咨询服务
技术成长路线
系统化进阶路径与学习方案
- 人工智能测试开发路径
- 名企定向就业路径
- 测试开发进阶路线
- 测试开发高阶路线
- 性能测试进阶路径
- 测试管理专项提升路径
- 私教一对一技术指导
- 全日制 / 周末学习计划
- 公众号:霍格沃兹测试学院
- 视频号:霍格沃兹软件测试
- ChatGPT体验地址:霍格沃兹测试开发学社
- 霍格沃兹测试开发学社
企业级解决方案
测试体系建设与项目落地
- 全流程质量保障方案
- 按需定制化测试团队
- 自动化测试框架构建
- AI驱动的测试平台实施
- 车载测试专项方案
- 测吧(北京)科技有限公司
技术平台与工具
自研工具与开放资源
- 爱测智能化测试平台 - 测吧(北京)科技有限公司
- ceshiren.com 技术社区
- 开源工具 AppCrawler
- AI测试助手霍格沃兹测试开发学社
- 开源工具Hogwarts-Browser-Use
人工智能测试开发学习专区
-
视觉识别在自动化测试中的应用-UI测试与游戏测试
OpenAI Whisper 原理解析:如何实现高精度音频转文字_哔哩哔哩_bilibili -
人工智能产品测试:从理论到实战
专家系统与机器学习的概念_哔哩哔哩_bilibili -
AI驱动的全栈测试自动化与智能体开发
基于LangChain手工测试用例生成工具_哔哩哔哩_bilibili -
人工智能应用开发实战 LangChain+RAG+智能体全解析
大语言模型应用开发框架 LangChain_哔哩哔哩_bilibili
更多推荐
所有评论(0)