跳到内容

类型

名称 描述
RetryPolicy

用于重试节点的配置。

CachePolicy

用于缓存节点的配置。

中断

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

PregelTask

一个 Pregel 任务。

状态快照

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

Send

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

Command

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

函数

名称 描述
中断

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

属性

名称 类型 描述
所有

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

StreamMode

stream 方法应如何发出输出。

StreamWriter

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

All module-attribute

All = Literal['*']

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

StreamMode module-attribute

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

stream 方法应如何发出输出。

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

StreamWriter module-attribute

StreamWriter = Callable[[Any], None]

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

RetryPolicy

基类:NamedTuple

用于重试节点的配置。

在 0.2.24 版本中添加。

属性

名称 类型 描述
initial_interval float

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

backoff_factor float

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

max_interval float

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

max_attempts 整数

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

jitter bool

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

retry_on 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: (
    type[Exception]
    | Sequence[type[Exception]]
    | Callable[[Exception], bool]
) = default_retry_on

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

CachePolicy dataclass

基类:Generic[KeyFuncT]

用于缓存节点的配置。

属性

名称 类型 描述
key_func KeyFuncT

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

生存时间 int | None

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

key_func class-attribute instance-attribute

key_func: KeyFuncT = default_cache_key

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

ttl class-attribute instance-attribute

ttl: int | None = None

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

Interrupt dataclass

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

在 0.2.24 版本中添加。

在 v0.4.0 版本中更改

  • 引入了 interrupt_id 作为属性

在 v0.6.0 版本中更改

以下属性已被移除

  • ns
  • when
  • resumable
  • interrupt_id,已弃用,推荐使用 id

属性

名称 类型 描述
id str

中断的 ID。可用于直接恢复中断。

Any

与中断关联的值。

id instance-attribute

id: str

中断的 ID。可用于直接恢复中断。

value instance-attribute

value: Any = value

与中断关联的值。

PregelTask

基类:NamedTuple

一个 Pregel 任务。

StateSnapshot

基类:NamedTuple

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

属性

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

通道的当前值。

下一个 tuple[str, ...]

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

config RunnableConfig

用于获取此快照的配置。

metadata CheckpointMetadata | None

与此快照关联的元数据。

创建时间 str | None

快照创建的时间戳。

parent_config RunnableConfig | None

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

tasks tuple[PregelTask, ...]

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

interrupts tuple[Interrupt, ...]

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

values instance-attribute

values: dict[str, Any] | Any

通道的当前值。

next instance-attribute

next: tuple[str, ...]

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

config instance-attribute

用于获取此快照的配置。

metadata instance-attribute

metadata: CheckpointMetadata | None

与此快照关联的元数据。

created_at instance-attribute

created_at: str | None

快照创建的时间戳。

parent_config instance-attribute

parent_config: RunnableConfig | None

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

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 str | None

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

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

要应用于图状态的更新。

None
resume dict[str, Any] | Any | None

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

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

可以是以下之一

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

interrupt

interrupt(value: Any) -> Any

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

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

在给定的节点中,此函数的第一次调用会引发一个 GraphInterrupt 异常,从而暂停执行。提供的 value 会随异常一起发送给执行图的客户端。

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

如果一个节点包含多个 interrupt 调用,LangGraph 会根据它们在节点中的顺序将恢复值与中断匹配。这个恢复值列表的作用域是执行该节点的特定任务,并且不在任务之间共享。

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

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

from langgraph.checkpoint.memory import InMemorySaver
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 = InMemorySaver()
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?', id='45fda8478b2ef754419799e10992af06'),)}

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

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

抛出

类型 描述
图中断

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