类 RunnableTraceable<RunInput, RunOutput>

RunnableTraceable 是一个 Runnable,它包装了一个可追踪的函数。这允许将 Langsmith 追踪函数添加到 LangChain 序列中。

类型参数

  • RunInput
  • RunOutput

继承关系

构造函数

属性

lc_kwargs: SerializedFields
lc_namespace: string[] = ...

包含该类的模块的路径,例如 ["langchain", "llms"]。通常应与导出该类的入口点相同。

lc_serializable: boolean = false
name?: string
func: AnyTraceableFunction
lc_runnable: boolean

访问器

  • get lc_aliases(): undefined | { [key: string]: string }

    构造函数参数别名映射。键是属性名称,例如 "foo"。值是将替换序列化中键的别名。这用于例如使参数名称与 Python 匹配。

    返回值 undefined | { [key: string]: string }

  • get lc_attributes(): undefined | SerializedFields

    要与构造函数参数合并的其他属性的映射。键是属性名称,例如 "foo"。值是将序列化的属性值。这些属性需要被构造函数作为参数接受。

    返回值 undefined | { [key: string]: SerializedFields }

  • get lc_id(): string[]

    模块的最终序列化标识符。

    返回值 string[]

  • get lc_secrets(): undefined | { [key: string]: string }

    密钥映射,将从序列化中省略。键是构造函数参数中密钥的路径,例如 "foo.bar.baz"。值是密钥 ID,将在反序列化时使用。

    返回值 undefined | { [key: string]: string }

  • get lc_serializable_keys(): undefined | string[]

    应序列化的键的手动列表。如果未覆盖,则将序列化传递给构造函数的所有字段。

    返回值 undefined | string[]

