构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: 本文以LangChain和文件系统服务器为例,详细介绍了MCP的配置、工具创建及调用流程,展现了其“即插即用”的模块化优势,为构建复杂AI应用提供了强大支持。

为什么需要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服务器的完整流程。

一、准备工作与环境配置

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

1. 安装LangChain

首先,确保你安装了最新版本的langchainlangchain-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服务器为例进行演示。


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

在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服务器之间会发生以下交互:

  1. 启动服务器:LangChain根据MCPServerParameters的配置,作为一个父进程启动filesystem服务器子进程。
  2. 初始化握手:LangChain(客户端)与服务器通过stdio交换初始化信息,客户端获取服务器提供的工具列表和其模式(Schema)(包括名称、描述、参数等)。
  3. 工具调用
  • 用户输入提问。
  • 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 系统真正具备调用后端服务、执行复杂逻辑的能力。


相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
2天前
|
边缘计算 人工智能 算法
AI在智慧能源管理中的边缘计算应用
AI在智慧能源管理中的边缘计算应用
42 13
|
2天前
|
人工智能 Cloud Native 中间件
划重点|云栖大会「AI 原生应用架构论坛」看点梳理
本场论坛将系统性阐述 AI 原生应用架构的新范式、演进趋势与技术突破,并分享来自真实生产环境下的一线实践经验与思考。
|
2天前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
|
2天前
|
人工智能 自然语言处理 前端开发
深度解析Playwright MCP:功能、优势与挑战,AI如何提升测试效率与覆盖率
Playwright MCP通过AI与浏览器交互,实现自然语言驱动的自动化测试。它降低门槛、提升效率,助力测试工程师聚焦高价值工作,是探索性测试与快速验证的新利器。
|
3天前
|
Web App开发 人工智能 自然语言处理
快速搞定Dify+Chrome MCP:打造能操作网页的AI助手
用Dify+Chrome MCP,3分钟打造能“动手”操作网页的AI助手!无需编程,通过自然语言指令实现自动填表、数据抓取、网页点击等自动化任务。本地部署简单,支持搜索、登录、监控等场景,让AI成为你的7×24小时数字员工,高效处理重复性网页工作。
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
大语言模型:理解与构建下一代AI交互
大语言模型:理解与构建下一代AI交互
150 99
|
4天前
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术深度解析:生成式AI的革命性突破与产业应用实战
蒋星熠Jaxonic,AI技术探索者,深耕生成式AI领域。本文系统解析AIGC核心技术,涵盖Transformer架构、主流模型对比与实战应用,分享文本生成、图像创作等场景的实践经验,展望技术趋势与产业前景,助力开发者构建完整认知体系,共赴AI原生时代。
61 1
|
5天前
|
人工智能 自然语言处理 算法
现代AI工具深度解析:从GPT到多模态的技术革命与实战应用
蒋星熠Jaxonic,AI技术探索者,深耕代码生成、多模态AI与提示词工程。分享AI工具架构、实战应用与优化策略,助力开发者提升效率,共赴智能编程新纪元。
31 4
|
6天前
|
XML 人工智能 JSON
别再误会MCP了!一篇写给AI工程师的硬核“辟谣”指南
本文深入剖析Model Context Protocol(MCP)的本质,澄清其常被误认为“高级Function Calling”的认知偏差。通过架构分析、源码验证与实战解剖,论证MCP实为模型无关的工程协议,由Host、Client、Server三组件构成,核心在于实现AI智能与能力执行的解耦。文章揭示MCP的真实价值是提供标准化、可互操作的AI应用基础设施,而非直接提升AI能力,并指出其在Token成本与意图识别稳定性上的挑战,最终回归工程本质,强调对Host智能优化的关键作用。
别再误会MCP了!一篇写给AI工程师的硬核“辟谣”指南
|
6天前
|
存储 人工智能 安全
Subagents:构建高可靠 AI Coding 专家顾问团
本文探讨了 Claude Code 的 Subagents 功能在复杂 AI 编程场景中的核心价值与落地实践,提出了“专家顾问天团 + 工作流编排”的系统性解决方案。