回调
先决条件
LangChain 提供了一个回调系统,允许你接入 LLM 应用的各个阶段。这在日志记录、监控、流式处理以及其他任务中非常有用。
您可以使用API中可用的 callbacks 参数订阅这些事件。此参数是一个处理程序对象列表,这些对象应实现以下方法中的一种或多种。
回调事件
| 事件 | 事件触发 | 关联方法 |
|---|---|---|
| Chat model start | When a chat model starts | on_chat_model_start |
| LLM start | When a llm starts | on_llm_start |
| LLM new token | When an llm OR chat model emits a new token | on_llm_new_token |
| LLM ends | When an llm OR chat model ends | on_llm_end |
| LLM errors | When an llm OR chat model errors | on_llm_error |
| Chain start | When a chain starts running | on_chain_start |
| Chain end | When a chain ends | on_chain_end |
| Chain error | When a chain errors | on_chain_error |
| Tool start | When a tool starts running | on_tool_start |
| Tool end | When a tool ends | on_tool_end |
| Tool error | When a tool errors | on_tool_error |
| Agent action | When an agent takes an action | on_agent_action |
| Agent finish | When an agent ends | on_agent_finish |
| Retriever start | When a retriever starts | on_retriever_start |
| Retriever end | When a retriever ends | on_retriever_end |
| Retriever error | When a retriever errors | on_retriever_error |
| Text | When arbitrary text is run | on_text |
| Retry | When a retry event is run | on_retry |
回调处理程序
回调处理程序可以是 sync 或 async:
- 同步回调处理程序实现 BaseCallbackHandler 接口。
- 异步回调处理程序实现 AsyncCallbackHandler 接口。
运行时,LangChain 会配置一个合适的回调管理器(例如 CallbackManager 或 AsyncCallbackManager),该管理器将在事件触发时调用每个“已注册”的回调处理器的相应方法。
传递回调函数
API 中的大多数对象(模型、工具、代理等)在两个不同位置都提供 callbacks 属性:
- 请求时间回调:在请求时传递,除了输入数据外。
所有标准
Runnable对象均可使用。这些回调会被定义它们的对象的所有子对象继承。 例如,chain.invoke({"number": 25}, {"callbacks": [handler]})。 - 构造函数回调:
chain = TheNameOfSomeChain(callbacks=[handler])。这些回调作为参数传递给对象的构造函数。回调的作用域仅限于定义它们的对象,并且不会被该对象的任何子对象继承。
警告
构造函数回调仅作用于它们被定义的对象。它们 不会 被对象的子对象继承。
如果你正在创建自定义链或可运行对象,需要记住将请求时间回调传递给任何子对象。
Python<=3.10 中的异步
任何调用其他可运行对象的 RunnableLambda、RunnableGenerator 或 Tool,在 Python<=3.10 中运行时,都必须手动将回调传递给子对象。这是因为 LangChain 在这种情况下无法自动将回调传递给子对象。
这是一个常见原因,可能导致你无法看到来自自定义可运行对象或工具的事件被发出。
有关如何使用回调的详细信息,请参阅 此处的相关操操作指南。