节点名称到其 PregelNode 实现的映射
通道名称到其 BaseChannel 或 ManagedValueSpec 实现的映射
可以传递给图的可配置字段的类型
图接受的输入值的类型
图产生的输出值的类型
是否在编译时自动验证图结构。默认为 true。
图中的通道,将通道名称映射到其 BaseChannel 或 ManagedValueSpec 实例
Optional
checkpointer用于持久化图状态的可选检查点程序。如果提供,则在每个超步保存图状态的检查点。当为 false 或未定义时,检查点功能将被禁用,并且图将无法保存或恢复状态。
Optional
config图执行的默认配置,可以在每次调用时被覆盖
是否启用调试日志记录。默认为 false。
图的输入通道。这些通道在图被调用时接收初始输入。可以是单个通道键或通道键数组。
Optional
interrupt可选的节点名称数组或 “all”,用于在执行这些节点后中断。用于实现人工参与 (human-in-the-loop) 工作流。
Optional
interrupt可选的节点名称数组或 “all”,用于在执行这些节点之前中断。用于实现人工参与 (human-in-the-loop) 工作流。
Protected
lc_Optional
name图中的节点,将节点名称映射到其 PregelNode 实例
图的输出通道。这些通道包含图完成时的最终输出。可以是单个通道键或通道键数组。
Optional
retry用于处理节点执行失败的可选重试策略
Optional
step每个超步执行的可选超时时间,单位为毫秒
Optional
store图的可选长期内存存储,允许跨线程持久化和检索数据
可选
stream可选的流通道。如果未指定,将流式传输所有通道。可以是单个通道键或通道键数组。
为此图启用的流式传输模式。默认为 ["values"]。支持的模式包括:
构造函数参数别名映射。键是属性名称,例如 "foo"。值是将替换序列化中键的别名。这用于例如使参数名称与 Python 匹配。
要与构造函数参数合并的其他属性的映射。键是属性名称,例如 "foo"。值是将被序列化的属性值。这些属性需要被构造函数接受为参数。
模块的最终序列化标识符。
密钥映射,将从序列化中省略。键是构造函数参数中密钥的路径,例如 "foo.bar.baz"。值是密钥 ID,将在反序列化时使用。
应序列化的键的手动列表。如果未重写,则将序列化传递给构造函数的所有字段。
处理可运行对象的批处理和配置的内部方法。它接受一个函数、输入值和可选配置,并返回一个 Promise,该 Promise 解析为输出值。
要为每个输入值执行的函数。
可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>[]可选
runManagers: (undefined | CallbackManagerForChainRun)[]可选
batchOptions: RunnableBatchOptions可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>> & { 可选
batchOptions: RunnableBatchOptions解析为输出值的 Promise。
受保护的
_call可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>> & { 受保护的
_get受保护的
_separate可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>受保护的
_streamProtected
_transform辅助方法,用于将输入值的迭代器转换为输出值的迭代器,并带有回调。在 Runnable 子类中使用此方法来实现 stream()
或 transform()
。
Optional
runManager: CallbackManagerForChainRun可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>> & { 将 runnable 转换为工具。返回 RunnableToolLike
的新实例,其中包含 runnable、名称、描述和模式。
RunnableToolLike
的一个实例,它是一个可以用作工具的 runnable。
batch
的默认实现,它调用 invoke
N 次。如果子类可以更高效地进行批量处理,则应重写此方法。
每次批量调用的输入数组。
Optional
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>> | Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>[]可以是应用于每次批量调用的单个调用选项对象,也可以是每次调用的数组。
Optional
batchOptions: RunnableBatchOptions & { RunOutput 的数组,或者如果设置了 batchOptions.returnExceptions,则为 RunOutput 和错误的混合数组
Optional
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>> | Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>[]Optional
batchOptions: RunnableBatchOptions & { Optional
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>> | Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>[]可选
batchOptions: RunnableBatchOptions将参数绑定到 Runnable,返回一个新的 Runnable。
一个新的 RunnableBinding,当调用时,将应用绑定的参数。
获取图的当前状态。需要配置检查点。
用于检索状态的配置
Optional
options: GetStateOptions附加选项
当前图状态的快照
如果未配置检查点
获取图状态的历史记录。需要配置检查点。用于
用于检索历史记录的配置
Optional
options: CheckpointListOptions用于筛选历史记录的选项
状态快照的异步迭代器
如果未配置检查点
获取此图中的所有子图。子图是嵌套在此图节点内的 Pregel 实例。
Optional
namespace: string用于筛选子图的可选命名空间
Optional
recurse: boolean是否递归获取子图的子图
生成器,产生 [名称, 子图] 的元组
请使用 getSubgraphsAsync 代替。异步方法将在下一个小版本中成为默认方法。
异步获取此图中的所有子图。子图是嵌套在此图节点内的 Pregel 实例。
Optional
namespace: string用于筛选子图的可选命名空间
Optional
recurse: boolean是否递归获取子图的子图
AsyncGenerator,产生 [名称, 子图] 的元组
使用单个输入和配置运行图。
图的输入。
可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>运行要使用的配置。
返回一个新的 Runnable,它通过对每个输入调用 invoke(),将输入列表映射到输出列表。
创建一个新的 runnable 序列,该序列串行运行每个单独的 runnable,并将一个 runnable 的输出管道传输到另一个 runnable 或类似 runnable 的对象。
runnable、函数或对象,其值是函数或 runnables。
一个新的 runnable 序列。
流式传输图的执行过程,在状态更新发生时发出更新。这是实时观察图执行过程的主要方法。
流模式
有关更多详细信息,请参阅 流式传输操作指南。
用于启动图执行的输入
可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>流式传输的配置选项
图状态更新的异步可迭代流
生成由 runnable 内部步骤发出的事件流。
用于创建 StreamEvents 的迭代器,这些 StreamEvents 提供关于 runnable 进度的实时信息,包括来自中间结果的 StreamEvents。
StreamEvent 是一个具有以下模式的字典
event
: string - 事件名称的格式为:on_[runnable_type]_(start|stream|end)。name
: string - 生成事件的 runnable 的名称。run_id
: string - 随机生成的 ID,与发出事件的 runnable 的给定执行相关联。作为父 runnable 执行的一部分而调用的子 runnable 将被分配其自己的唯一 ID。tags
: string[] - 生成事件的 runnable 的标签。metadata
: Record<string, any> - 生成事件的 runnable 的元数据。data
: Record<string, any>下表说明了各种链可能发出的一些事件。为了简洁起见,表中省略了元数据字段。链定义已包含在表后。
注意 此参考表适用于 V2 版本的模式。
+----------------------+-----------------------------+------------------------------------------+
| event | input | output/chunk |
+======================+=============================+==========================================+
| on_chat_model_start | {"messages": BaseMessage[]} | |
+----------------------+-----------------------------+------------------------------------------+
| on_chat_model_stream | | AIMessageChunk("hello") |
+----------------------+-----------------------------+------------------------------------------+
| on_chat_model_end | {"messages": BaseMessage[]} | AIMessageChunk("hello world") |
+----------------------+-----------------------------+------------------------------------------+
| on_llm_start | {'input': 'hello'} | |
+----------------------+-----------------------------+------------------------------------------+
| on_llm_stream | | 'Hello' |
+----------------------+-----------------------------+------------------------------------------+
| on_llm_end | 'Hello human!' | |
+----------------------+-----------------------------+------------------------------------------+
| on_chain_start | | |
+----------------------+-----------------------------+------------------------------------------+
| on_chain_stream | | "hello world!" |
+----------------------+-----------------------------+------------------------------------------+
| on_chain_end | [Document(...)] | "hello world!, goodbye world!" |
+----------------------+-----------------------------+------------------------------------------+
| on_tool_start | {"x": 1, "y": "2"} | |
+----------------------+-----------------------------+------------------------------------------+
| on_tool_end | | {"x": 1, "y": "2"} |
+----------------------+-----------------------------+------------------------------------------+
| on_retriever_start | {"query": "hello"} | |
+----------------------+-----------------------------+------------------------------------------+
| on_retriever_end | {"query": "hello"} | [Document(...), ..] |
+----------------------+-----------------------------+------------------------------------------+
| on_prompt_start | {"question": "hello"} | |
+----------------------+-----------------------------+------------------------------------------+
| on_prompt_end | {"question": "hello"} | ChatPromptValue(messages: BaseMessage[]) |
+----------------------+-----------------------------+------------------------------------------+
"on_chain_*" 事件是默认事件,适用于不属于上述任何类别的 Runnables。
除了上面的标准事件之外,用户还可以调度自定义事件。
自定义事件将仅在 API 的 v2
版本中显示!
自定义事件具有以下格式
+-----------+------+------------------------------------------------------------+
| Attribute | Type | Description |
+===========+======+============================================================+
| name | str | A user defined name for the event. |
+-----------+------+------------------------------------------------------------+
| data | Any | The data associated with the event. This can be anything. |
+-----------+------+------------------------------------------------------------+
这是一个例子
import { RunnableLambda } from "@langchain/core/runnables";
import { dispatchCustomEvent } from "@langchain/core/callbacks/dispatch";
// Use this import for web environments that don't support "async_hooks"
// and manually pass config to child runs.
// import { dispatchCustomEvent } from "@langchain/core/callbacks/dispatch/web";
const slowThing = RunnableLambda.from(async (someInput: string) => {
// Placeholder for some slow operation
await new Promise((resolve) => setTimeout(resolve, 100));
await dispatchCustomEvent("progress_event", {
message: "Finished step 1 of 2",
});
await new Promise((resolve) => setTimeout(resolve, 100));
return "Done";
});
const eventStream = await slowThing.streamEvents("hello world", {
version: "v2",
});
for await (const event of eventStream) {
if (event.event === "on_custom_event") {
console.log(event);
}
}
Optional
streamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">Optional
streamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">流式传输来自 runnable 的所有输出,如同报告给回调系统一样。这包括 LLM、检索器、工具等的所有内部运行。输出以 Log 对象的形式流式传输,其中包括 jsonpatch 操作列表,这些操作描述了运行状态在每个步骤中的变化以及运行的最终状态。可以按顺序应用 jsonpatch 操作来构建状态。
可选
options: Partial<PregelOptions<Record<"__start__" | N, PregelNode<State, Update>>, Record<string | N, BaseChannel<unknown, unknown, unknown>>, ConfigurableFieldType & Record<string, any>>>Optional
streamOptions: Omit<LogStreamCallbackHandlerInput, "autoClose">transform 的默认实现,它会缓冲输入,然后调用 stream。子类应该重写此方法,如果它们可以在输入仍在生成时开始生成输出。
使用新值更新图的状态。需要配置检查点。
此方法可用于
更新的配置
用于更新状态的值
可选
asNode: string | N可选的节点名称,用于将更新归于该节点
更新后的配置
如果未配置检查点
如果更新无法归于节点
创建一个具有更新配置的 Pregel 图的新实例。此方法遵循不可变模式 - 它不是修改当前实例,而是返回一个具有合并配置的新实例。
要与当前配置合并的配置
具有合并配置的新 Pregel 实例
// Create a new instance with debug enabled
const debugGraph = graph.withConfig({ debug: true });
// Create a new instance with a specific thread ID
const threadGraph = graph.withConfig({
configurable: { thread_id: "123" }
});
从当前 runnable 创建一个新的 runnable,如果初始调用失败,它将尝试调用其他传递的 fallback runnable。
一个新的 RunnableWithFallbacks。
将生命周期监听器绑定到 Runnable,返回一个新的 Runnable。“Run”对象包含有关运行的信息,包括其 id、类型、输入、输出、错误、startTime、endTime 以及添加到运行中的任何标签或元数据。
包含回调函数的对象。
可选
on在 runnable 完成运行后调用,带有“Run”对象。
可选
config: RunnableConfig<Record<string, any>>可选
on如果 runnable 抛出错误时调用,带有“Run”对象。
可选
config: RunnableConfig<Record<string, any>>可选
on在 runnable 开始运行之前调用,带有“Run”对象。
可选
config: RunnableConfig<Record<string, any>>向现有 runnable 添加重试逻辑。
可选
fields: { 可选
on可选
stop一个新的 RunnableRetry,当被调用时,将根据参数重试。
静态
is
Pregel 类是 LangGraph 的核心运行时引擎,它实现了一种受 Google 的 Pregel 系统 启发的基于消息传递的图计算模型。它为构建可靠、可控且可以随时间演化状态的代理工作流提供了基础。
主要特性
Pregel 类不应由消费者直接实例化。请改用以下更高级别的 API
Pregel
Pregel
实例由 entrypoint 函数返回示例
示例