微信扫码
添加专属顾问
我要投稿
探索AI智能体如何通过LangChain和MCP实现数据与工具的高效集成。 核心内容: 1. 模型上下文协议(MCP)的背景与意义 2. LangChain集成MCP的实操演示步骤 3. 环境准备、依赖安装及MCP Server编写指南
MCP(Model Context Protocol) 是由 Anthropic 推出的开源协议,旨在为大型语言模型(LLM)提供安全、可解释、可扩展的外部数据与工具集成方案。
在基于大语言模型构建应用时,一个核心痛点是 数据与工具的接入困难。模型虽然能力强大,但通常处于“沙盒”状态,无法直接访问外部环境。
为此,RAG(检索增强生成)、微调、插件等方案陆续诞生。而 MCP 的目标正是统一接口协议,以便标准化集成上下文、工具、服务与数据源。
参考文章:
LLM 与外部系统的通信AI工具市场”可以将
MCP看作AI世界的“软件版USB-C”。
官方资源:
MCP 协议简介:https://modelcontext.org/GitHub 示例项目:https://github.com/modelcontextprotocol/servers本节将通过实操演示,介绍如何将
LangChain与MCP工具集成,打造一个拥有算术能力的AI智能体。
注意:示例来自https://github.com/langchain-ai/langchain-mcp-adapters。
| 步骤 | 内容 |
|---|---|
Python 虚拟环境 | |
MCP Server(数学工具) | |
LangChain 智能体 | |
python3 -m venv MCP_Demosource MCP_Demo/bin/activate
安装依赖:
pip install langchain-mcp-adapters langgraph langchain-openaiexport OPENAI_API_KEY=<your_api_key>
请将文本<your_api_key> 替换为您的OpenAI API密钥。
创建 math_server.py 文件:
from mcp.server.fastmcp import FastMCPmcp = FastMCP("Math")def add(a: int, b: int) -> int:return a + bdef multiply(a: int, b: int) -> int:return a * bif __name__ == "__main__":mcp.run(transport="stdio")
运行服务器:
python3 math_server.py
创建 client.py:
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 asynciomodel = ChatOpenAI(model="gpt-4o")server_params = StdioServerParameters(command="python",args=["math_server.py"], # 替换为绝对路径)async 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 = create_react_agent(model, tools)result = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})return resultif __name__ == "__main__":print(asyncio.run(run_agent()))
运行客户端:
python3 client.py
客户端输出如下:
{'messages': [# 1. 用户原始提问HumanMessage(content="what's (3 + 5) x 12?",id='87a8b6b6-...', # 消息唯一标识metadata={...}),# 2. AI首次响应(工具调用)AIMessage(content='',tool_calls=[{'name': 'add', # 第一个工具调用:加法'args': {'a':3, 'b':5}, # 参数'id': 'call_1eyRzR...' # 工具调用ID},{'name': 'multiply', # 第二个工具调用:乘法'args': {'a':8, 'b':12},'id': 'call_q82CX...'}],token_usage={...}, # 本次调用的Token消耗finish_reason='tool_calls' # 终止原因:触发了工具调用),# 3. 工具执行结果返回ToolMessage(content='8', # add工具的执行结果name='add', # 对应工具名称tool_call_id='call_1eyRzR...' # 关联的工具调用ID),ToolMessage(content='96', # multiply工具的执行结果name='multiply',tool_call_id='call_q82CX...'),# 4. AI最终响应AIMessage(content='content=‘The result of (3 + 5) × 12 is 96.', # 最终自然语言答案finish_reason='stop', # 正常终止token_usage={ # 总Token消耗'input_tokens': 143,'output_tokens': 22,'total_tokens': 165})]}
用户输入阶段
HumanMessage 记录原始问题:"3加5乘12等于多少?"ID、响应元数据等AI推理阶段
add工具计算3+5multiply工具计算8x12AIMessage 显示分步思考过程:finish_reason: tool_calls 表示需要等待工具执行结果工具执行阶段
add工具返回8(对应3+5)multiply工具返回96(对应8x12)ToolMessage 包含工具执行结果:tool_call_id关联到对应的工具调用请求最终响应阶段
AIMessage生成自然语言答案finish_reason: stop 表示正常结束关键字段说明
| 字段 | 说明 |
|---|---|
token_usage | |
system_fingerprint | |
tool_call_id | |
finish_reason |
Token 使用情况示例:
| 阶段 | 输入 | 输出令牌 | 总计 |
|---|---|---|---|
| 总计 |
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-29
为什么我们选择 LangGraph 作为智能体系统的技术底座?
2025-10-27
Langchain 、 Manus 组了一个研讨会:Agent越智能,死得越快!
2025-10-23
LangChain V1.0 深度解析:手把手带你跑通全新智能体架构
2025-10-23
LangChain 与 LangGraph 双双发布 1.0:AI 智能体框架迎来里程碑时刻!
2025-10-19
AI 不再“乱跑”:LangChain × LangGraph 打造可控多阶段智能流程
2025-10-15
LangChain对话Manus创始人:顶级AI智能体上下文工程的“满分作业”首次公开
2025-10-09
Langchain回应OpenAI:为什么我们不做拖拉拽工作流
2025-09-21
告别无效检索:我用LangExtract + Milvus升级 RAG 管道的实战复盘
2025-09-13
2025-09-21
2025-10-19
2025-08-19
2025-08-17
2025-09-19
2025-09-12
2025-09-06
2025-08-03
2025-08-29
2025-10-29
2025-07-14
2025-07-13
2025-07-05
2025-06-26
2025-06-13
2025-05-21
2025-05-19