跳到内容

类型

名称 描述
重试策略

节点重试的配置。

缓存策略

节点缓存的配置。

中断

关于节点中发生的中断的信息。

Pregel任务

一个Pregel任务。

状态快照

步骤开始时图状态的快照。

发送

发送到图中特定节点的消息或数据包。

命令

一个或多个用于更新图状态并向节点发送消息的命令。

函数

名称 描述
中断

通过节点内部的可恢复异常中断图。

属性

名称 类型 描述
所有

特殊值,表示图应在所有节点上中断。

流模式

流方法应如何发出输出。

流写入器

可调用对象,接受单个参数并将其写入输出流。

所有 module-attribute

All = Literal['*']

特殊值,表示图应在所有节点上中断。

流模式 module-attribute

StreamMode = Literal[
    "values",
    "updates",
    "checkpoints",
    "tasks",
    "debug",
    "messages",
    "custom",
]

流方法应如何发出输出。

  • "values":在每个步骤后发出状态中的所有值,包括中断。与函数式 API 一起使用时,值在工作流结束时一次性发出。
  • "updates":仅在每个步骤后发出节点或任务名称以及由节点或任务返回的更新。如果同一步骤中进行了多次更新(例如运行了多个节点),则这些更新将单独发出。
  • "custom": 使用 `StreamWriter` 从节点或任务内部发出自定义数据。
  • "messages": 逐令牌发出LLM消息,以及节点或任务内部任何LLM调用相关的元数据。
  • "checkpoints":在创建检查点时发出事件,格式与 `get_state()` 返回的相同。
  • "tasks":在任务开始和结束时发出事件,包括其结果和错误。
  • "debug": 发出“检查点”和“任务”事件,用于调试目的。

流写入器 module-attribute

StreamWriter = Callable[[Any], None]

可调用对象,接受单个参数并将其写入输出流。如果请求作为关键字参数,则始终注入到节点中,但在不使用 stream_mode="custom" 时,它是一个空操作。

重试策略

基类:NamedTuple

节点重试的配置。

在版本 0.2.24 中添加。

属性

名称 类型 描述
初始间隔 浮点数

第一次重试发生前必须经过的时间量。单位:秒。

退避因子 浮点数

每次重试后间隔增加的乘数。

最大间隔 浮点数

重试之间可能经过的最大时间量。单位:秒。

最大尝试次数 整数

放弃前最大尝试次数,包括第一次。

抖动 布尔值

是否在重试间隔之间添加随机抖动。

重试条件 type[Exception] | Sequence[type[Exception]] | Callable[[Exception], bool]

应触发重试的异常类列表,或一个可调用对象,对于应触发重试的异常返回 True。

初始间隔 class-attribute instance-attribute

initial_interval: float = 0.5

第一次重试发生前必须经过的时间量。单位:秒。

退避因子 class-attribute instance-attribute

backoff_factor: float = 2.0

每次重试后间隔增加的乘数。

最大间隔 class-attribute instance-attribute

max_interval: float = 128.0

重试之间可能经过的最大时间量。单位:秒。

最大尝试次数 class-attribute instance-attribute

max_attempts: int = 3

放弃前最大尝试次数,包括第一次。

抖动 class-attribute instance-attribute

jitter: bool = True

是否在重试间隔之间添加随机抖动。

重试条件 class-attribute instance-attribute

retry_on: (
    type[Exception]
    | Sequence[type[Exception]]
    | Callable[[Exception], bool]
) = default_retry_on

应触发重试的异常类列表,或一个可调用对象,对于应触发重试的异常返回 True。

缓存策略 dataclass

基类:Generic[KeyFuncT]

节点缓存的配置。

属性

名称 类型 描述
键函数 KeyFuncT

从节点输入生成缓存键的函数。

生存时间 int | None

缓存条目的生存时间,单位为秒。如果为 None,则条目永不过期。

键函数 class-attribute instance-attribute

key_func: KeyFuncT = default_cache_key

从节点输入生成缓存键的函数。默认为使用 pickle 对输入进行哈希处理。

生存时间 class-attribute instance-attribute

ttl: int | None = None

缓存条目的生存时间,单位为秒。如果为 None,则条目永不过期。

中断 dataclass

关于节点中发生的中断的信息。

在版本 0.2.24 中添加。

属性

名称 类型 描述
中断ID 字符串

根据中断的命名空间生成唯一ID。

中断ID property

interrupt_id: str

根据中断的命名空间生成唯一ID。

Pregel任务

基类:NamedTuple

一个Pregel任务。

状态快照

基类:NamedTuple

步骤开始时图状态的快照。

属性

名称 类型 描述
dict[str, Any] | Any

通道的当前值。

下一个 tuple[str, ...]

此步骤中每个任务要执行的节点的名称。

配置 RunnableConfig

用于获取此快照的配置。

元数据 CheckpointMetadata | None

与此快照关联的元数据。

创建时间 str | None

快照创建的时间戳。

父级配置 RunnableConfig | None

用于获取父级快照(如果有)的配置。

任务 tuple[PregelTask, ...]

此步骤中要执行的任务。如果已尝试,可能包含错误。

中断 tuple[Interrupt, ...]

此步骤中发生且待解决的中断。

instance-attribute

values: dict[str, Any] | Any

通道的当前值。

下一个 instance-attribute

next: tuple[str, ...]

此步骤中每个任务要执行的节点的名称。

配置 instance-attribute

用于获取此快照的配置。

元数据 instance-attribute

metadata: CheckpointMetadata | None

与此快照关联的元数据。

创建时间 instance-attribute

created_at: str | None

快照创建的时间戳。

父级配置 instance-attribute

parent_config: RunnableConfig | None

