大模型技术 LangChain使用MCP

在 LangChain 中使用 MCP (Model Context Protocol) 是目前连接外部数据源(如 GitHub、Google Drive、Slack 或本地文件系统)最标准、最便捷的方式。

MCP 的核心思想是:"一次编写工具,处处可以使用"。只要一个服务实现了 MCP 协议,LangChain 就可以通过一个统一的接口直接调用它的所有功能。

以下是在 LangChain 中集成 MCP 的详细指南。


一、 核心概念

在 LangChain 中集成 MCP 主要涉及两个概念:

  1. MCP 服务器 (Server):提供工具或数据的独立进程(如一个连接 SQLite 的 Node.js 程序)。
  2. MCP 客户端 (Client/Toolkit) :LangChain 侧的连接器,负责与服务器握手并将服务器的功能转化为 LangChain 的 BaseTool 对象。

二、 环境准备

你需要安装 LangChain 的 MCP 官方集成包:

bash 复制代码
pip install -U langchain-mcp langchain-openai

三、 快速上手:连接 MCP 服务器并使用工具

MCP 服务器通常通过 Stdio(标准输入输出,适合本地工具)进行通信。

1. 定义服务器连接参数

你需要告诉 LangChain 如何启动 MCP 服务器。例如,使用 npx 启动一个官方提供的示例服务器:

python 复制代码
from langchain_mcp import McpToolkit
from langchain_mcp.client import StdioServerParameters

# 配置 MCP 服务器(这里以官方的 "everything" 服务器为例,它包含了各种测试工具)
server_params = StdioServerParameters(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-everything"],
    env=None # 如果需要 API Key,可以在这里传入环境变量字典
)

2. 初始化 Toolkit 并获取工具

由于 MCP 通信是基于异步 JSON-RPC 的,建议在异步环境中使用:

python 复制代码
import asyncio
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate

async def run_mcp_agent():
    # 1. 创建支持工具调用的模型
    llm = ChatOpenAI(model="gpt-4o")

    # 2. 初始化 MCP Toolkit
    # Toolkit 会连接服务器并自动扫描出所有可用的工具
    async with McpToolkit(server_parameters=server_params) as toolkit:
        # 获取转换为 LangChain 格式的工具列表
        tools = toolkit.get_tools()
        
        # 3. 创建 Agent
        prompt = ChatPromptTemplate.from_messages([
            ("system", "你是一个拥有强大外部能力的助手。"),
            ("human", "{input}"),
            ("placeholder", "{agent_scratchpad}"),
        ])
        
        agent = create_tool_calling_agent(llm, tools, prompt)
        agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

        # 4. 执行任务(假设服务器提供了一个叫 echo 的工具)
        await agent_executor.ainvoke({"input": "使用 MCP 服务器的 echo 工具,输出内容为 'Hello LangChain!'"})

if __name__ == "__main__":
    asyncio.run(run_mcp_agent())

四、 进阶用法:处理资源 (Resources)

MCP 除了支持"动作"(Tools),还支持"资源"(Resources)。资源就像是只读的文件或数据流。

LangChain 的 McpToolkit 也可以列出服务器提供的资源:

python 复制代码
async with McpToolkit(server_parameters=server_params) as toolkit:
    # 获取资源列表
    resources = await toolkit.get_resources()
    for resource in resources:
        print(f"资源名称: {resource.name}, 路径: {resource.uri}")
        
    # 读取某个资源内容
    # content = await toolkit.read_resource("resource_uri_here")

五、 为什么在 LangChain 中使用 MCP?

  1. 极速扩展能力 :你可以直接从 MCP Servers 社区仓库 下载现成的服务器(如 Postgres, Docker, Git),几分钟内就能让你的 LangChain Agent 具备操作数据库或 Git 的能力。
  2. 解耦工具逻辑:工具可以用 Node.js 或 Go 编写在 MCP 服务器里,而你的业务逻辑在 Python 的 LangChain 里。
  3. 多 Agent 共享:一个 MCP 服务器可以同时为 LangChain、Claude Desktop 或其他支持 MCP 的客户端提供服务,无需重复开发。

六、 常见 MCP 服务器示例

你可以将 StdioServerParameters 中的 args 替换为以下任意一个:

  • 本地文件操作args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allow"]
  • Google Searchargs=["-y", "@modelcontextprotocol/server-google-search"](需设置环境变量 GOOGLE_API_KEY
  • GitHub 操作args=["-y", "@modelcontextprotocol/server-github"](需设置 GITHUB_PERSONAL_ACCESS_TOKEN

总结

在 LangChain 中使用 MCP,本质上是把 McpToolkit 作为一个工具转换器 。它扫描 MCP 服务器,把远程的协议接口"翻译"成 LangChain Agent 听得懂的 tools 列表,从而实现极其强大的插件化能力。

相关推荐
chaors1 小时前
DeepResearchSystem 0x07:搜索缓存
llm·agent·ai编程
starzy19909 小时前
LangChain深度解析:模型、链、Agent三大核心,解锁大模型落地的正确姿势
chatgpt·langchain
mingo_敏11 小时前
DeepAgents : 检索(Retrieval)
人工智能·深度学习·langchain
DLYSB_12 小时前
AIOps 大模型实战:基于 LangChain 运维 Agent 的根因诊断与现场声光播报闭环
运维·langchain·报警灯
phltxy15 小时前
多智能体系统架构设计:从单体代理到协作网络
python·langchain·系统架构
玉鸯16 小时前
多 Agent 系统通信的实现原理与最佳实践
llm·agent·mcp
眼泪划过的星空16 小时前
LangChain 两大基础提示词模板:PromptTemplate 与 ChatPromptTemplate 详解
人工智能·python·langchain
梦想三三17 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv
TunerT_TQ17 小时前
Valhalla 静态工程审阅 #009|Continue 源码证据驱动评测【大厂开源基础设施特辑】
vscode·测试工具·开源·llm·github·jetbrains·ai编程助手