2026/2/18 10:04:54
网站建设
项目流程
贵阳住房和城乡建设局网站,网站自适应源码,word 关于做网站,linux 网站搬家1. 核心概念
LangGraph 的设计理念是 “Nodes 做工作#xff0c;Edges 决定流程”。
1.1 Graph图是整个工作流的抽象。执行图意味着节点间消息的传递和状态更新。图采用 message passing 的方式#xff0c;每个节点处理完状态后#xff0c;将更新沿边发送到下一个节点。图的…1. 核心概念LangGraph 的设计理念是 “Nodes 做工作Edges 决定流程”。1.1 Graph图是整个工作流的抽象。执行图意味着节点间消息的传递和状态更新。图采用 message passing 的方式每个节点处理完状态后将更新沿边发送到下一个节点。图的执行分为 super-step超步同一超步中的节点可并行执行。不同超步顺序执行。节点在收到消息前是inactive收到消息后变为active。图执行结束条件所有节点inactive且无消息在传输。1.2 State状态状态是图的共享数据结构记录当前工作流的快照。由 schema 和 reducer 组成schema定义状态字段可以使用TypedDict、dataclass或Pydantic BaseModel。reducer定义状态更新逻辑。默认覆盖可自定义函数如operator.add叠加列表。1.2.1 多 schema 支持图的内部状态可以有多个 schemaOverallState完整状态InputState/OutputState输入输出子集PrivateState内部节点通信状态节点可以读写整个OverallState也可以写入子状态PrivateState。1.2.2 Reducers 示例fromtypingimportAnnotatedfromtyping_extensionsimportTypedDictfromoperatorimportaddclassState(TypedDict):foo:intbar:Annotated[list[str],add]# 使用 reducer 叠加默认 reducer 是 覆盖overwrite可用Overwrite强制覆盖不使用 reducer。add_messages是处理消息列表状态的专用 reducer处理更新和追加。1.3 Nodes节点节点是执行逻辑的函数接收state、config、runtime三个参数。可以是同步或异步函数。节点内部可调用 LLM 或普通函数逻辑。节点函数可以返回更新状态字典{key: value}Command对象同时更新状态和控制流内置节点START图的入口节点END图的终止节点节点示例fromlanggraph.graphimportStateGraph,START,ENDdefnode_a(state):return{foo:bar}graphStateGraph(dict)graph.add_node(node_a,node_a)graph.add_edge(START,node_a)graph.add_edge(node_a,END)节点高级特性缓存Caching基于输入缓存节点结果。runtime context传递非状态信息如数据库连接或模型配置。递归控制通过config[metadata][langgraph_step]获取当前超步计数可主动或被动处理递归限制。1.4 Edges边边控制图的流向和条件。边类型Normal Edge固定连接节点Conditional Edge根据routing_function(state)动态选择下一节点Entry Point用户输入进入的第一个节点Conditional Entry Point动态选择入口节点Conditional Edge 示例defroute(state):returnnode_bifstate[foo]barelsenode_cgraph.add_conditional_edges(node_a,route)Command 对象将状态更新与控制流合并。fromlanggraph.typesimportCommanddefmy_node(state):returnCommand(update{foo:bar},gotonode_b)可用于子图跳转人工干预Human-in-the-loop动态状态更新与路由1.5 Send用于动态生成节点和状态支持 Map-Reduce 模式。fromlanggraph.typesimportSenddefcontinue_to_jokes(state):return[Send(generate_joke,{subject:s})forsinstate[subjects]]2. 消息Messages常用于聊天应用将消息列表存入状态。推荐使用add_messagesreducer 处理消息列表。MessagesState提供了预定义状态结构{messages: list[AnyMessage]}。消息更新示例fromlanggraph.graphimportMessagesStatefromlanggraph.graph.messageimportadd_messagesclassState(MessagesState):documents:list[str]3. 运行时RuntimeRuntime对象在节点中传递上下文信息。可传递用户信息模型选择数据库连接等示例dataclassclassContext:user_id:strdefnode_with_runtime(state,runtime:Runtime[Context]):print(runtime.context.user_id)4. 图的构建与执行4.1 StateGraph核心类负责图的管理。支持添加节点add_node添加边add_edge,add_conditional_edges设置入口set_entry_point设置终止节点set_finish_point编译.compile()执行.invoke(inputs)4.2 Graph Compilation必须在执行前调用.compile()编译会检查节点完整性无孤立节点设置缓存、断点准备状态通道和 reducer4.3 Recursion / 超步限制默认递归限制为 25 步可通过invoke(config{recursion_limit: N})修改可以通过config[metadata][langgraph_step]访问当前步数支持 主动处理 递归限制。5. 图迁移Graph Migrations支持修改节点、边和状态字段对于中断的线程允许添加新节点和边不允许删除或重命名节点可能引发错误状态兼容新增或删除键向前向后兼容修改类型不兼容可能导致旧线程出错6. 可视化Visualization支持图可视化便于理解复杂工作流官方文档提供内置方法和指南7. 总结LangGraph Graph API 提供了模块功能State管理图的共享数据支持多 schema 和 reducerNode执行逻辑支持状态更新、Command、缓存、runtime contextEdge控制流可固定、条件、动态或入口Messages用于存储聊天记录和其他序列化消息Send / Command支持 Map-Reduce 或动态控制流Runtime提供节点执行上下文不属于状态Recursion / Metadata超步控制与调试信息Graph Compilation检查图结构准备执行支持缓存Migration / Visualization动态修改图结构与状态图形化展示