# Notes: LangGraph 多智能体研究 ## 核心概念 ### LangGraph 基础 - **StateGraph**: 有向无环图(DAG),节点是 Agent/函数,边是流转逻辑 - **State**: 贯穿整个图流动的状态对象 - **Node**: 执行单元(可以是 Agent、函数、条件判断) - **Edge**: 连接节点的边,支持条件边(conditional edges) ### Supervisor + Workers 模式参考 #### 1. LangChain 官方 Supervisor 示例 ```python from langgraph.prebuilt import create_react_agent from langgraph.graph import StateGraph, END # 定义 Workers research_agent = create_react_agent(llm, tools=[search]) coder_agent = create_react_agent(llm, tools=[write_file]) # 定义 Supervisor 节点 def supervisor_node(state): # LLM 决定下一步调用哪个 Agent response = llm.with_structured_output(SupervisorOutput).invoke( [SystemMessage(content=SUPERVISOR_PROMPT)] + state["messages"] ) return {"next": response.next_agent} # 构建图 graph = StateGraph(AgentState) graph.add_node("supervisor", supervisor_node) graph.add_node("research", research_agent) graph.add_node("code", coder_agent) ``` #### 2. 状态定义 ```python from typing import TypedDict, Annotated import operator class AgentState(TypedDict): messages: Annotated[list, operator.add] task: str plan: list results: dict iteration: int next: str # 控制下一步流向 ``` #### 3. 条件边实现 ```python def should_continue(state): if state["iteration"] >= MAX_ITERATIONS: return "end" if state.get("task_complete"): return "end" return "continue" graph.add_conditional_edges( "review", should_continue, { "continue": "supervisor", "end": END } ) ``` ## 设计决策 ### 架构优势 1. **清晰的分层**: Supervisor 负责任务规划,Workers 负责执行 2. **可扩展**: 容易添加新的 Worker 类型 3. **可控**: 迭代次数全局配置 4. **灵活**: 支持条件分支和循环 ### 需要解决的问题 1. **Supervisor 如何做规划**: 需要设计 prompt 让 LLM 生成任务列表 2. **任务队列**: 需要支持并行分发多个 Worker 3. **共享上下文**: 需要设计数据结构在 Agent 间共享状态 4. **Review 机制**: 需要定义检查标准和重试逻辑 ## 关键 Prompt 设计 ### Supervisor System Prompt ``` 你是一个任务规划专家(Supervisor)。用户的任务是:{task} 请按以下步骤执行: 1. 分析任务需求和约束 2. 将任务分解为可执行的子任务 3. 为每个子任务选择合适的执行 Agent: - research: 信息搜索和调研 - coder: 代码编写和修改 - review: 结果检查和评审 4. 确定执行顺序和依赖关系 当前任务进度:{progress} 共享上下文:{context} 请输出你的决策,格式如下: - 需要执行的子任务列表 - 每个任务的执行 Agent - 任务执行顺序 - 是否需要汇总结果 ```