Langgraph开发:先有Graph还是先有State

在使用 LangGraph 设计 Agent 时,直接跳进代码里定义 Node 或 Edge 很容易导致逻辑混乱。LangGraph 的核心本质是 "有状态的图(Stateful Graph)"

优先级排序:

  1. 业务工作流 (Workflow/Graph Topology) ------ 先画图,不写码
  2. 状态定义 (State Schema) ------ 数据的"血液"
  3. 节点功能 (Nodes) ------ 执行的"手脚"
  4. 边与路由 (Edges & Routing) ------ 决策的"大脑"

详细构思指南

1. 优先级最高:业务工作流 (Visualizing the Graph)

核心问题: 我的 Agent 是怎么思考和做事的?

在定义 State 或 Node 之前,你必须在纸上或白板上画出流程图。LangGraph 的强大在于处理循环 (Cycles)分支 (Branches)

  • 构思要点:

    • 起点与终点: 用户输入是什么?最终产出是什么?
    • 关键步骤: 需要检索吗 (RAG)?需要写代码吗?需要审核吗?
    • 循环逻辑: 如果检索结果不满意,Agent 应该重试吗?重试多少次?
    • 人机交互: 哪一步需要人类确认(Human-in-the-loop)?
  • 决策结果:

    • 是单一直线流程(DAG)?
    • 还是典型的 ReAct 循环(思考-行动-观察-循环)?
    • 还是多 Agent 协作(Supervisor 模式)?

2. 优先级第二:状态定义 (State Design)

核心问题: 节点之间如何传递信息?Agent 需要记住什么?

LangGraph 的 State 是所有节点共享的上下文(Context)。这是它与普通 Chain 的最大区别。必须在写 Node 代码前定义好 State,因为 Node 的输入输出都依赖它。

  • 构思要点:

    • 消息历史: 是否需要标准的 messages 列表(User/AI/Tool Message)?
    • 共享数据: 是否需要存储检索到的文档 (documents)、生成的草稿 (draft)、当前的步骤计数 (steps)?
    • Reducer 逻辑: 当一个 Node 返回数据时,是覆盖 旧数据,还是追加 数据?
      • 例如:消息通常是 add_messages (追加),而生成的最终摘要通常是直接覆盖。
  • 代码预想:

    python 复制代码
    class AgentState(TypedDict):
        messages: Annotated[list, add_messages] # 追加模式
        documents: list[str]                    # 覆盖模式
        retry_count: int                        # 用于控制循环次数

3. 优先级第三:节点设计 (Node Design)

核心问题: 每一步具体做什么?

有了 State 定义,你就可以设计 Node 了。每个 Node 本质上就是一个 Python 函数:Input: State -> Output: State Update

  • 构思要点:
    • 主要指责:
      • Agent Node:调用 LLM 做决策或生成回答。
      • Tool Node:执行具体工具(搜索、计算、API调用)。
      • Logic Node:不调用 LLM,仅做数据清洗或格式化。
    • 输入输出: 这个 Node 读取 State 中的哪些字段?它更新 State 中的哪些字段?
    • 工具绑定: 如果是 LLM Node,它需要绑定哪些 Tools?

4. 优先级第四:边与路由 (Edges & Routing)

核心问题: 做完这一步,下一步去哪里?

这是连接 Node 的桥梁。

  • 构思要点:
    • 普通边 (Normal Edge): 固定的流向(例如:检索完 -> 总结)。
    • 条件边 (Conditional Edge): 这是 Agent 智能的核心。
      • 逻辑: 基于 LLM 的输出决定。
      • 场景: 如果 LLM 返回了 tool_calls,转到 ToolNode;如果 LLM 返回了结束语,转到 END
      • 校验: 检查 retry_count,如果超过 3 次,强制结束(防止死循环)。

5. 附加构思(进阶)

在完成以上 4 步后,考虑以下 LangGraph 特有的增强功能:

  • Checkpointer (记忆持久化): 是否需要跨会话记忆?(用户关掉网页回来还能接着聊吗?)
  • Interrupt (人机协同): 在执行敏感操作(如发邮件、写代码)前,是否需要暂停图的运行,等待用户输入 resume

总结:你的设计清单

在你打开 IDE 之前,请先回答以下问题:

  1. 画出流程图:我有几个圈(循环)?
  2. 状态 定义数据结构:我的 State 里面有哪些字段?哪些是 Append,哪些是 Overwrite?
  3. 节点 确定工具:Agent 需要用到哪些 Tool?
  4. 路由 确定条件:什么情况下 Agent 会决定"重做"或"结束"?

按照这个顺序,你的 LangGraph 开发体验会非常丝滑。

相关推荐
三十岁老牛再出发7 小时前
9月18日总结
python·深度学习·机器学习
bmxy小明同学7 小时前
2026-09-18-embedding选型
人工智能
_橙时_7 小时前
【EM算法例子】
机器学习·em算法
superxxd7 小时前
基于rust的多平台原生GIS引擎
人工智能·物联网·实时音视频
就叫你天选之人啦7 小时前
安装torch+vllm+flash_attn的prompt
人工智能·pytorch·python
音视频牛哥7 小时前
从 LLM、VLA、LLA、SLIM 到实时音视频感知底座:具身智能真正需要的不只是大模型
人工智能·llm·机器人视觉·slam·vla·多模态感知·机器人音视频
code2cat7 小时前
【随笔】从聊天到调用工具:理解MCP在AI应用中的位置
java·人工智能
东离与糖宝7 小时前
元数据知识库
人工智能
我是小邵8 小时前
长对话先收口:用“工作记忆 vs 长期记忆“管理 AI 上下文
人工智能·ai·llm·长期记忆·中间迷失·上下文收口
广州宏帝箱包8 小时前
出口背包的包装有没有防潮、防摔的加固处理
大数据·人工智能