AI创想

标题: 【LangGraph】langgraph.graph.StateGraph 类的属性和方法 [打印本页]

作者: 创想小编    时间: 昨天 17:11
标题: 【LangGraph】langgraph.graph.StateGraph 类的属性和方法
作者:彬彬侠
1. StateGraph 类的概述

StateGraph 是 LangGraph 库的核心类,位于 langgraph.graph 模块中,用于定义和构建基于状态的工作流图。它以 有向图 的形式组织任务,其中:
StateGraph 的主要作用是:
StateGraph 通常用于构建智能 Agent、对话系统、自动化流程等需要多步骤交互的场景。

2. StateGraph 类的定义和初始化

2.1 类定义

StateGraph 类的完整定义如下:
  1. from langgraph.graph import StateGraph
  2. from typing import Type, Optional, Any, Dict, Union
  3. from langchain_core.runnables import RunnableConfig
  4. classStateGraph:def__init__(
  5.         self,
  6.         state_schema: Optional[Type[Any]]=None,
  7.         config_schema: Optional[Type[Any]]=None)->None:...
复制代码
2.2 状态和配置的作用

2.3 初始化示例

以下是一个简单的初始化示例:
  1. from typing import TypedDict
  2. from langgraph.graph import StateGraph
  3. # 定义状态classState(TypedDict):input:str
  4.     output:str# 定义配置(可选)classConfigSchema(TypedDict):
  5.     user_id:str# 创建 StateGraph
  6. workflow = StateGraph(state_schema=State, config_schema=ConfigSchema)
复制代码

3. StateGraph 的属性

StateGraph 类的属性主要用于存储图的结构和元数据。以下是其核心属性(部分属性是内部使用的,开发者通常通过方法间接访问):
注意:这些属性通常是内部管理的,开发者不直接修改它们,而是通过 StateGraph 的方法(如 add_node、add_edge)来操作图结构。

4. StateGraph 的方法

StateGraph 提供了丰富的 API 用于构建和配置工作流图。以下是其主要方法,分为 构建图设置入口/出口编译图 三类:
4.1 构建图的方法

add_node(name: str, action: Callable) -> None

add_edge(source: Union[str, START, END], target: Union[str, END]) -> None

add_conditional_edges(source: str, condition: Callable, edge_mapping: Dict[Any, Union[str, END]]) -> None

4.2 设置入口和出口的方法

set_entry_point(name: str) -> None

set_finish_point(name: str) -> None

4.3 编译图的方法

compile(checkpointer: Optional[BaseCheckpointSaver] = None, interrupt_after: Optional[List[str]] = None, interrupt_before: Optional[List[str]] = None) -> CompiledGraph


5. 完整示例

以下是一个完整的示例,展示如何使用 StateGraph 构建一个具有条件分支的工作流:
  1. from typing import TypedDict
  2. from langgraph.graph import StateGraph, START, END
  3. from langchain_core.runnables import RunnableConfig
  4. # 定义状态classState(TypedDict):input:str
  5.     output:str
  6.     needs_processing:bool# 定义配置(可选)classConfigSchema(TypedDict):
  7.     user_id:str# 节点函数defcheck_input(state: State, config: RunnableConfig)-> State:
  8.     state["needs_processing"]=len(state["input"])>5
  9.     user_id = config.get("configurable",{}).get("user_id","default_user")
  10.     state["output"]=f"检查输入 by {user_id}"return state
  11. defprocess_input(state: State, config: RunnableConfig)-> State:
  12.     state["output"]=f"处理输入: {state['input']}"return state
  13. defskip_processing(state: State, config: RunnableConfig)-> State:
  14.     state["output"]="输入太短,无需处理"return state
  15. # 条件函数defroute(state: State)->str:return"process_input"if state["needs_processing"]else"skip_processing"# 创建 StateGraph
  16. workflow = StateGraph(state_schema=State, config_schema=ConfigSchema)# 添加节点
  17. workflow.add_node("check_input", check_input)
  18. workflow.add_node("process_input", process_input)
  19. workflow.add_node("skip_processing", skip_processing)# 添加边
  20. workflow.add_edge(START,"check_input")
  21. workflow.add_conditional_edges("check_input",
  22.     route,{"process_input":"process_input","skip_processing":"skip_processing"})
  23. workflow.add_edge("process_input", END)
  24. workflow.add_edge("skip_processing", END)# 编译图
  25. graph = workflow.compile()# 运行工作流
  26. result = graph.invoke({"input":"Hi","output":"","needs_processing":False},
  27.     config={"configurable":{"user_id":"user123"}})print(result)
复制代码
输出(输入 “Hi”):
  1. {'input':'Hi','output':'输入太短,无需处理','needs_processing':False}
复制代码
输出(输入 “Hello, LangGraph!”):
  1. {'input':'Hello, LangGraph!','output':'处理输入: Hello, LangGraph!','needs_processing':True}
复制代码
这个示例展示了:

6. CompiledGraph 的关键方法

编译后的 CompiledGraph 对象(通过 workflow.compile() 获得)支持以下主要方法,用于执行工作流:

7. 高级功能和注意事项

7.1 检查点(Checkpointing)

7.2 中断(Interrupts)

7.3 异步支持

7.4 注意事项


8. 与其他类的关系


9. 总结

langgraph.graph.StateGraph 是 LangGraph 的核心类,用于定义基于状态的工作流图。其主要功能包括:
其属性(如 nodes、edges)管理图的内部结构,方法(如 add_node、compile)提供灵活的 API。结合状态管理和检查点功能,StateGraph 适合构建复杂的 LLM 驱动应用。
参考文献

原文地址:https://blog.csdn.net/u013172930/article/details/147963138




欢迎光临 AI创想 (https://www.llms-ai.com/) Powered by Discuz! X3.4