跳到内容

类型

名称 描述
RetryPolicy

节点重试配置。

CachePolicy

节点缓存配置。

Interrupt

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

PregelTask

一个 Pregel 任务。

StateSnapshot

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

Send

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

Command

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

函数

名称 描述
interrupt

从节点内部使用可恢复的异常中断图。

属性

名称 类型 描述
All

特殊值,指示图应中断所有节点。

StreamMode

流方法应如何发出输出。

StreamWriter

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

All module-attribute

All = Literal['*']

特殊值,指示图应中断所有节点。

StreamMode module-attribute

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

流方法应如何发出输出。

  • "values":在每个步骤之后发出状态中的所有值,包括中断。与函数式 API 一起使用时,值将在工作流结束时一次性发出。
  • "updates":在每个步骤之后仅发出节点或任务名称以及节点或任务返回的更新。如果在同一步骤中进行多次更新(例如,运行多个节点),则这些更新将单独发出。
  • "custom":使用节点或任务内部的 StreamWriter 发出自定义数据。
  • "messages":与节点或任务中任何 LLM 调用的元数据一起,逐个令牌地发出 LLM 消息。
  • "debug":为每个步骤发出包含尽可能多信息的调试事件。

StreamWriter module-attribute

StreamWriter = Callable[[Any], None]

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

RetryPolicy

基类:NamedTuple

节点重试配置。

0.2.24 版新增。

属性

名称 类型 描述
initial_interval 浮点数

首次重试前必须经过的时间量。以秒为单位。

backoff_factor 浮点数

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

max_interval 浮点数

两次重试之间可能经过的最大时间量。以秒为单位。

max_attempts 整数

放弃前的最大尝试次数,包括首次尝试。

jitter 布尔值

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

retry_on Union[type[Exception], Sequence[type[Exception]], Callable[[Exception], bool]]

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

initial_interval class-attribute instance-attribute

initial_interval: float = 0.5

首次重试前必须经过的时间量。以秒为单位。

backoff_factor class-attribute instance-attribute

backoff_factor: float = 2.0

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

max_interval class-attribute instance-attribute

max_interval: float = 128.0

两次重试之间可能经过的最大时间量。以秒为单位。

max_attempts class-attribute instance-attribute

max_attempts: int = 3

放弃前的最大尝试次数,包括首次尝试。

jitter class-attribute instance-attribute

jitter: bool = True

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

retry_on class-attribute instance-attribute

retry_on: Union[
    type[Exception],
    Sequence[type[Exception]],
    Callable[[Exception], bool],
] = default_retry_on

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

CachePolicy dataclass

基类:Generic[KeyFuncT]

节点缓存配置。

属性

名称 类型 描述
key_func KeyFuncT

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

ttl Optional[int]

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

key_func class-attribute instance-attribute

key_func: KeyFuncT = default_cache_key

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

ttl class-attribute instance-attribute

ttl: Optional[int] = None

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

Interrupt dataclass

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

0.2.24 版新增。

属性

名称 类型 描述
interrupt_id 字符串

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

interrupt_id property

interrupt_id: str

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

PregelTask

基类:NamedTuple

一个 Pregel 任务。

StateSnapshot

基类:NamedTuple

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

属性

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

通道的当前值。

next tuple[str, ...]

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

config RunnableConfig

用于获取此快照的配置。

metadata Optional[CheckpointMetadata]

与此快照关联的元数据。

created_at Optional[str]

快照创建的时间戳。

parent_config Optional[RunnableConfig]

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

tasks tuple[PregelTask, ...]

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

interrupts tuple[Interrupt, ...]

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

values instance-attribute

values: Union[dict[str, Any], Any]

通道的当前值。

next instance-attribute

next: tuple[str, ...]

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

config instance-attribute

用于获取此快照的配置。

metadata instance-attribute

与此快照关联的元数据。

created_at instance-attribute

created_at: Optional[str]

快照创建的时间戳。

parent_config instance-attribute

parent_config: Optional[RunnableConfig]

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

tasks instance-attribute

tasks: tuple[PregelTask, ...]

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

interrupts instance-attribute

interrupts: tuple[Interrupt, ...]

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

Send

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

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

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

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

属性

名称 类型 描述
节点 字符串

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

参数 任意

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

示例

>>> 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 类的新实例。

参数

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

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

必需
参数 任意

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

必需

Command dataclass

基类:Generic[N], ToolOutputMixin

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

0.2.24 版新增。

参数

名称 类型 描述 默认
Optional[str]

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

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

要应用于图状态的更新。

恢复 Optional[Union[dict[str, Any], Any]]

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

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

可以是以下之一:

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

interrupt

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


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!!!'}}

参数

名称 类型 描述 默认
任意

当图被中断时,向客户端显示的值。

必需

返回

名称 类型 描述
任意 任意

在同一节点(准确地说是同一任务)内的后续调用中,返回首次调用时提供的值

引发

类型 描述
GraphInterrupt

在节点内的首次调用时,停止执行并将提供的值显示给客户端。