大模型技术 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 列表,从而实现极其强大的插件化能力。

相关推荐
Warson_L9 小时前
Python的TypedDict
python·langchain·llm
XLYcmy11 小时前
面向安全领域决策的大型语言模型漏洞价值评估对齐机制与智能化评级系统研发 研究方向与核心内容
网络安全·llm·sft·cve·cot·对齐·漏洞检测
程序猿编码11 小时前
LLM+Agent 全栈推理底座:Triton 算子优化・语义级缓存・分布式调度
大模型·llm·agent·推理
小白跃升坊12 小时前
大模型推理入门:从原理到实践
ai·大模型·llm·推理优化
OKkankan12 小时前
LangChain能力详解!:从工具调用到 LangSmith——让聊天模型具备实时交互能力!
开发语言·python·langchain
武子康13 小时前
把 SGLang 接进 Agent,查一次订单要走几步
人工智能·llm·agent
demo007x13 小时前
让大模型活在你的鼠标旁:我用 Tauri 2 + Rust 打造了一款“反直觉”的 AI 全局划词效率神器
macos·程序员·llm
孙启超14 小时前
【AI开发之Rust】第 3 课:字符串与复合类型 —— 数据怎么放
开发语言·人工智能·后端·rust·llm·transformer
不好听61314 小时前
从朴素到智能:RAG 为什么需要 Agent 化——Agentic RAG 系列之一
llm
掰头战士14 小时前
三道保险丝,最后只能放弃治疗? 一文聊聊我的agent是怎么做死循环检测的
typescript·llm·agent