【大模型入门必看】LangChain与MCP强强联合:打造高效智能应用的新篇章
Model Context Protocol (MCP) 是Anthropic开发的开源协议,旨在解决大型语言模型(LLM)与外部数据源和工具的连接问题。MCP采用客户端-服务器架构,通过标准化接口实现AI应用与多种系统的无缝集成,支持数据交换和工具调用。文中演示了如何搭建基于MCP的数学计算服务器,并将其与LangGraph智能体连接,完成"(3+5)x12"的计算任务。MCP类似于AI领域的"
MCP 的出现源于这样一个关键问题:大型语言模型(LLM)应用无法与外部数据源和工具进行连接,形成了隔离运行的限制。
在基于 LLM 的应用中,数据传递一直是一个核心关注点。即:如何将数据送达 LLM 以供其推理使用。这是 RAG(检索增强生成)、微调(Fine-tuning)方法,以及 MCP 协议本身所致力于解决的问题。
MCP 的核心目的,是标准化 LLM 应用与多种系统之间的连接方式,正如下面这张图所示:
消除定制化集成(Eliminating Custom Integration)
在构建 AI 智能体的过程中,存在一个关键挑战:如何将数据传递给 AI 智能体。 换句话说,即如何将 AI 智能体 / 基于 LLM 的应用集成到外部数据源中。
为了解决这一问题,人们尝试了多种方式来实现尽可能无缝的集成,包括:使用图形化界面(GUI),使用网页浏览器,使用网页搜索能力等手段。这些方式各有优劣,虽然它们在某些场景下取得了一定效果,但也存在明显的局限性。
MCP 有望成为一个通用接口,你可以把它看作是 AI 领域中虚拟 / 软件版本的 USB-C。
它能够在 LLM / AI 智能体 与外部资源之间,实现无缝、安全且可扩展的数据交换。
MCP 采用客户端-服务器架构,其中 MCP 主机(AI 应用)与 MCP 服务器(数据 / 工具提供方)进行通信。
开发者可以使用 MCP 构建可复用的、模块化的连接器。同时,已有为主流平台构建的预设服务器,正在形成一个由社区驱动的生态系统。
MCP 的开源特性鼓励创新,开发者可以在不牺牲安全性的前提下扩展其功能,比如借助细粒度权限控制等机制来保障系统安全。
最终,MCP 的目标是将 AI 智能体从孤立的聊天机器人,转变为具备上下文感知能力、可互操作的系统,并与数字环境深度集成。
📌 延伸阅读:
AI Agents Are Much More Vulnerable Than LLM-Based Applications[1]
研究显示,相比于独立的 LLM,AI 智能体更容易受到攻击……
分步操作指南(Step by Step Instructions)
Anthropic 的 Model Context Protocol(MCP)是一个开源协议,用于将 LLM 与上下文、工具和提示词连接起来。它支持越来越多的 服务器(servers),用于连接各种工具或数据源。
在本指南中,我们将演示如何将 任意 MCP 服务器 连接到 LangGraph 智能体,并使用 MCP 工具。
如果你跟我一样,哪怕只是让一个原型跑起来,也会带来极大的清晰感和理解力 —— 至少在我自己的脑海中是这样的。
第一步:打开终端应用
在你的电脑上打开 Terminal(终端)应用。下面是如何在 MacBook 上找到它的示意图:
第二步:创建两个终端标签页(Tabs)
在终端窗口中,创建两个标签页:
•一个标签页用来运行 服务器端(MCP Server)•另一个标签页用来运行 客户端(MCP Client 或 LangGraph Agent)
接下来我们将在这两个终端中分别启动所需组件,并一步步连接它们。
第三步:创建虚拟环境并运行代码
在安装和运行代码前,创建虚拟环境是一个良好的实践。
下面的命令将创建一个名为 MCP_Demo
的虚拟环境:
python3 -m venv MCP_Demo
然后运行以下命令以激活(进入)该虚拟环境:
source MCP_Demo/bin/activate
你会看到命令提示符前出现 (MCP_Demo),表示你已成功进入虚拟环境。
依次运行以下命令:
pip install langchain-mcp-adapters
pip install langchain-mcp-adapters
export OPENAI_API_KEY=<your_api_key>
请将 your_api_key
替换为你自己的 OpenAI API 密钥,例如:
export OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxx
在其中一个终端标签页中,创建一个名为vim server.py
的文本文件。
然后将以下 Python 代码粘贴到文件中:
# math_server.py
from mcp.server.fastmcp importFastMCP
# 初始化一个 MCP 服务器,命名为 "Math"
mcp =FastMCP("Math")
# 定义一个 MCP 工具:加法
@mcp.tool()
def add(a:int, b:int)->int:
"""两个数字相加"""
return a + b
# 定义另一个 MCP 工具:乘法
@mcp.tool()
def multiply(a:int, b:int)->int:
"""两个数字相乘"""
return a * b
# 启动服务器,使用 stdio 作为通信方式
if __name__ =="__main__":
mcp.run(transport="stdio")
关闭文本文件后,使用以下命令启动并运行服务器:
python3 math_server.py
你不会看到任何输出,终端窗口看起来将如下所示:
第四步:创建并运行客户端(Client)
当 MCP 服务器正在一个终端标签页中运行时,切换到另一个终端标签页。
在该终端中创建一个新的文件来粘贴客户端代码:vim client.py
。
将以下代码粘贴到文件中:
# 创建 stdio 连接的服务器参数
from mcp importClientSession,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 importChatOpenAI
import asyncio
# 初始化 OpenAI 模型(这里使用 gpt-4o)
model =ChatOpenAI(model="gpt-4o")
# 设置 MCP Server 参数(通过标准输入输出进行通信)
server_params =StdioServerParameters(
command="python",
# 请将此处路径替换为你 math_server.py 文件的绝对路径
args=["math_server.py"],
)
# 定义运行智能体的异步函数
async def run_agent():
async with stdio_client(server_params)as(read, write):
async withClientSession(read, write)as session:
# 初始化连接
await session.initialize()
# 加载 MCP 工具
tools = await load_mcp_tools(session)
# 创建并运行智能体
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)
在第二个终端标签页中运行客户端命令:python3 client.py
。
该客户端会执行一次,然后结束,输出如下内容(示例):
{'messages':
[HumanMessage(content=“(3+5) x 12等于多少?" ,
additional_kwargs={}, response_metadata={},
id='87a8b6b6-9add-4da7-aea5-1b197c0fc0f5'),
AIMessage(content='',
additional_kwargs={'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'}],
'refusal':None},
response_metadata={'token_usage':
{'completion_tokens':51,
'prompt_tokens':77,
'total_tokens':128,
'completion_tokens_details':
{'accepted_prediction_tokens':0,
'audio_tokens':0,
'reasoning_tokens':0,
'rejected_prediction_tokens':0},
'prompt_tokens_details':
{'audio_tokens':0,
'cached_tokens':0}},
'model_name':'gpt-4o-2024-08-06',
'system_fingerprint':'fp_eb9dce56a8',
'finish_reason':'tool_calls',
'logprobs':None},
id='run-13c01640-f92b-48b7-9340-c2ad983eb1c8-0',
tool_calls=[{'name':'add','args':{'a':3,'b':5},
'id':'call_1eyRzR7WpKzhMXG4ZFQAJtUD',
'type':'tool_call'},{'name':'multiply',
'args':{'a':8,'b':12},
'id':'call_q82CX807NC3T6nHMrhoHT46E',
'type':'tool_call'}],
usage_metadata={'input_tokens':77,
'output_tokens':51,
'total_tokens':128,
'input_token_details':{'audio':0,
'cache_read':0},
'output_token_details':{'audio':0,
'reasoning':0}}),
ToolMessage(content='8',
name='add',
id='f8e0aba5-7a62-44c6-92a3-5fe3b07c9bd5',
tool_call_id='call_1eyRzR7WpKzhMXG4ZFQAJtUD'),
ToolMessage(content='96',
name='multiply',
id='66b9bbd9-b99a-402f-b26c-df83f5a69fa3',
tool_call_id='call_q82CX807NC3T6nHMrhoHT46E'),
AIMessage(content='The result of \\((3 + 5) \\times 12\\) is 96.',
additional_kwargs={'refusal':None},
response_metadata={'token_usage':{'completion_tokens':22,
'prompt_tokens':143,
'total_tokens':165,
'completion_tokens_details':{'accepted_prediction_tokens':0,
'audio_tokens':0,
'reasoning_tokens':0,
'rejected_prediction_tokens':0},
'prompt_tokens_details':{'audio_tokens':0,
'cached_tokens':0}},
'model_name':'gpt-4o-2024-08-06',
'system_fingerprint':'fp_eb9dce56a8',
'finish_reason':'stop',
'logprobs':None},
id='run-6c00a336-7d52-4917-9186-b282a5984b10-0',
usage_metadata={'input_tokens':143,
'output_tokens':22,
'total_tokens':165,
'input_token_details':{'audio':0,'cache_read':0},
'output_token_details':{'audio':0,
'reasoning':0}})]}
你已完成一个完整的 LangChain + MCP + LangGraph 智能体原型搭建!
总结(Finally)
MCP 是一种便捷的方式,可将 AI 智能体与提供上下文和记忆能力的信息与服务集成起来。
如何学习AI大模型?
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)