为了账号安全,请及时绑定邮箱和手机立即绑定

MCP实战高阶:集成LangChain简化MCP开发

在多智能体系统(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 组成的系统:

  1. Planner:接收用户需求,拆解任务(如“调研2024年大模型推理优化技术”)
  2. Researcher:使用搜索引擎和学术数据库收集资料
  3. 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),打造属于你的智能协作平台。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消