大模型技术 Agent添加MCP工具

MCP (Model Context Protocol) 是由 Anthropic 推出的新标准,旨在统一大模型与外部数据、工具之间的连接方式。在 LangChain 中集成 MCP 工具,可以让你轻松调用成百上千个现成的 MCP 服务(如本地文件操作、Google Search、SQLite 查询等)。

要在 LangChain Agent 中添加 MCP 工具,主要分为三步:连接 MCP 服务器 、转换工具格式 、注入 Agent。


一、 环境准备

你需要安装 langchain-mcp 库(这是 LangChain 专门为 MCP 开发的集成包):

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

二、 核心步骤与代码示例

假设我们要连接一个现成的 MCP 服务器(例如一个提供本地文件系统操作或简单数学运算的服务)。

1. 配置 MCP 服务器连接

MCP 通常通过 Stdio (标准输入输出,常用于本地可执行文件)或 SSE(服务器发送事件,常用于远程服务)进行通信。

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

# 定义如何启动 MCP 服务器
# 这里以一个名为 "my-mcp-server" 的本地命令为例
server_params = StdioServerParameters(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-everything"], # 这是一个官方示例服务器
    env=None
)

2. 获取并转换 MCP 工具

使用 McpToolkit 连接服务器并将其提供的工具转换为 LangChain 可识别的 BaseTool 格式。

python 复制代码
# 初始化 Toolkit
# 注意:这通常需要在异步环境下运行或使用 context manager
async def get_tools():
    toolkit = McpToolkit(server_parameters=server_params)
    
    # 初始化连接并获取工具列表
    await toolkit.initialize()
    return toolkit.get_tools()

3. 将工具交给 Agent

一旦拿到了 tools 列表,后续步骤与常规 LangChain Agent 开发完全一致。

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 main():
    # 1. 初始化模型(需支持 Tool Calling)
    llm = ChatOpenAI(model="gpt-4o")

    # 2. 获取 MCP 工具
    server_params = StdioServerParameters(
        command="npx",
        args=["-y", "@modelcontextprotocol/server-everything"]
    )
    toolkit = McpToolkit(server_parameters=server_params)
    await toolkit.initialize()
    tools = toolkit.get_tools()

    # 3. 创建 Prompt
    prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一个拥有外部插件能力的助手。"),
        ("human", "{input}"),
        ("placeholder", "{agent_scratchpad}"),
    ])

    # 4. 构建 Agent
    agent = create_tool_calling_agent(llm, tools, prompt)
    agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

    # 5. 执行任务
    # 假设该 MCP 服务器提供了一个 echo 工具
    result = await agent_executor.ainvoke({"input": "请使用 echo 工具对我说 '你好,MCP!'"})
    print(result["output"])

# 运行异步主函数
if __name__ == "__main__":
    asyncio.run(main())

三、 为什么使用 MCP 协议的工具?

  1. 即插即用 :你可以直接使用社区维护的 MCP 服务器列表(如 Postgres, Slack, GitHub, Docker 等),无需自己编写工具的 Python 函数。
  2. 跨语言:MCP 服务器可以用 TypeScript, Go, Python 等任何语言编写,而你的 LangChain 应用依然可以无缝调用。
  3. 标准化:工具的定义(Name, Description, Schema)完全遵循协议,减少了 LLM 解析出错的概率。

四、 常见注意事项

  • 异步运行 :MCP 的底层通信通常是异步的,因此建议在异步(async/await)环境中使用 langchain-mcp。
  • 资源释放 :在生产环境中,记得在应用关闭时通过 await toolkit.close() 断开与 MCP 服务器的连接,防止僵尸进程。
  • 多服务器连接 :你可以定义多个 StdioServerParameters,将来自不同服务器的工具汇总到一个 tools 列表中交给 Agent,实现多功能组合。

总结 :通过 McpToolkit,LangChain 将 MCP 服务器变成了一个"超级工具包",极大地扩展了 Agent 的能力边界。

相关推荐
打工仔折腾 AI11 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
deepseek2313 小时前
硬预算帽默认值拆解:AWS 九月上线支出上限、GCP 七月跟进,Agent 时代按量付费必须默认断供
人工智能·llm·云计算·agent·aws
打工仔折腾 AI14 小时前
把 AI Agent 托管到家里电脑:UU远程端口映射与CLI实测记录
人工智能·后端·python·langchain·电脑·ai agent 实战
染指111015 小时前
135.Agent-多Agent框架-LangChain多智能体(SubAgents子代理)
数据库·人工智能·设计模式·langchain·agent·agents
lucas_AI16 小时前
别等上下文爆了才压缩:AutoCompact 教编码智能体主动「断舍离」
llm·agent
用户31346721435416 小时前
Agent相关 - agent_scratchpad 到底该放哪?一个隐蔽的顺序坑
langchain·llm·agent
逆风飞翔的小叔17 小时前
【AI大模型】Langchain 多类型对话消息使用实战操作详解
langchain·langchain 消息类型·langchain 消息使用·langchain 消息详解·langchain 消息·langchain 消息总结
浮生望17 小时前
大模型结构化输出怎么选:从 JSON.parse、OutputParser 到 Zod
llm
AINative软件工程18 小时前
LLM Prompt Registry 工程实践:集中管理 Prompt,让模型调用不再散落在代码各处
后端·python·llm
XLYcmy1 天前
Dify 本地部署、Ollama 与 Xinference 集成:踩坑与最佳实践指南
llm·agent·dify·rag·ollama·rerank·harness