在多智能体系统(Multi-Agent Collaboration Platform, 简称为 MCP)的构建过程中,开发者常常面临任务调度、上下文管理、工具调用等复杂逻辑。而 LangChain 作为一个强大的 LLM 应用开发框架,其模块化设计与丰富的工具生态,恰好可以大幅简化 MCP 的开发流程。
本文将深入探讨如何 将 LangChain 集成到 MCP 架构中,并通过一个完整的代码案例,手把手教你搭建一个具备多角色协作能力的 MCP 系统。
一、什么是 MCP?
MCP(Multi-agent Collaboration Platform)是一种基于多个智能体协同工作的系统架构。每个智能体通常具有以下特征:
- 特定角色(如研究员、程序员、审核员)
- 专属工具集(如搜索、代码执行、数据库访问)
- 通信机制(通过消息队列、共享记忆或中心协调器交互)

传统 MCP 开发需要手动处理: - Agent 之间的消息传递
- 工具绑定与权限控制
- 上下文状态管理
- 错误重试与回退策略

这些重复性工作不仅繁琐,还容易出错。
二、为什么选择 LangChain?
LangChain 提供了以下核心能力,完美适配 MCP 场景:
| 能力 | 对应 MCP 需求 |
|---|---|
| AgentExecutor | 自动处理 LLM 决策 + 工具调用循环 |
| Tool 抽象 | 统一工具接口,便于权限与日志管理 |
| ConversationBufferMemory / ChatMessageHistory | 天然支持多轮对话上下文 |
| Runnable 接口 | 支持链式组合,便于构建 Agent 流水线 |
| LangGraph(高级) | 显式定义 Agent 间的状态转移与协作图 |
尤其从 LangChain 0.2+ 版本开始,其对 多 Agent 协作的支持越来越成熟,配合 langgraph 可以构建复杂的协作拓扑。
三、实战案例:构建一个“论文调研助手”MCP
我们将实现一个由三个 Agent 组成的系统:
- Planner:接收用户需求,拆解任务(如“调研2024年大模型推理优化技术”)
- Researcher:使用搜索引擎和学术数据库收集资料
- Writer:整合信息,生成结构化报告
第一步:安装依赖
pip install langchain langchain-openai langchain-community duckduckgo-search langgraph
注:本文使用 OpenAI 模型,你也可以替换为其他 LLM(如 Ollama、Claude 等)。
第二步:定义工具(Tools)
from langchain_community.tools import DuckDuckGoSearchRun
from langchain_core.tools import tool
@tool
def academic_search(query: str) -> str:
"""搜索学术论文摘要(模拟)"""
return f"模拟返回:关于 '{query}' 的最新论文有《Efficient Inference in LLMs》等5篇。"
search_tool = DuckDuckGoSearchRun()
tools = [search_tool, academic_search]
第三步:创建三个 Agent
我们使用 create_react_agent 快速构建基于 ReAct 的智能体。
from langchain_openai import ChatOpenAI
from langchain import hub
from langchain.agents import create_react_agent, AgentExecutor
llm = ChatOpenAI(model="gpt-4o", temperature=0)
# 获取社区 prompt 模板
react_prompt = hub.pull("hwchase17/react")
def create_agent(name: str, role: str, tools) -> AgentExecutor:
system_prompt = f"你是一个 {role},名为 {name}。请严格按步骤思考并使用工具完成任务。"
prompt = react_prompt.partial(instructions=system_prompt)
agent = create_react_agent(llm, tools, prompt)
return AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
planner = create_agent("Planner", "任务规划专家", [])
researcher = create_agent("Researcher", "信息研究员", tools)
writer = create_agent("Writer", "技术文档撰写者", [])
注意:Planner 不需要工具,仅做任务分解;Researcher 和 Writer 可调用工具。
第四步:用 LangGraph 编排协作流程
这是关键一步!我们使用 langgraph 定义状态机。
import operator
from typing import Annotated, Sequence, TypedDict
from langgraph.graph import StateGraph, START, END
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage
class MCPState(TypedDict):
messages: Annotated[Sequence[BaseMessage], operator.add]
current_agent: str # 当前执行的 agent 名称
# 定义节点函数
def run_planner(state: MCPState):
last_msg = state["messages"][-1].content
response = planner.invoke({"input": last_msg})
return {
"messages": [AIMessage(content=response["output"], name="Planner")],
"current_agent": "Planner"
}
def run_researcher(state: MCPState):
plan = state["messages"][-1].content
response = researcher.invoke({"input": f"根据以下计划进行调研:{plan}"})
return {
"messages": [AIMessage(content=response["output"], name="Researcher")],
"current_agent": "Researcher"
}
def run_writer(state: MCPState):
research = state["messages"][-1].content
response = writer.invoke({"input": f"根据以下调研结果撰写报告:{research}"})
return {
"messages": [AIMessage(content=response["output"], name="Writer")],
"current_agent": "Writer"
}
# 构建图
workflow = StateGraph(MCPState)
workflow.add_node("planner", run_planner)
workflow.add_node("researcher", run_researcher)
workflow.add_node("writer", run_writer)
workflow.add_edge(START, "planner")
workflow.add_edge("planner", "researcher")
workflow.add_edge("researcher", "writer")
workflow.add_edge("writer", END)
app = workflow.compile()
第五步:运行整个 MCP 系统
if __name__ == "__main__":
user_query = "请调研2024年大模型推理优化的最新技术,并生成一份简要报告。"
inputs = {"messages": [HumanMessage(content=user_query)]}
for chunk in app.stream(inputs):
print(chunk)
print("-" * 50)
运行后,你会看到三个 Agent 依次执行,最终输出一份结构化报告。
四、进阶技巧
1. 添加循环与反馈机制
真实场景中,Writer 可能要求 Researcher 补充数据。可通过条件边实现:
def should_revise(state: MCPState) -> str:
if "需要更多信息" in state["messages"][-1].content:
return "researcher"
return END
workflow.add_conditional_edges("writer", should_revise, {"researcher": "researcher", END: END})
2. 共享记忆池
所有 Agent 可共用一个 ChatMessageHistory 实例,避免信息割裂。
3. 权限与安全
通过自定义 Tool 的 metadata 字段控制哪些 Agent 可调用该工具。
五、总结
通过 LangChain + LangGraph,我们仅用 不到 100 行核心代码 就构建了一个具备任务分解、信息检索、内容生成能力的多智能体协作系统(MCP)。相比从零实现,LangChain 帮我们:
- 自动处理 LLM 与工具的交互循环
- 提供标准化的 Agent 接口
- 通过 Graph 显式定义协作逻辑,提升可维护性
建议:对于复杂 MCP 系统,优先考虑 LangGraph;对于简单流水线,可用 SequentialChain 或 RunnableSequence。
动手试试吧! 你可以在此基础上扩展更多 Agent(如 CodeInterpreter、Reviewer),打造属于你的智能协作平台。


随时随地看视频