用于获取父级快照(如果有)的配置。

任务 instance-attribute

tasks: tuple[PregelTask, ...]

此步骤中要执行的任务。如果已尝试,可能包含错误。

中断 instance-attribute

interrupts: tuple[Interrupt, ...]

此步骤中发生且待解决的中断。

发送

发送到图中特定节点的消息或数据包。

`Send` 类用于 `StateGraph` 的条件边中,以便在下一步动态地以自定义状态调用节点。

重要的是,发送的状态可以与核心图的状态不同,从而实现灵活和动态的工作流管理。

一个示例是“map-reduce”工作流,其中您的图并行多次调用同一个节点,每次调用都使用不同的状态,然后将结果聚合回主图的状态。

属性

名称 类型 描述
节点 字符串

要发送消息的目标节点的名称。

参数 Any

要发送到目标节点的状态或消息。

示例

>>> from typing import Annotated
>>> import operator
>>> class OverallState(TypedDict):
...     subjects: list[str]
...     jokes: Annotated[list[str], operator.add]
...
>>> from langgraph.types import Send
>>> from langgraph.graph import END, START
>>> def continue_to_jokes(state: OverallState):
...     return [Send("generate_joke", {"subject": s}) for s in state['subjects']]
...
>>> from langgraph.graph import StateGraph
>>> builder = StateGraph(OverallState)
>>> builder.add_node("generate_joke", lambda state: {"jokes": [f"Joke about {state['subject']}"]})
>>> builder.add_conditional_edges(START, continue_to_jokes)
>>> builder.add_edge("generate_joke", END)
>>> graph = builder.compile()
>>>
>>> # Invoking with two subjects results in a generated joke for each
>>> graph.invoke({"subjects": ["cats", "dogs"]})
{'subjects': ['cats', 'dogs'], 'jokes': ['Joke about cats', 'Joke about dogs']}

方法

名称 描述
__init__

初始化 Send 类的新实例。

__init__

__init__(node: str, arg: Any) -> None

初始化 Send 类的新实例。

参数

名称 类型 描述 默认值
节点 字符串

要发送消息的目标节点的名称。

必填
参数 Any

要发送到目标节点的状态或消息。

必填

命令 dataclass

基类:Generic[N], ToolOutputMixin

一个或多个用于更新图状态并向节点发送消息的命令。

在版本 0.2.24 中添加。

参数

名称 类型 描述 默认值
str | None

要发送命令的图。支持的值有

  • None: 当前图(默认)
  • Command.PARENT: 最近的父级图
更新 Any | None

应用于图状态的更新。

恢复 dict[str, Any] | Any | None

用于恢复执行的值。与 interrupt() 一起使用。可以是以下之一:

  • 中断ID到恢复值的映射
  • 用于恢复下一个中断的单个值
跳转到 Send | Sequence[Send | N] | N

可以是以下之一:

  • 要导航到的下一个节点的名称(属于指定 `graph` 的任何节点)
  • 要导航到的下一个节点名称序列
  • `Send` 对象(使用提供的输入执行节点)
  • `Send` 对象序列
()

中断

interrupt(value: Any) -> Any

通过节点内部的可恢复异常中断图。

`interrupt` 函数通过暂停图执行并将值传递给客户端,从而实现人机协作工作流。此值可以传达上下文或请求恢复执行所需的输入。

在给定节点中,此函数的第一次调用会引发 `GraphInterrupt` 异常,从而停止执行。提供的 `value` 将包含在异常中并发送给执行图的客户端。

恢复图的客户端必须使用 Command 原语指定中断的值并继续执行。图将从节点开头恢复,**重新执行**所有逻辑。

如果一个节点包含多个 `interrupt` 调用,LangGraph 会根据它们在节点中的顺序将恢复值与中断匹配。此恢复值列表仅限于执行该节点的特定任务,不跨任务共享。

要使用 `interrupt`,必须启用检查点,因为该功能依赖于持久化图状态。

示例
import uuid
from typing import Optional
from typing_extensions import TypedDict

from langgraph.checkpoint.memory import MemorySaver
from langgraph.constants import START
from langgraph.graph import StateGraph
from langgraph.types import interrupt, Command


class State(TypedDict):
    """The graph state."""

    foo: str
    human_value: Optional[str]
    """Human value will be updated using an interrupt."""


def node(state: State):
    answer = interrupt(
        # This value will be sent to the client
        # as part of the interrupt information.
        "what is your age?"
    )
    print(f"> Received an input from the interrupt: {answer}")
    return {"human_value": answer}


builder = StateGraph(State)
builder.add_node("node", node)
builder.add_edge(START, "node")

# A checkpointer must be enabled for interrupts to work!
checkpointer = MemorySaver()
graph = builder.compile(checkpointer=checkpointer)

config = {
    "configurable": {
        "thread_id": uuid.uuid4(),
    }
}

for chunk in graph.stream({"foo": "abc"}, config):
    print(chunk)
{'__interrupt__': (Interrupt(value='what is your age?', resumable=True, ns=['node:62e598fa-8653-9d6d-2046-a70203020e37'], when='during'),)}
command = Command(resume="some input from a human!!!")

for chunk in graph.stream(Command(resume="some input from a human!!!"), config):
    print(chunk)
Received an input from the interrupt: some input from a human!!!
{'node': {'human_value': 'some input from a human!!!'}}

参数

名称 类型 描述 默认值
Any

当图被中断时,要呈现给客户端的值。

必填

返回

名称 类型 描述
Any Any

在同一节点(精确地说,同一任务)内的后续调用中,返回第一次调用期间提供的值

抛出

类型 描述
图中断

在节点内的第一次调用中,停止执行并将提供的值呈现给客户端。