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

[复制链接]
发表于 9 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
搭复杂 AI 智能体(Agent)时,一个绕不开的难题是怎么让大语言模型(LLM)和外部世界安全、高效地打交道。过去每接一个工具(数据库、API、文件系统)就得写一堆适配代码,繁琐还不好标准化。Model Context Protocol(MCP)就是冲着这个痛点来的:它规定了 LLM 应用(比如 LangChain)与工具、数据源(统称"服务器")之间的通信标准。下面用 LangChain 接 MCP 服务器走一遍完整流程,从装库、起进程到工具调用逐段拆。

一、为什么需要 MCP

MCP 是个开放协议,带来三件事:


  • 标准化:工具方写一个标准 MCP 服务器,任何支持 MCP 的客户端(如 LangChain、OpenAI GPTs)都能直接用上。
  • 安全性:权限控制是明确的,客户端能决定智能体访问哪些工具和数据,把潜在风险挡在外面。
  • 开发效率:开发者不用给每个工具重复写集成代码,专心做业务逻辑就行,社区里现成的 MCP 服务器资源可以直接拿。


LangChain 是最主流的 AI 应用开发框架之一,天生对 MCP 有一流支持。

二、准备工作与环境设置

测试开发全景图:人工智能测试、智能驱动、自动化、测试开发、左移右移与DevOps的连续交付
https://ceshiren.com/t/topic/34328

1. 安装 LangChain

确保装了最新版本的 langchain 和 langchain-core,MCP 相关功能通常包含在核心库里:
  1. pip install -U langchain langchain-core
复制代码

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

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


  • 选项 A:直接用现成的服务器:

    • 克隆仓库:git clone https://github.com/modelcontextprotocol/servers
    • 进入目录:cd servers/python/filesystem
    • 安装依赖:pip install -e .
    • 现在,你就有一个可用的 filesystem 服务器命令。


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

  • 选项 B:找更多服务器:在 MCP 官方组织的 Servers 仓库里能看到社区维护的服务器清单,包括 GitHub、SQLite、Jira 等。


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

三、核心实现流程与代码分析

1. 导入关键模块
  1. from langchain.agents import AgentExecutor, create_tool_calling_agent
  2. from langchain_core.messages import HumanMessage, SystemMessage
  3. from langchain_core.prompts import ChatPromptTemplate
  4. from langchain_openai import ChatOpenAI
  5. # 最重要的:导入MCP工具相关的模块
  6. from langchain.tools.mcp import create_mcp_tool, MCPClientSession, MCPServerParameters
复制代码

2. 创建 MCP 客户端会话并设置服务器

这一步是告诉 LangChain 怎么启动并连接你选中的 MCP 服务器:
  1. # 定义服务器参数,指定如何启动服务器进程
  2. server_params = MCPServerParameters(
  3.     # 命令名,即你在步骤一中安装的 filesystem 服务器命令
  4.     command="filesystem",
  5.     # 可选:传递给服务器的参数,例如指定当前工作目录
  6.     args=["--directory", "/tmp/mcp-demo"]
  7. )
  8. # 创建一个MCP客户端会话,管理客户端与服务器的连接和通信
  9. session = MCPClientSession(server_params=server_params)
复制代码

3. 从会话中创建 LangChain 工具

这是最关键的一步。create_mcp_tool 会跟 MCP 服务器握手,拿到服务器提供的全部工具列表,再动态转换成 LangChain 智能体可以直接调用的 Tool 对象:
  1. # 获取所有工具
  2. tools = create_mcp_tool(session, name="mcp-filesystem-tools")
  3. # 注意:`tools` 通常是一个工具列表(List[Tool]),因为一个服务器可能提供多个工具。
复制代码

可以打印一下 tools,看看这个服务器到底提供了什么:
  1. for tool in tools:
  2.     print(f"工具名: {tool.name}")
  3.     print(f"描述: {tool.description}")
  4.     print("---")
复制代码

对 filesystem 服务器来说,你大概会看到 read_file、write_file、list_directory 这些工具。

4. 构建智能体(Agent)并执行

现在这些 MCP 工具和普通 LangChain Tool 已经没什么区别了,可以像用别的工具一样把它们组装进智能体:
  1. # 1. 初始化LLM
  2. llm = ChatOpenAI(model="gpt-4o", temperature=0)
  3. # 2. 创建Prompt模板,指引智能体使用工具
  4. prompt = ChatPromptTemplate.from_messages([
  5.     ("system", "你是一个有帮助的助手,可以读写文件。请根据用户要求调用相应的工具。"),
  6.     ("placeholder", "{chat_history}"),
  7.     ("human", "{input}"),
  8.     ("placeholder", "{agent_scratchpad}"),
  9. ])
  10. # 3. 构建智能体
  11. agent = create_tool_calling_agent(llm=llm, tools=tools, prompt=prompt)
  12. # 4. 创建智能体执行器
  13. agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
  14. # 5. 执行一个任务!
  15. asyncdef main():
  16.     asyncwith session: # 确保使用异步上下文管理器来管理MCP会话
  17.         result = await agent_executor.ainvoke({
  18.             "input": "请在 /tmp/mcp-demo 目录下创建一个名为 'hello.txt' 的文件,并写入内容 'Hello, MCP World!'"
  19.         })
  20.         print(result["output"])
  21. # 运行异步主函数
  22. import asyncio
  23. asyncio.run(main())
复制代码

四、跑起来之后,背后发生了什么

运行时 LangChain 和 MCP 服务器之间会走这样一轮交互:


  • 启动服务器:LangChain 按 MCPServerParameters 的设置,作为父进程启动 filesystem 服务器子进程。
  • 初始化握手:客户端与服务器通过 stdio 交换初始化信息,客户端拿到服务器提供的工具列表和它的模式(Schema)(名称、描述、参数等)。
  • 工具调用:

    • 用户输入提问
    • LLM 根据 Prompt 和工具描述决定调用 write_file,并生成符合该工具模式的参数 JSON
    • AgentExecutor 捕获到这个调用请求
    • LangChain 通过 MCP 协议把请求发给服务器进程
    • filesystem 服务器收到请求,在执行层完成真正的"写文件"
    • 服务器把结果(成功或失败信息)通过 MCP 协议返回给 LangChain
    • LangChain 把结果回给 LLM
    • LLM 根据结果生成最终回答返回给用户



整个过程中 LangChain 并不需要知道 write_file 内部是怎么实现的,它只负责按 MCP 协议转发。这种关注点分离的设计把可维护性和扩展性都拉高了。

五、总结与下一步

借 MCP 协议,LangChain 智能体拿到了一种标准化、模块化的方式扩展能力:开发者不再被有限的内置工具绑住,可以"即插即用"任何遵循 MCP 的工具服务器,从操作本地文件到管云上资源,几乎都能覆盖。

下一步可以试试:


  • 多逛几个 MCP 服务器,比如 sqlite(操作数据库)、github(管理 PR、Issue)。
  • 试着用Socket模式连接服务器而不是 Stdio 模式,后者更适合生产环境把服务器当独立服务部署的场景。
  • 盯一下 MCP 协议的迭代速度,它正在成为连接 LLM 和外部工具生态的重要桥梁。


通过上面这套流程,希望你已经掌握了把 MCP 能力接进 LangChain 智能体的路子,可以动手去做更顺手的 AI 应用了。

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

编辑提示:本地先跑通 stdio 模式再换 Socket,注意 demo 目录 /tmp/mcp-demo 要给进程读写的权限,否则 write_file 会在第一次调用就失败。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表