写点什么

在 LangChain 中无缝接入 MCP 服务器扩展 AI 智能体能力

  • 2025-09-05
    黑龙江
  • 本文字数:2854 字

    阅读完需:约 9 分钟

开篇:为什么需要 MCP?

在构建复杂的 AI 智能体(Agent)时,一个核心的挑战是如何让大语言模型(LLM)与外部世界安全、高效地交互。传统上,我们需要为每一个工具(如数据库、API、文件系统)编写大量的适配代码,这个过程繁琐且难以标准化。


Model Context Protocol(MCP)的出现正是为了解决这一痛点。MCP 是一个开放的协议,它定义了 LLM 应用程序(如 LangChain)与工具、数据源(统称为“服务器”)之间通信的标准方式。这意味着:


  1. 标准化:工具提供商可以编写一个标准的 MCP 服务器,任何支持 MCP 的客户端(如 LangChain、OpenAI GPTs)都能立即使用。

  2. 安全性:MCP 提供了明确的权限控制,客户端可以控制智能体能访问哪些工具和数据,避免了潜在的安全风险。

  3. 开发效率:开发者无需再为每个工具重复编写集成代码,只需专注于业务逻辑。可以直接利用社区丰富的 MCP 服务器资源。


LangChain 作为最流行的 AI 应用开发框架之一,自然提供了对 MCP 的一流支持。本文将深入浅出地带你完成在 LangChain 中接入 MCP 服务器的完整流程。


测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付

一、准备工作与环境配置

在开始编码之前,你需要确保已经安装了必要的库,并准备好一个 MCP 服务器。


1. 安装 LangChain


首先,确保你安装了最新版本的langchainlangchain-core。MCP 相关功能通常包含在核心库中。


pip install -U langchain langchain-core
复制代码


2. 获取或创建一个 MCP 服务器


MCP 服务器的本质是一个独立的进程,可以通过标准输入输出(stdio)或套接字(socket)与 LangChain 通信。


  • 选项 A:使用现有服务器:社区已经提供了大量实用的 MCP 服务器。

  • 示例:文件系统服务器:一个官方示例服务器,允许 LLM 读写文件。

  • 克隆仓库:git clone https://github.com/modelcontextprotocol/servers

  • 进入目录:cd servers/python/filesystem

  • 安装依赖:pip install -e .

  • 现在,你就有了一个可用的 filesystem 服务器命令。

  • 选项 B:查找更多服务器:在 MCP 官方组织的Servers仓库中可以找到由社区维护的服务器列表,包括 GitHub、SQLite、Jira 等。


本文将以filesystem服务器为例进行演示。

二、核心实现流程与代码解析

在 LangChain 中接入 MCP 的核心步骤如下:


1. 导入关键模块


from langchain.agents import AgentExecutor, create_tool_calling_agentfrom langchain_core.messages import HumanMessage, SystemMessagefrom langchain_core.prompts import ChatPromptTemplatefrom 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. 初始化LLMllm = 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. 执行一个任务!async def main(): async with session: # 确保使用异步上下文管理器来管理MCP会话 result = await agent_executor.ainvoke({ "input": "请在 /tmp/mcp-demo 目录下创建一个名为 'hello.txt' 的文件,并写入内容 'Hello, MCP World!'" }) print(result["output"])
# 运行异步主函数import asyncioasyncio.run(main())
复制代码

三、流程解析与幕后发生了什么

当你运行上述代码时,LangChain 和 MCP 服务器之间会发生以下交互:


  1. 启动服务器:LangChain 根据MCPServerParameters的配置,作为一个父进程启动filesystem服务器子进程。

  2. 初始化握手:LangChain(客户端)与服务器通过 stdio 交换初始化信息,客户端获取服务器提供的工具列表和其模式(Schema)(包括名称、描述、参数等)。

  3. 工具调用

  4. 用户输入提问。

  5. LLM 根据 Prompt 和工具描述,决定调用write_file工具,并生成符合该工具模式的参数 JSON。

  6. AgentExecutor捕获到这个调用请求。

  7. LangChain 将调用请求通过 MCP 协议发送给服务器进程。

  8. filesystem服务器收到请求,在其内部执行真正的“写文件”操作。

  9. 服务器将操作结果(成功或失败信息)通过 M 协议返回给 LangChain。

  10. LangChain 将结果返回给 LLM。

  11. LLM 根据结果生成最终回答,返回给用户。


整个过程中,LangChain 并不需要知道write_file这个工具内部是如何实现的,它只负责按照 MCP 协议进行转发。这种关注点分离的设计极大地提升了系统的可维护性和扩展性。

四、总结与展望

通过 MCP 协议,LangChain 智能体获得了一种标准化、模块化的方式来扩展其能力。开发者不再被束缚于有限的内置工具,可以自由地“即插即用”任何遵循 MCP 协议的工具服务器,从操作本地文件到管理云上资源,几乎无所不能。


下一步尝试:


  • 探索更多的 MCP 服务器,如sqlite(操作数据库)、github(管理 PR、Issue)。

  • 尝试使用 Socket 模式连接服务器,而不是 Stdio 模式,这更适合于生产环境中将服务器作为独立服务部署的场景。

  • 关注 MCP 协议的快速发展,它正在成为连接 LLM 与外部工具生态的重要桥梁。


通过本文的指南,希望你已经掌握了将 MCP 强大能力融入你的 LangChain 智能体的钥匙,快去构建更强大、更智能的 AI 应用吧!


测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的持续交付

用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
在LangChain中无缝接入MCP服务器扩展AI智能体能力_测吧(北京)科技有限公司_InfoQ写作社区