跳到内容

类型

名称 描述
RetryPolicy

节点重试配置。

CachePolicy

节点缓存配置。

Interrupt

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

PregelTask

一个 Pregel 任务。

StateSnapshot

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

Send

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

Command

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

函数

名称 描述
interrupt

在节点内使用可恢复异常中断图。

属性

名称 类型 描述
All

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

StreamMode

stream 方法应如何发出输出。

StreamWriter

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

All module-attribute

All = Literal['*']

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

StreamMode module-attribute

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

stream 方法应如何发出输出。

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

StreamWriter module-attribute

StreamWriter = Callable[[Any], None]

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

RetryPolicy

基类: NamedTuple

节点重试配置。

添加到版本 0.2.24.

属性

名称 类型 描述
initial_interval float

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

backoff_factor float

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

max_interval float

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

max_attempts int

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

jitter bool

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

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

基类: NamedTuple

节点缓存配置。

添加到版本 0.2.24.

Interrupt dataclass

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

添加到版本 0.2.24.

属性

名称 类型 描述
interrupt_id str

根据中断的命名空间生成唯一的 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”工作流,其中您的图并行多次调用同一个节点,但状态不同,然后在将结果聚合回主图的状态。

属性

名称 类型 描述
node str

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

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

参数

名称 类型 描述 默认值
node str

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

必需
arg Any

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

必需

Command dataclass

基类: Generic[N], ToolOutputMixin

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

添加到版本 0.2.24.

参数

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

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

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

要应用于图状态的更新。

None
resume Optional[Union[dict[str, Any], Any]]

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

  • 中断 ID 到恢复值的映射
  • 用于恢复下一个中断的单个值
None
goto Union[Send, Sequence[Union[Send, str]], str]

可以是以下之一:

  • 下一步要导航到的节点名称(属于指定 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!!!'}}

参数

名称 类型 描述 默认值
value Any

中断图时要向客户端公开的值。

必需

返回值

名称 类型 描述
Any Any

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

抛出

类型 描述
GraphInterrupt

在节点内的首次调用中,暂停执行并将提供的值公开给客户端。

评论