方法

  • 为此 runnable 的字典输出分配新字段。返回一个新的 runnable。

    参数

    • mapping: RunnableMapLike<Record<string, unknown>, Record<string, unknown>>

    返回值 Runnable

  • 将 runnable 转换为工具。返回 RunnableToolLike 的新实例,其中包含 runnable、名称、描述和模式 (schema)。

    类型参数

    参数

    • fields: { schema: ZodType<T>; description?: string; name?: string }
      • schema: ZodType<T>

        工具输入的 Zod 模式 (schema)。从 runnable 的输入类型推断 Zod 类型。

      • Optionaldescription?: string

        工具的描述。如果未提供,则回退到 Zod 模式 (schema) 上的描述;如果两者都未提供,则为 undefined。

      • Optionalname?: string

        工具的名称。如果未提供,则默认为 runnable 的名称。

    返回值 RunnableToolLike<ZodType<ToolCall | T, ZodTypeDef, ToolCall | T>, RunOutput>

    RunnableToolLike 的实例,它是一个可以用作工具的 runnable。

  • 批处理的默认实现,它调用 invoke N 次。如果子类可以更有效地进行批处理,则应覆盖此方法。

    参数

    • inputs: RunInput[]

      每个批处理调用的输入数组。

    • Optionaloptions
          | Partial<RunnableConfig<Record<string, any>>>
          | Partial<RunnableConfig<Record<string, any>>>[]

      应用于每个批处理调用的单个调用选项对象或每个调用的数组。

    • OptionalbatchOptions: RunnableBatchOptions & { returnExceptions?: false }
      • returnExceptions

        是否返回错误而不是在第一个错误时抛出异常

      • OptionalreturnExceptions?: false

        是否返回错误而不是在第一个错误时抛出异常

    返回值 Promise<RunOutput[]>

    RunOutput 数组,或者如果设置了 batchOptions.returnExceptions,则为混合的 RunOutput 和错误

  • 批处理的默认实现,它调用 invoke N 次。如果子类可以更有效地进行批处理,则应覆盖此方法。

    参数

    • inputs: RunInput[]

      每个批处理调用的输入数组。

    • Optionaloptions
          | Partial<RunnableConfig<Record<string, any>>>
          | Partial<RunnableConfig<Record<string, any>>>[]

      应用于每个批处理调用的单个调用选项对象或每个调用的数组。

    • OptionalbatchOptions: RunnableBatchOptions & { returnExceptions: true }
      • returnExceptions

        是否返回错误而不是在第一个错误时抛出异常

      • returnExceptions: true

        是否返回错误而不是在第一个错误时抛出异常

    返回值 Promise<(Error | RunOutput)[]>

    RunOutput 数组,或者如果设置了 batchOptions.returnExceptions,则为混合的 RunOutput 和错误

  • 批处理的默认实现,它调用 invoke N 次。如果子类可以更有效地进行批处理,则应覆盖此方法。

    参数

    • inputs: RunInput[]

      每个批处理调用的输入数组。

    • Optionaloptions
          | Partial<RunnableConfig<Record<string, any>>>
          | Partial<RunnableConfig<Record<string, any>>>[]

      应用于每个批处理调用的单个调用选项对象或每个调用的数组。

    • OptionalbatchOptions: RunnableBatchOptions
      • returnExceptions

        是否返回错误而不是在第一个错误时抛出异常

    返回值 Promise<(Error | RunOutput)[]>

    RunOutput 数组,或者如果设置了 batchOptions.returnExceptions,则为混合的 RunOutput 和错误

  • 将参数绑定到 Runnable,返回一个新的 Runnable。

    参数

    • kwargs: Partial<RunnableConfig<Record<string, any>>>

    返回 Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>

    一个新的 RunnableBinding,当被调用时,将应用绑定的参数。

  • 参数

    • Optional_: RunnableConfig<Record<string, any>>

    返回 Graph

  • 参数

    • Optionalsuffix: string

    返回 string

  • 参数

    • input: RunInput
    • Optionaloptions: Partial<RunnableConfig<Record<string, any>>>

    返回 Promise<RunOutput>

  • 返回一个新的 Runnable,它通过对每个输入调用 invoke(),将输入列表映射到输出列表。

    返回 Runnable<RunInput[], RunOutput[], RunnableConfig<Record<string, any>>>

  • 从这个 runnable 的字典输出中选取键。返回一个新的 runnable。

    参数

    • keys: string | string[]

    返回值 Runnable

  • 创建一个新的 runnable 序列,该序列串行运行每个单独的 runnable,并将一个 runnable 的输出管道传输到另一个 runnable 或类似 runnable 的对象。

    类型参数

    • NewRunOutput

    参数

    • coerceable: RunnableLike<RunOutput, NewRunOutput>

      一个 runnable、函数或对象,其值是函数或 runnables。

    返回 Runnable<RunInput, Exclude<NewRunOutput, Error>>

    一个新的 runnable 序列。

  • 以块的形式流式输出。

    参数

    • input: RunInput
    • Optionaloptions: Partial<RunnableConfig<Record<string, any>>>

    返回 Promise<IterableReadableStream<RunOutput>>

    一个可读流,同时也是一个可迭代对象。

  • 生成由 runnable 的内部步骤发出的事件流。

    用于创建一个迭代器,遍历 StreamEvents,这些 StreamEvents 提供有关 runnable 进度的实时信息,包括来自中间结果的 StreamEvents。

    StreamEvent 是一个具有以下模式的字典

    • event: string - 事件名称的格式为:on_[runnable_type]_(start|stream|end)。
    • name: string - 生成事件的 runnable 的名称。
    • run_id: string - 与发出事件的 runnable 的给定执行相关的随机生成的 ID。作为父 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。

    除了上面的标准事件外,用户还可以调度自定义事件。

    自定义事件将仅在 v2 版本的 API 中显示!

    自定义事件具有以下格式

    +-----------+------+------------------------------------------------------------+
    | 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);
    }
    }

    参数

    • input: RunInput
    • options: Partial<RunnableConfig<Record<string, any>>> & { version: "v1" | "v2" }
    • OptionalstreamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">

    返回 IterableReadableStream<StreamEvent>

  • 生成由 runnable 的内部步骤发出的事件流。

    用于创建一个迭代器,遍历 StreamEvents,这些 StreamEvents 提供有关 runnable 进度的实时信息,包括来自中间结果的 StreamEvents。

    StreamEvent 是一个具有以下模式的字典

    • event: string - 事件名称的格式为:on_[runnable_type]_(start|stream|end)。
    • name: string - 生成事件的 runnable 的名称。
    • run_id: string - 与发出事件的 runnable 的给定执行相关的随机生成的 ID。作为父 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。

    除了上面的标准事件外,用户还可以调度自定义事件。

    自定义事件将仅在 v2 版本的 API 中显示!

    自定义事件具有以下格式

    +-----------+------+------------------------------------------------------------+
    | 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);
    }
    }

    参数

    • input: RunInput
    • options: Partial<RunnableConfig<Record<string, any>>> & {
          encoding: "text/event-stream";
          version: "v1" | "v2";
      }
    • OptionalstreamOptions: Omit<EventStreamCallbackHandlerInput, "autoClose">

    返回 IterableReadableStream<Uint8Array<ArrayBufferLike>>

  • 流式传输来自 runnable 的所有输出,如回调系统报告的那样。这包括 LLM、Retriever、Tool 等的所有内部运行。输出以 Log 对象的形式流式传输,其中包括 jsonpatch 操作列表,这些操作描述了每个步骤中运行状态的变化以及运行的最终状态。可以按顺序应用 jsonpatch 操作来构建状态。

    参数

    • input: RunInput
    • Optionaloptions: Partial<RunnableConfig<Record<string, any>>>
    • OptionalstreamOptions: Omit<LogStreamCallbackHandlerInput, "autoClose">

    返回 AsyncGenerator<RunLogPatch>

  • 返回 Serialized

  • 返回 SerializedNotImplemented

  • transform 的默认实现,它缓冲输入,然后调用 stream。如果子类可以在输入仍在生成时开始生成输出,则应覆盖此方法。

    参数

    • generator: AsyncGenerator<RunInput>
    • options: Partial<RunnableConfig<Record<string, any>>>

    返回 AsyncGenerator<RunOutput>

  • 将配置绑定到 Runnable,返回一个新的 Runnable。

    参数

    • config: RunnableConfig

      要附加到新 runnable 的新配置参数。

    返回 Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>

    一个新的 RunnableBinding,其配置与传递的配置匹配。

  • 从当前 runnable 创建一个新的 runnable,如果初始调用失败,它将尝试调用其他传递的回退 runnables。

    参数

    • fields:
          | {
              fallbacks: Runnable<
                  RunInput,
                  RunOutput,
                  RunnableConfig<Record<string, any>>,
              >[];
          }
          | Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>[]
      • {
            fallbacks: Runnable<
                RunInput,
                RunOutput,
                RunnableConfig<Record<string, any>>,
            >[];
        }
        • fallbacks: Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>[]

          如果 runnable 发生错误,则调用其他 runnables。

      • Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>[]

    返回 RunnableWithFallbacks<RunInput, RunOutput>

    一个新的 RunnableWithFallbacks。

  • 将生命周期监听器绑定到 Runnable,返回一个新的 Runnable。“Run”对象包含关于运行的信息,包括其 ID、类型、输入、输出、错误、开始时间、结束时间以及添加到运行中的任何标签或元数据。

    参数

    • params: {
          onEnd?: (
              run: Run,
              config?: RunnableConfig<Record<string, any>>,
          ) => void | Promise<void>;
          onError?: (
              run: Run,
              config?: RunnableConfig<Record<string, any>>,
          ) => void | Promise<void>;
          onStart?: (
              run: Run,
              config?: RunnableConfig<Record<string, any>>,
          ) => void | Promise<void>;
      }

      包含回调函数的对象。

      • 可选onEnd?: (run: Run, config?: RunnableConfig<Record<string, any>>) => void | Promise<void>

        在 runnable 完成运行后调用,带有 Run 对象。

      • 可选onError?: (run: Run, config?: RunnableConfig<Record<string, any>>) => void | Promise<void>

        如果 runnable 抛出错误时调用,带有 Run 对象。

      • 可选onStart?: (run: Run, config?: RunnableConfig<Record<string, any>>) => void | Promise<void>

        在 runnable 开始运行之前调用,带有 Run 对象。

    返回 Runnable<RunInput, RunOutput, RunnableConfig<Record<string, any>>>

  • 向现有的 runnable 添加重试逻辑。

    参数

    • 可选fields: {
          onFailedAttempt?: RunnableRetryFailedAttemptHandler;
          stopAfterAttempt?: number;
      }

    返回 RunnableRetry<RunInput, RunOutput, RunnableConfig<Record<string, any>>>

    一个新的 RunnableRetry,当调用时,将根据参数进行重试。

  • 参数

    • thing: any

    返回 thing is Runnable<any, any, RunnableConfig<Record<string, any>>>

  • 可序列化对象的名称。覆盖此方法以提供别名或在最小化环境中保留序列化的模块名称。

    作为静态方法实现,以支持加载逻辑。

    返回 string