一个LangChain与MCP结合使用的案例


Model Context Protocol(MCP)是由 Anthropic 开发的开源协议,专注于构建安全且可解释的生成式 AI 系统。


MCP 的诞生源于解决 LLM 应用的一个关键限制,即它们与外部数据源和工具的隔离问题。


LLM 应用的一个核心关注点是数据传输,即如何将数据提供给 LLM 进行推理。这一直是 RAG 和微调的目标,同时也是 MCP 的目标。


MCP 的主要目的是标准化 LLM 应用如何连接到不同的系统,如下图所示:



图片来源:

https://github.com/modelcontextprotocol/servers




消除自定义集成  




AI Agent 在获取数据时面临一个挑战,换句话说,就是如何将 AI Agent 或基于 LLM 的应用集成到外部数据源中。


为了实现无缝集成,已经有许多尝试,例如利用 GUI、Web 浏览器和 Web 搜索等方式。


这些方法各有优劣。



MCP 有潜力成为一个通用接口,可以将其视为 AI 领域的虚拟/软件版 USB-C。


它能够在 LLM/AI Agent 与外部资源之间实现无缝、安全且可扩展的数据交换。


MCP 采用客户端-服务器架构,其中 MCP 主机(AI 应用)与 MCP 服务器(数据/工具提供方)进行通信。


开发者可以使用 MCP 构建可复用、模块化的连接器,并利用针对主流平台的预构建服务器,从而打造一个由社区驱动的生态系统。


MCP 的开源特性鼓励创新,允许开发者扩展其功能,同时通过精细化权限控制等特性确保安全性。


最终,MCP 旨在将 AI Agent 从孤立的聊天机器人转变为具备上下文感知能力、可互操作且深度集成于数字环境的系统。


逐步指南  



Anthropic 的 Model Context Protocol(MCP)是一个开源协议,用于将 LLM 连接到上下文、工具和提示词。它支持越来越多的服务器(server),可以用于连接各种工具或数据源。在本指南中,我们将演示如何将 MCP 服务器连接到 LangGraph agents,并使用 MCP 工具……


如果你和我一样,那么无论原型多么简单,能够让它运行起来都会带来极大的清晰感和理解力——至少在我的思维方式里是这样的。


开始之前,请打开终端应用(Terminal)。下面是在 MacBook 上找到它的位置:



在终端窗口中,创建两个选项卡;我们将在一个选项卡中运行服务器,在另一个选项卡中运行客户端。



创建虚拟环境并安装依赖


推荐的最佳实践是在虚拟环境中安装和运行代码。使用以下命令创建名为 MCP_Demo 的虚拟环境:

python3 -m venv MCP_Demo


然后运行以下命令激活(进入)虚拟环境

source MCP_Demo/bin/activate


激活后,你会看到命令行提示符更新为 (MCP_Demo),表示已进入该虚拟环境。


安装必要的依赖


按顺序运行以下命令安装所需的 Python 包:

pip install langchain-mcp-adapterspip install langchain-mcp-adaptersexport OPENAI_API_KEY=<your_api_key>


请将 <your_api_key> 替换为你的 OpenAI API Key


创建并运行 MCP 服务器


创建 Python 服务器文件


在终端中运行以下命令创建一个文本文件:

vim server.py


粘贴以下 Python 代码


# math_server.pyfrom mcp.server.fastmcp import FastMCPmcp = FastMCP("Math")@mcp.tool()def add(a: int, b: int) -> int:    """Add two numbers"""    return a + b@mcp.tool()def multiply(a: int, b: int) -> int:    """Multiply two numbers"""    return a * bif __name__ == "__main__":    mcp.run(transport="stdio")


保存并关闭文件


 vim 中,按 ESC,输入 :wq 并回车


运行 MCP 服务器


使用以下命令启动服务器:

python3 math_server.py


运行后,终端不会有明显的输出,界面会如下所示:



创建并运行 MCP 客户端


在一个终端标签页运行 MCP 服务器的同时,打开另一个终端标签页,按照以下步骤操作:


创建客户端文件


在新的终端标签页中,运行以下命令创建 client.py 文件:

vim client.py


粘贴以下 Python 代码


# 创建与 stdio 连接的服务器参数from mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_clientfrom langchain_mcp_adapters.tools import load_mcp_toolsfrom langgraph.prebuilt import create_react_agentfrom langchain_openai import ChatOpenAIimport asyncio# 使用 GPT-4o 作为 LLM 模型model = ChatOpenAI(model="gpt-4o")# 设置服务器参数server_params = StdioServerParameters(    command="python",    # 请确保更新为 `math_server.py` 文件的完整绝对路径    args=["math_server.py"],)# 定义异步任务运行 agentasync def run_agent():    async with stdio_client(server_params) as (read, write):        async with ClientSession(read, write) as session:            # 初始化连接            await session.initialize()            # 加载工具            tools = await load_mcp_tools(session)            # 创建并运行 agent            agent = create_react_agent(model, tools)            agent_response = await agent.ainvoke({"messages""what's (3 + 5) x 12?"})            return agent_response# 运行异步函数if __name__ == "__main__":    result = asyncio.run(run_agent())    print(result)


运行 MCP 客户端


在终端中执行以下命令运行客户端:

python3 client.py


观察运行结果


客户端会运行一次,并输出类似如下的结果:


{  "messages": [    {      "content""what's (3 + 5) x 12?",      "id""87a8b6b6-9add-4da7-aea5-1b197c0fc0f5"    },    {      "tool_calls": [        {          "id""call_1eyRzR7WpKzhMXG4ZFQAJtUD",          "function": {            "arguments""{\"a\": 3, \"b\": 5}",            "name""add"          },          "type""function"        },        {          "id""call_q82CX807NC3T6nHMrhoHT46E",          "function": {            "arguments""{\"a\": 8, \"b\": 12}",            "name""multiply"          },          "type""function"        }      ]    },    {      "content""The result of \\((3 + 5) \\times 12\\) is 96."    }  ]}



总结  




MCP 是一个强大且便捷的方式,可以将 AI Agent 与外部信息和服务集成,从而提供更丰富的上下文和记忆能力。



https://medium.com/@cobusgreyling/using-langchain-with-model-context-protocol-mcp-e89b87ee3c4c







(文:PyTorch研习社)

欢迎分享

发表评论