【NLP】将 LangChain 与模型上下文协议 (MCP) 结合使用
🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
🔎
📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】 深度学习【DL】
🖍foreword
✔说明⇢本人讲解主要包括Python、机器学习(ML)、深度学习(DL)、自然语言处理(NLP)等内容。
如果你对这个系列感兴趣的话,可以关注订阅哟👋
一、MCP出现的目的
MCP 的出现是为了解决大型语言模型 (LLM) 应用程序的一个关键限制,即它们与外部数据源和工具的隔离。
基于 LLM 的应用的重点领域之一是数据传输。将数据传送到 LLM 进行推理,这是 RAG 实现的目标,而微调和 MCP 的目标也是如此。
MCP 的主要目的是标准化基于 LLM 的应用程序如何连接到不同的系统,如下图所示:
二、消除定制集成
AI 代理面临的挑战是将数据传递给 AI 代理,或者换句话说,将基于 AI 代理/LLM 的应用程序集成到外部数据源。
人们曾多次尝试利用 GUI、Web 浏览器和 Web 搜索来实现无缝集成。这些方法各有优缺点。
MCP 具有作为通用接口发挥作用的潜力,可以将其视为 AI 的 USB-C 的虚拟/软件版本。
实现 LLM/AI 代理和外部资源之间的无缝、安全和可扩展的数据交换。
MCP 采用客户端-服务器架构,其中 MCP 主机(AI 应用程序)与 MCP 服务器(数据/工具提供商)进行通信
开发人员可以使用MCP构建可重复使用的模块化连接器,并为流行平台提供预构建的服务器,从而创建社区驱动的生态系统。
MCP 的开源特性鼓励创新,允许开发人员扩展其功能,同时通过细粒度权限等功能保持安全性。
最终,MCP 旨在将 AI 代理从孤立的聊天机器人转变为深度集成到数字环境中的情境感知、可互操作的系统。
三、分步说明
Anthropic 的模型上下文协议 (MCP) 是一个开源协议,用于将 LLM 与上下文、工具和提示连接起来。它拥有越来越多的用户,可用于连接各种工具或数据源。在这里,我们将演示如何将任何 MCP 服务器连接到 LangGraph 代理并使用 MCP 工具……
如果您像我一样,获得一个原型作品,无论它多么简单,都会带来极大的清晰感和理解力;至少在我自己看来是这样。
首先,打开一个终端应用程序(WIN+R输入CMD)。
使用conda创建python虚拟环境用来运行代码;下面的命令创建了名为langchain_mcp_env的虚拟环境。
conda create -n langchain_mcp_env python=3.11.11
然后运行此命令来激活(进入)虚拟环境:
conda activate langchain_mcp_env langchain_openai langgraph
按顺序运行以下代码行:
pip install langchain-mcp-adapters
在一个终端选项卡中,创建一个文本文件:
vim math_server.py
并粘贴以下python代码:
from mcp.server.fastmcp import FastMCPmcp = FastMCP("Math_MCP")@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 * b@mcp.tool()
def sub(a: int, b: int) -> int:"""Multiply two numbers"""return a - b@mcp.tool()
def divide(a: int, b: int) -> float:"""Multiply two numbers"""return (a / b)if __name__ == "__main__":mcp.run(transport="stdio")
现在我们要使用ollama运行模型服务……
使用ollama自定义qwen2.5:7b模型名称为gpt-4o(避免不能进行工具调用)
ollama cp qwen2.5:7b gpt-4o:latest
启动ollama模型服务
ollama serve
创建一个文件来粘贴客户端代码:
vim client.py
将以下代码粘贴到文件中:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI
import asynciomodel = ChatOpenAI(base_url="http://localhost:11434/v1",api_key="EMPTY",model="gpt-4o")server_params = StdioServerParameters(command="python",# Make sure to update to the full absolute path to your math_server.py fileargs=["math_server.py"],
)async def run_agent():async with stdio_client(server_params) as (read, write):async with ClientSession(read, write) as session:# Initialize the connectionawait session.initialize()# Get toolstools = await load_mcp_tools(session)# Create and run the agentagent = create_react_agent(model, tools)agent_response = await agent.ainvoke({"messages": "计算下面算术题给出最终答案:(4 + 5 -3) x (12÷3) -11 ?"})return agent_response# Run the async function
if __name__ == "__main__":result = asyncio.run(run_agent())print("调用工具列表如下:\n")print(result['messages'][1].tool_calls)print("大模型各个步骤输出:\n")print('\n==============================\n'.join([i.content for i in result['messages']]))
使用以下命令运行客户端:
python client.py
客户端将运行一次并以以下输出结束:
四、结论
MCP 是一种将 AI 代理与提供上下文和记忆的信息和服务相集成的便捷方式。MCP 通过标准化接口与模块化设计,打破了大型语言模型(LLM)与外部数据源、工具的隔离壁垒,实现了数据传输与功能集成的高效化与通用化。其客户端 - 服务器架构不仅支持开发者构建可复用的连接器(如数学计算工具示例),还通过开源生态与细粒度权限管理,推动 AI 代理从孤立的聊天机器人向深度融入数字环境的情境感知系统进化。从 RAG 的数据推理到模型微调,MCP 为 LLM 应用提供了统一的数据交互范式,助力 AI 工具链在跨平台、跨系统场景下实现安全、可扩展的无缝协同,成为推动 AI 应用落地的关键基础设施。