支持私有化部署
AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


LangChain + 模型上下文协议(MCP):AI 智能体 Demo

发布日期:2025-04-13 15:04:08 浏览次数: 1582 作者:原力注入
推荐语

探索AI智能体如何通过LangChain和MCP实现数据与工具的高效集成。

核心内容:
1. 模型上下文协议(MCP)的背景与意义
2. LangChain集成MCP的实操演示步骤
3. 环境准备、依赖安装及MCP Server编写指南

杨芳贤
53A创始人/腾讯云(TVP)最具价值专家

MCP(Model Context Protocol) 是由 Anthropic 推出的开源协议,旨在为大型语言模型(LLM)提供安全、可解释、可扩展的外部数据与工具集成方案。


1. 背景与动机:MCP 的意义何在?

在基于大语言模型构建应用时,一个核心痛点是 数据与工具的接入困难。模型虽然能力强大,但通常处于“沙盒”状态,无法直接访问外部环境。

为此,RAG(检索增强生成)、微调、插件等方案陆续诞生。而 MCP 的目标正是统一接口协议,以便标准化集成上下文、工具、服务与数据源。


相关资料

参考文章:

  • MCP、Function Calling 有什么区别?与 AI Agent 有什么关系?
  • 【转载】MCP(Model Context Protocol)全面研究报告:概念、实践与未来趋势
  • Cline 55k 系统提示词刷新了我对提示词工程的认知

推荐书籍:


✅ MCP 的愿景

  • 提供标准协议:简化 LLM 与外部系统的通信
  • 安全可扩展:支持权限管理、细粒度访问控制
  • 模块化生态:建立社区驱动的“AI工具市场”

可以将 MCP 看作 AI 世界的“软件版 USB-C”。

MCP 架构图

官方资源

  • MCP 协议简介:https://modelcontext.org/
  • GitHub 示例项目:https://github.com/modelcontextprotocol/servers

2. 如何用 LangChain 集成 MCP?

本节将通过实操演示,介绍如何将 LangChain 与 MCP 工具集成,打造一个拥有算术能力的 AI 智能体。
注意:示例来自 https://github.com/langchain-ai/langchain-mcp-adapters

准备步骤概览:

步骤内容
1
创建并激活 Python 虚拟环境
2
安装必要依赖
3
编写 MCP Server(数学工具)
4
编写客户端接入 LangChain 智能体
5
分析输出流程

3. 环境准备与依赖安装

创建虚拟环境

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密钥。

4. 编写 MCP Server(数学计算工具)

创建 math_server.py 文件:

from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Math")
@mcp.tool()def add(a: int, b: int) -> int:    return a + b
@mcp.tool()def multiply(a: int, b: int) -> int:    return a * b
if __name__ == "__main__":    mcp.run(transport="stdio")

运行服务器:

python3 math_server.py

5. 编写客户端(集成 LangGraph 智能体)

创建 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 asyncio
model = 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 result
if __name__ == "__main__":    print(asyncio.run(run_agent()))

运行客户端:

python3 client.py

6. 消息交互流程解析

完整消息

客户端输出如下:

{    '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            }        )    ]}

执行流程说明

  1. 用户输入阶段

  • HumanMessage 记录原始问题:"3加5乘12等于多少?"
  • 包含元数据:消息ID、响应元数据等
  • AI推理阶段

    • 第一步调用add工具计算3+5
    • 第二步调用multiply工具计算8x12
    • AIMessage 显示分步思考过程:
    • finish_reason: tool_calls 表示需要等待工具执行结果
  • 工具执行阶段

    • add工具返回8(对应3+5)
    • multiply工具返回96(对应8x12)
    • ToolMessage 包含工具执行结果:
    • 每个结果都通过tool_call_id关联到对应的工具调用请求
  • 最终响应阶段

    • 新的AIMessage生成自然语言答案
    • 使用LaTeX格式展示数学表达式:
    • finish_reason: stop 表示正常结束

    7. 元数据与性能指标分析

    关键字段说明

    字段说明
    token_usage
    记录各阶段的令牌消耗情况
    system_fingerprint
    模型版本指纹(fp_eb9dce56a8)
    tool_call_id
    工具调用的唯一关联标识
    finish_reason
    终止类型(tool_calls/stop)

    Token 使用情况示例

    阶段输入
     令牌
    输出令牌总计
    初始请求
    77
    51
    128
    最终响应
    143
    22
    165
    总计
    220
    73
    293

    8. 小结:MCP + LangChain 的价值

    • ✅ 标准化接入:无需为每种数据源编写专属适配器
    • ✅ 模块化复用:工具作为可组合单元,多智能体可复用
    • ✅ 提升智能体能力:突破“模型只能聊天”的边界
    • ✅ 安全可控:客户端-服务端通信可附带权限控制


53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询