以下是LangGraph支持的核心设计模式及对应代码示例,结合官方文档和最佳实践整理:
🔧 一、顺序执行模式(Sequential Workflow)
适用场景:线性任务流(如数据预处理→生成→输出)
from langgraph.graph import StateGraph
from typing import TypedDict
# 🚀 定义状态结构
class ArticleState(TypedDict):
content: str
# 📌 节点函数
def preprocess(state: ArticleState) -> ArticleState:
state["content"] = "预处理后的文本"
return state
def generate(state: ArticleState) -> ArticleState:
state["content"] += "\n生成的新内容"
return state
# 🛠️ 构建图
workflow = StateGraph(ArticleState)
workflow.add_node("preprocess", preprocess)
workflow.add_node("generate", generate)
workflow.add_edge("preprocess", "generate") # 顺序连接
workflow.set_entry_point("preprocess")
workflow.set_finish_point("generate")
# ▶️ 执行
app = workflow.compile()
result = app.invoke({"content": ""})
print(result["content"])
输出:
预处理后的文本
生成的新内容
💡 关键点:
add_edge
定义节点顺序,set_entry_point
和set_finish_point
标记起止。
🔄 二、监督模式(Supervisor-Agent)
适用场景:多智能体协作(如任务分派)
from langgraph.types import Command
class State(TypedDict):
task: str
result: str
def supervisor(state: State) -> Command:
if "数据分析" in state["task"]:
return Command(goto="data_agent") # 路由到数据分析Agent
return Command(goto="default_agent")
def data_agent(state: State) -> State:
state["result"] = "分析完成"
return state
workflow = StateGraph(State)
workflow.add_node("supervisor", supervisor)
workflow.add_node("data_agent", data_agent)
workflow.add_conditional_edges("supervisor", supervisor) # 动态路由
workflow.add_edge("data_agent", END) # 结束
⚠️ 注意:
add_conditional_edges
实现动态路由,Command(goto=节点名)
控制跳转。
🧩 三、Map-Reduce模式
适用场景:并行处理列表数据(如批量生成标题)
def topic_splitter(state: State) -> list:
return [Send("generate_title", {"topic": t}) for t in state["topics"]]
def generate_title(state: State) -> State:
state["title"] = f"{state['topic']}的标题"
return state
workflow = StateGraph(State)
workflow.add_node("splitter", topic_splitter)
workflow.add_node("generate_title", generate_title)
workflow.add_conditional_edges("splitter", topic_splitter) # 分发任务
workflow.add_edge("generate_title", END)
🌟 核心:
Send
对象将列表拆分为独立状态,并行执行。
👥 四、人机协同模式(Human-in-the-loop)
适用场景:高风险操作需人工审核
from langgraph.types import interrupt
def review(state: State):
if state["risk_level"] > 0.8:
interrupt({"alert": "需要人工审核!"}) # 暂停流程
return state
# 恢复执行(人工输入后)
graph.invoke(Command(resume="审核通过"))
🔒 安全机制:
interrupt()
暂停流程,Command(resume=)
恢复。
💭 五、反思优化模式(Reflection)
适用场景:迭代优化输出质量
def generator(state: State) -> State:
state["draft"] = "初稿内容"
return state
def critic(state: State) -> State:
if "错误" in state["draft"]:
state["feedback"] = "需修正XX"
return Command(goto="generator") # 重新生成
return Command(goto=END)
workflow.add_node("generator", generator)
workflow.add_node("critic", critic)
workflow.add_edge("generator", "critic")
workflow.add_conditional_edges("critic", critic) # 循环优化
🔁 特点:通过条件边实现循环,直至满足质量要求。
📊 模式对比总结
模式 | 核心机制 | 适用场景 | 复杂度 |
---|---|---|---|
顺序执行 | 固定节点链路 | 线性流程任务 | ⭐ |
监督模式 | 动态路由(Command) | 多智能体分工 | ⭐⭐⭐ |
Map-Reduce | Send对象分发 | 批量并行处理 | ⭐⭐ |
人机协同 | 中断(interrupt) | 高风险操作审核 | ⭐⭐ |
反思优化 | 条件循环边 | 迭代优化输出 | ⭐⭐⭐ |
完整代码参考:LangGraph官方示例库
提示:结合with_structured_output()
可强化结构化输出能力(见的JSON模式)。