LangChain与MCP集成:从工具混乱到上下文清晰
基于来自……的例子构建 LangChain MCP适配器 仓库(在计算机科学中,通常指存储代码、数据等资源的地方)
太长,读不下去了
这个项目展示了LangChain代理如何自动发现并协调来自多个MCP服务器(时间、推理、文档)的工具。突破之处在于: 上下文7——一个文档检索系统,它基于来自40多个库(如LangChain、LangGraph、OpenAI、Next.js、Redis等)的真实、版本化的文档来生成代理响应,从而消除幻觉。
快速入门: python clients/integration_test_mcp_json.py | 实际示例: LangSmith 追踪(或“追踪功能”)
一目了然的堆栈视图
LangChain 1.0.2 | MCP SDK ≥1.6.0 | FastMCP | Context7 | LangSmith | Python ≥3.13
Transport: stdio, HTTP (streamable-http), SSE | LLM: OpenAI GPT-4.1______________________________________________________________________
🧩 问题
人工智能工程师面临着一个持续的挑战:将来自不同来源的工具——Python、Node.js、不同的传输方式、各种API模式——集成到统一的智能体框架中。传统方法会导致供应商锁定、脆弱的集成以及易产生幻觉的推理。
如果有一种更好的方法呢?
这个项目展示了一个 基于协议的方法 其中 模型上下文协议(MCP) 作为通用适配器,使代理能够:
- 自动发现工具 来自异构服务
- 实际文档中的地面响应 (不是幻觉)
- 透明地推理 具有可观察的决策路径
这不仅仅是关于连接API的问题,而是关于构建 可组合的智能体生态系统 在这里,驱动智能的是上下文,而不仅仅是推理。
______________________________________________________________________
🏗️ 系统概述
该架构遵循清晰的职责分离原则:
flowchart LR
A[User Query] --> B[LangChain Agent]
B --> C[MultiServerMCPClient]
C -->|Tool Discovery| D1[mcp-server-time]
C -->|Tool Discovery| D2[sequential-thinking]
C -->|Tool Discovery| D3[Context7]
D1 --> E1[Time data]
D2 --> E2[Reasoning traces]
D3 --> E3[Documentation grounding]
E1 & E2 & E3 --> F[LangChain Agent Response]
F --> G[LangSmith Trace + Display Utils]MCP服务器角色
| 服务器 | 用途 | 示例工具 |
|---|---|---|
| mcp-server-time 翻译为中文是:“MCP服务器时间”或“MCP服务器时钟时间” | 时间推理和时区操作 | get_current_time, convert_time |
| 顺序思维 | 用于逐步推理的逻辑框架 | sequentialthinking, plan_steps |
| 上下文7 | 文档基础(或文档扎根) — 从LangChain、LangGraph、MCP以及40多个其他库中检索真实文档 | resolve-library-id, get-library-docs |
💡 灯泡(表示想法或灵感的闪现) 为何选择Context7? Context7的扩展范围远远超出了LangChain——它提供了来自权威来源的文档 40多个生态系统 包括OpenAI SDKs、Next.js、Redis、Supabase、Hugging Face等。这使其成为事实性AI响应的通用基础层,而不仅仅是工具适配器。
所有工具都是 自动发现的 通过MCP协议,作为统一工具包暴露给代理。
______________________________________________________________________
💡 为何这很重要
该架构展示了生产级智能代理系统所需的三个关键支柱:
1. 标准化(MCP协议)
- 将智能体与工具实现解耦 — 不受供应商锁定限制
- 与语言无关的 — Python、Node.js 或任何运行时环境
- 与传输方式无关 — stdio(标准输入输出)、HTTP、SSE(服务器发送事件)或 WebSocket
2. 接地(上下文7)
- 事实准确性 通过权威文档检索
- 来源归属 — 每个答案都链接到经过验证的文档
- 版本意识 — 查询特定的库版本(例如。,
/langchain/langchain/1.0.2)
3. 可观测性(LangSmith)
- 可见的推理路径 — 查看每个工具调用和决策
- 可调试的执行 — 追踪故障至根本原因
- 性能指标 — 令牌使用、延迟、工具选择
⚡(闪电符号,常用于表示速度、活力或紧急情况,具体含义需结合上下文) 关键要点: MCP将工具集成方式从代码布线转变为协议协商。Context7确保代理从真实情况中学习,而非产生幻觉。
这些支柱共同作用,使得代理具有可扩展性、真实性和可审计性。
______________________________________________________________________
🚀 演示亮点
这个项目的中心环节是 integration_test_mcp_json.py—112行 这些展示了MCP集成的全部潜力。
🧩(拼图、碎片、谜题等的象征) 见解: 这不仅仅是工具编排——它是 基于协议的上下文架构该代理进行推理 *和;与* 文档,而不仅仅是 *关于* 任务。
它的功能/作用
- 生成三个MCP服务器 (时间、顺序思维、上下文7)作为子过程
- 发现工具 通过所有服务器
MultiServerMCPClient - 创建一个LangChain代理 使用聚合工具包
- 执行复杂查询: *“提供从LangGraph的迁移指导
create_react_agent到LangChain的create_agent(v1.0.2)* - 基于理由作出回应 在Context7文档中——无虚构内容
实时示例
查看 LangSmith 追踪 以完全执行,或审查 详细输出。
一目了然
| 方面 | 详情 |
|---|---|
| 脚本 | integration_test_mcp_json.py (112行) |
| 服务器 | 时间,顺序思维,上下文7(自动生成) |
查询 “从LangGraph迁移 create_react_agent 到LangChain create_agent“ | |
| 结果 | 基于文档的迁移指南,附带源代码出处 |
| 追踪 | LangSmith |
关键要点: 这个代理不仅仅 *理由*它 从真理中学习Context7直接从LangChain的官方文档中展示代码片段、API参考和迁移指南。
实际行动中的移民
该脚本展示了从LangGraph迁移到LangChain v1的过程:
# Old (LangGraph)
from langgraph.prebuilt import create_react_agent
agent = create_react_agent(model, tools, prompt=...)
# New (LangChain v1.0.2+)
from langchain.agents import create_agent
agent = create_agent(llm, tools=tools, prompt=...)这不是一个玩具般的例子——它是 已准备好投入生产 使用(或“结合”)代理进行编排 真实的文件记录接地(或:实际的文件接地处理)。
______________________________________________________________________
⚙️ 快速入门
先决条件
# Install dependencies
uv venv --python 3.13
source .venv/bin/activate
uv pip install -e .
# Set environment variables
cp .env.example .env
# Add your OPENAI_API_KEY, LANGSMITH_API_KEY (optional), CALCOM_API_KEY (optional)选项1:运行集成测试(推荐)
观察一切运作情况的最简单方法:
python clients/integration_test_mcp_json.py这会自动启动所有必需的MCP服务器,发现工具,并展示基于Context7的推理。
选项2:手动服务器设置
对于勘探和开发,手动启动服务器:
第一航站楼 - 天气服务器(端口8000):
python servers/weather_server.py2号航站楼 - LangChain 数学工具服务器(端口 8001):
python servers/wrap_langchain_tools_server.py --port 80013号终端 - 客户端(Jupyter Notebook):
jupyter notebook clients/langchain_mcp_adapter_client.ipynb______________________________________________________________________
🔧 服务器配置
自定义HTTP服务器
weather_server.py
使用FastMCP(HTTP传输)的简单天气MCP服务器。
端口: 8000(默认)| 工具: get_weather (模拟数据)
# Default
python servers/weather_server.py
# Custom port
python servers/weather_server.py --port 8080wrap_langchain_tools_server.py
将LangChain工具转换为MCP格式。
端口: 8001(默认)| 工具: add, multiply | 模式: LangChain → MCP 适配器
# Default
python servers/wrap_langchain_tools_server.py
# Custom port
python servers/wrap_langchain_tools_server.py --port 8002外部MCP服务器
配置在 .mcp.json:
- mcp-server-time 翻译为中文是“MCP服务器时间” — 时区操作(uvx)
- 顺序思维 — 反思性推理(npx)
- 上下文7 — 文档检索(npx)
- ai-docs-server 翻译为中文是“AI文档服务器” — 轻量级文档获取(uvx)
______________________________________________________________________
📊 显示实用程序
这个(或“它”) display_utils.py 该模块提供灵活的响应格式化功能。
display_agent_response()
显示代理执行轨迹:
from display_utils import display_agent_response
# Full trace with token usage
display_agent_response(response, show_full_trace=True, show_token_usage=True)
# Minimal (final answer only)
display_agent_response(response, show_full_trace=False)get_final_answer()
通过程序提取答案:
from display_utils import get_final_answer
answer = get_final_answer(response)
if "migration" in answer.lower():
proceed_with_next_step()print_tools_summary()
列出已发现的工具:
from display_utils import print_tools_summary
tools = await client.get_tools()
print_tools_summary(tools)输出:
======================================================================
AVAILABLE TOOLS (5 total)
======================================================================
01. get_current_time
└─ Get current time in a specific timezone
02. sequential_thinking
└─ Dynamic problem-solving through reflective reasoning
03. resolve-library-id
└─ Resolve package name to Context7 library ID
04. get-library-docs
└─ Fetch documentation for a library
...
======================================================================______________________________________________________________________
💻 示例
示例1:使用工具链进行数学运算
response = await agent.ainvoke({"messages": "what is (15 + 27) * 3?"})
display_agent_response(response)输出:
01. HumanMessage: what is (15 + 27) * 3?
02. AIMessage → 🔧 tool_call(s): add
03. ToolMessage [add]: ✓ 42
04. AIMessage → 🔧 tool_call(s): multiply
05. ToolMessage [multiply]: ✓ 126
06. AIMessage: (15 + 27) * 3 = 126.示例2:基于文档的回应
response = await agent.ainvoke({
"messages": "How do I create an agent in LangChain 1.0.2? Use Context7 to ground your response."
})
display_agent_response(response, show_full_trace=False)输出:
💡 Final Answer: In LangChain 1.0.2, use `from langchain.agents import create_agent`
and pass your model instance and tools. Example:
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o")
agent = create_agent(llm, tools=tools)
This replaces the older LangGraph `create_react_agent` pattern.
[Source: https://docs.langchain.com/oss/python/langchain/agents]示例3:程序化答案提取
response = await agent.ainvoke({"messages": "multiply 7 and 9"})
answer = get_final_answer(response)
if "63" in answer:
print("Correct!")______________________________________________________________________
🔭 接下来是什么
这个项目是我们正在进行的探索中的一部分,旨在 基于协议的智能体架构下一个前沿领域不仅仅是推理——它还是 上下文交换 在代理之间。
1. 代理到代理(A2A)通信
- 调查新兴模式以(用于/针对) 多智能体协作
- 探索超越单一智能体推理的协议(共享内存、协调、持久状态)
- 构建协作架构,使代理保持共享上下文
2. 超越推理循环
- 从无状态推理/行动循环转变为 持久上下文架构
- 整合 记忆系统 对于长期任务
- 将上下文视为首要的架构基本元素进行探索
3. 基于协议的互操作性
- 继续探索MCP作为 通用接口 用于人工智能能力
- 调查与其他协议的集成(OpenAI的实时API、Anthropic的计算机使用)
- 在能动生态系统之间搭建桥梁
🔍(放大镜图标,常用于表示搜索、查看细节等动作) 深入探讨: 如需进行全面的架构分析,请参阅 架构概述 和 更新后的架构文档.
目标: 从“推理循环”转向 上下文架构—系统中,人工智能(AI) *知道* 和它(的方式/方法)一样重要 *认为*。
______________________________________________________________________
🐞 故障排除
端口已被占用
错误:
ERROR: [Errno 98] error while attempting to bind on address ('127.0.0.1', 8000): address already in use解决方案:
# Check process using port
lsof -i :8000
# Kill process
kill -9
# Or use different port
python servers/weather_server.py --port 8080连接关闭错误
错误:
mcp.shared.exceptions.McpError: Connection closed解决方案:
- 在启动客户端之前,请确保服务器正在运行
- 验证端口号是否正确
- 检查服务器日志以查找启动错误
运行时错误:已在运行 asyncio
错误:
RuntimeError: Already running asyncio in this thread解决方案:
- 别跑
mcp.run()在Jupyter笔记本中 - MCP服务器必须在单独的终端/进程中运行
- 在笔记本中使用客户端代码连接到正在运行的服务器
______________________________________________________________________
🏛️ 建筑细节
四层系统
┌─────────────────────────────────────────────────────────────┐
│ Client Layer (Blue) │
│ - Integration Test Client │
│ - LangChain Agent (ReAct pattern) │
│ - MultiServerMCPClient (tool aggregation) │
│ - Display Utils │
└─────────────────────┬───────────────────────────────────────┘
│
│ MCP Protocol (Auto-Discovery)
│
┌─────────────────────┴───────────────────────────────────────┐
│ Custom MCP Servers (Green) │
│ - Weather Server (Port 8000, HTTP) │
│ - LangChain Tools Server (Port 8001, HTTP) │
│ - Math Server (stdio) │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────┴───────────────────────────────────────┐
│ External MCP Services (Orange) │
│ - mcp-server-time (stdio, via uvx) │
│ - sequential-thinking (stdio, via npx) │
│ - Context7 (stdio, via npx) │
│ - ai-docs-server (stdio, via uvx) │
└─────────────────────┬───────────────────────────────────────┘
│
┌─────────────────────┴───────────────────────────────────────┐
│ External APIs (Red) │
│ - OpenAI API (GPT-4.1) │
│ - Documentation Sources (llms.txt, official docs) │
└─────────────────────────────────────────────────────────────┘支持的传输协议
- stdio(在中文中通常直接使用原英文缩写,也可理解为“标准输入输出”) — 基于子进程,对于本地工具来说速度最快
- HTTP(可流式传输的HTTP) — HTTP POST + 服务器发送事件
- 上海证券交易所 — 仅支持服务器发送事件(Server-Sent Events)
- WebSocket — 双向流(可选)
______________________________________________________________________
📁 文件
| 文件 | 用途 |
|---|---|
clients/integration_test_mcp_json.py | 主要演示 — 112乐线配器示例 |
clients/display_utils.py | 响应格式化工具 |
clients/langchain_mcp_adapter_client.ipynb | 交互式示例 |
servers/weather_server.py | 示例 HTTP MCP 服务器 |
servers/wrap_langchain_tools_server.py | LangChain → MCP 适配器 |
.mcp.json | 外部MCP服务器配置 |
______________________________________________________________________
📚 参考文献
MCP协议
LangChain 集成
Context7 文档服务器
- 上下文7 MCP服务器
- 支持40多个库,包括LangChain、LangGraph、LangSmith、OpenAI、Next.js、Redis、Hugging Face
可观测性
额外资源
______________________________________________________________________
项目: langchain-mcp-multiserver-demo 目的: 第8期人工智能工程教育演示 python 大于等于3.13 许可证: 麻省理工学院(MIT)
