类型¶
类
名称 | 描述 |
---|---|
重试策略 |
节点重试的配置。 |
缓存策略 |
节点缓存的配置。 |
中断 |
关于节点中发生的中断的信息。 |
Pregel任务 |
一个Pregel任务。 |
状态快照 |
步骤开始时图状态的快照。 |
发送 |
发送到图中特定节点的消息或数据包。 |
命令 |
一个或多个用于更新图状态并向节点发送消息的命令。 |
函数
名称 | 描述 |
---|---|
中断 |
通过节点内部的可恢复异常中断图。 |
属性
名称 | 类型 | 描述 |
---|---|---|
所有 |
特殊值,表示图应在所有节点上中断。 |
|
流模式 |
流方法应如何发出输出。 |
|
流写入器 |
可调用对象,接受单个参数并将其写入输出流。 |
流模式 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
¶
可调用对象,接受单个参数并将其写入输出流。如果请求作为关键字参数,则始终注入到节点中,但在不使用 stream_mode="custom" 时,它是一个空操作。
重试策略 ¶
基类:NamedTuple
节点重试的配置。
在版本 0.2.24 中添加。
属性
名称 | 类型 | 描述 |
---|---|---|
初始间隔 |
浮点数
|
第一次重试发生前必须经过的时间量。单位:秒。 |
退避因子 |
浮点数
|
每次重试后间隔增加的乘数。 |
最大间隔 |
浮点数
|
重试之间可能经过的最大时间量。单位:秒。 |
最大尝试次数 |
整数
|
放弃前最大尝试次数,包括第一次。 |
抖动 |
布尔值
|
是否在重试间隔之间添加随机抖动。 |
重试条件 |
type[Exception] | Sequence[type[Exception]] | Callable[[Exception], bool]
|
应触发重试的异常类列表,或一个可调用对象,对于应触发重试的异常返回 True。 |
缓存策略 dataclass
¶
中断 dataclass
¶
Pregel任务 ¶
状态快照 ¶
基类:NamedTuple
步骤开始时图状态的快照。
属性
名称 | 类型 | 描述 |
---|---|---|
值 |
dict[str, Any] | Any
|
通道的当前值。 |
下一个 |
tuple[str, ...]
|
此步骤中每个任务要执行的节点的名称。 |
配置 |
RunnableConfig
|
用于获取此快照的配置。 |
元数据 |
CheckpointMetadata | None
|
与此快照关联的元数据。 |
创建时间 |
str | None
|
快照创建的时间戳。 |
父级配置 |
RunnableConfig | None
|
用于获取父级快照(如果有)的配置。 |
任务 |
tuple[PregelTask, ...]
|
此步骤中要执行的任务。如果已尝试,可能包含错误。 |
中断 |
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 类的新实例。 |
命令 dataclass
¶
基类:Generic[N]
, ToolOutputMixin
一个或多个用于更新图状态并向节点发送消息的命令。
在版本 0.2.24 中添加。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
图
|
str | None
|
要发送命令的图。支持的值有
|
无
|
更新
|
Any | None
|
应用于图状态的更新。 |
无
|
恢复
|
dict[str, Any] | Any | None
|
用于恢复执行的值。与
|
无
|
跳转到
|
Send | Sequence[Send | N] | N
|
可以是以下之一:
|
()
|
中断 ¶
通过节点内部的可恢复异常中断图。
`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'),)}
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
值
|
Any
|
当图被中断时,要呈现给客户端的值。 |
必填 |
返回
名称 | 类型 | 描述 |
---|---|---|
Any |
Any
|
在同一节点(精确地说,同一任务)内的后续调用中,返回第一次调用期间提供的值 |
抛出
类型 | 描述 |
---|---|
图中断
|
在节点内的第一次调用中,停止执行并将提供的值呈现给客户端。 |