Skip to main content
Open on GitHub

回调

前提条件

LangChain 提供了一个回调系统,允许您挂接到 LLM 应用程序的各个阶段。这对于日志记录、监控、流式传输和其他任务非常有用。

您可以通过 API 中提供的 callbacks 参数进行订阅。此参数是处理程序对象的列表,这些对象应实现下面更详细描述的一个或多个方法。

回调事件

事件事件触发关联方法
Chat model start当一个聊天模型开始时on_chat_model_start
LLM start当一个 LLM 开始时on_llm_start
LLM new token当一个 LLM 或聊天模型发出新 token 时on_llm_new_token
LLM ends当一个 LLM 或聊天模型结束时on_llm_end
LLM errors当一个 LLM 或聊天模型出错时on_llm_error
Chain start当一个链开始运行时on_chain_start
Chain end当一个链结束时on_chain_end
Chain error当一个链出错时on_chain_error
Tool start当一个工具开始运行时on_tool_start
Tool end当一个工具结束时on_tool_end
Tool error当一个工具出错时on_tool_error
Agent action当一个代理采取行动时on_agent_action
Agent finish当一个代理结束时on_agent_finish
Retriever start当一个检索器开始时on_retriever_start
Retriever end当一个检索器结束时on_retriever_end
Retriever error当一个检索器出错时on_retriever_error
Text当任意文本运行时on_text
Retry当一个重试事件运行时on_retry

回调处理程序

回调处理程序可以是 syncasync

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

传递回调

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

  • 请求时回调:在请求时与输入数据一起传递。 在所有标准的 Runnable 对象上均可用。这些回调由其定义的对象的所有子对象继承。例如,chain.invoke({"number": 25}, {"callbacks": [handler]})
  • 构造函数回调chain = TheNameOfSomeChain(callbacks=[handler])。这些回调作为参数传递给对象的构造函数。这些回调仅限于其定义的对象本身不会被其任何子对象继承。
warning

构造函数回调仅限于其定义的对象本身。它们不会被子对象继承。

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

Python<=3.10 中的异步

任何 RunnableLambdaRunnableGenerator 或调用其他可运行对象的 Tool,并且在 Python<=3.10 中以 async 模式运行,都必须手动将回调传播到子对象。这是因为 LangChain 在这种情况下无法自动将回调传播到子对象。

这是您可能无法从自定义可运行对象或工具中看到事件发出的常见原因。

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