在图中提到了节点、边、状态和路由四个概念。定义图时要做的第一件事是定义图的State。状态表示会随着图计算的进行而维护和更新的上下文或记忆。它用来确保图中的每个步骤都可以访问先前步骤的相关信息,从而可以根据整个过程中积累的数据进行动态决策。这个过程通过状态图StateGraph类实现,它继承自 Graph 类,这意味着 StateGraph 会使用或扩展基类的属性和方法。
from typing import Any, Callable, Dict, Optional, Set, Tuple, Type, Union
class StateGraph(Graph):
"""StateGraph 是一个管理状态并通过定义的输入和输出架构支持状态转换的图。"""
def __init__(self, state_schema: Optional[Type[Any]] = None, config_schema: Optional[Type[Any]] = None) -> None:
super().__init__()
self.state_schema = state_schema # 一个可选的类型参数,定义图状态的结构。这是用于定义和验证图中节点处理的状态数据的模式。
self.config_schema = config_schema # 一个可选的类型参数,用于定义配置的结构。这可以用于定义和验证图的配置参数。
input: Optional[Type[Any]] = None, # 消息输入
output: Optional[Type[Any]] = None, # 消息输出
def add_node(self, node: Union[str, Callable], action: Optional[Callable] = None, *, metadata: Optional[Dict[str, Any]] = None) -> 'StateGraph':
"""向图中添加一个新节点。节点可以是一个具名字符串或一个可调用对象(如函数), 如果node是字符串,则action应为与节点关联的可调用动作。"""
pass
def add_edge(self, start_key: str, end_key: str) -> 'StateGraph':
"""在图中添加一条边,连接两个节点。"""
pass
def compile(self) -> 'CompiledStateGraph':
"""编译图,将其转换成可运行的形式。包括验证图的完整性、预处理数据等。"""
pass
RE: LangGraph开发实战