Skip to main content
Open on GitHub

回调

先决条件

LangChain 提供了一个回调系统,允许你接入 LLM 应用的各个阶段。这在日志记录、监控、流式处理以及其他任务中非常有用。

您可以使用API中可用的 callbacks 参数订阅这些事件。此参数是一个处理程序对象列表,这些对象应实现以下方法中的一种或多种。

回调事件

事件事件触发关联方法
Chat model startWhen a chat model startson_chat_model_start
LLM startWhen a llm startson_llm_start
LLM new tokenWhen an llm OR chat model emits a new tokenon_llm_new_token
LLM endsWhen an llm OR chat model endson_llm_end
LLM errorsWhen an llm OR chat model errorson_llm_error
Chain startWhen a chain starts runningon_chain_start
Chain endWhen a chain endson_chain_end
Chain errorWhen a chain errorson_chain_error
Tool startWhen a tool starts runningon_tool_start
Tool endWhen a tool endson_tool_end
Tool errorWhen a tool errorson_tool_error
Agent actionWhen an agent takes an actionon_agent_action
Agent finishWhen an agent endson_agent_finish
Retriever startWhen a retriever startson_retriever_start
Retriever endWhen a retriever endson_retriever_end
Retriever errorWhen a retriever errorson_retriever_error
TextWhen arbitrary text is runon_text
RetryWhen a retry event is runon_retry

回调处理程序

回调处理程序可以是 syncasync

运行时,LangChain 会配置一个合适的回调管理器(例如 CallbackManagerAsyncCallbackManager),该管理器将在事件触发时调用每个“已注册”的回调处理器的相应方法。

传递回调函数

API 中的大多数对象(模型、工具、代理等)在两个不同位置都提供 callbacks 属性:

  • 请求时间回调:在请求时传递,除了输入数据外。 所有标准 Runnable 对象均可使用。这些回调会被定义它们的对象的所有子对象继承。 例如,chain.invoke({"number": 25}, {"callbacks": [handler]})
  • 构造函数回调: chain = TheNameOfSomeChain(callbacks=[handler])。这些回调作为参数传递给对象的构造函数。回调的作用域仅限于定义它们的对象,并且不会被该对象的任何子对象继承。
警告

构造函数回调仅作用于它们被定义的对象。它们 不会 被对象的子对象继承。

如果你正在创建自定义链或可运行对象,需要记住将请求时间回调传递给任何子对象。

Python<=3.10 中的异步

任何调用其他可运行对象的 RunnableLambdaRunnableGeneratorTool,在 Python<=3.10 中运行时,都必须手动将回调传递给子对象。这是因为 LangChain 在这种情况下无法自动将回调传递给子对象。

这是一个常见原因,可能导致你无法看到来自自定义可运行对象或工具的事件被发出。

有关如何使用回调的详细信息,请参阅 此处的相关操操作指南