跳转到主要内容

回调

先决条件

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

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

回调事件

事件事件触发关联方法
聊天模型启动当聊天模型启动时on_chat_model_start
LLM 启动当 LLM 启动时on_llm_start
LLM 新令牌当 LLM 或聊天模型发出新令牌时on_llm_new_token
LLM 结束当 LLM 或聊天模型结束时on_llm_end
LLM 错误当 LLM 或聊天模型出错时on_llm_error
链式启动当链式开始运行时on_chain_start
链式结束当链式结束时on_chain_end
链式错误当链式出错时on_chain_error
工具启动当工具开始运行时on_tool_start
工具结束当工具结束时on_tool_end
工具错误当工具出错时on_tool_error
代理操作当代理执行操作时on_agent_action
代理完成当代理结束时on_agent_finish
检索器启动当检索器启动时on_retriever_start
检索器结束当检索器结束时on_retriever_end
检索器错误当检索器出错时on_retriever_error
文本当任意文本运行时on_text
重试当重试事件运行时on_retry

回调处理器

回调处理器可以是 syncasync

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

传递回调

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

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

构造器回调的范围仅限于定义它们的对象。它们**不**会被对象的子对象继承。

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

Python <= 3.10 中的异步

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

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

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


此页是否对您有帮助?