回调
前提条件
LangChain 提供了一个回调系统,允许你hook到 LLM 应用的各个阶段。这对于日志记录、监控、流式传输和其他任务非常有用。
你可以使用 API 中随处可用的 callbacks 参数来订阅这些事件。此参数是处理程序对象列表,这些对象应实现下面更详细描述的一个或多个方法。
回调事件
| 事件 | 事件触发器 | 关联方法 | 
|---|---|---|
| 聊天模型启动 | 当聊天模型启动时 | handleChatModelStart | 
| LLM 启动 | 当 LLM 启动时 | handleLlmStart | 
| LLM 新 token | 当 LLM 或聊天模型发出新 token 时 | handleLlmNewToken | 
| LLM 结束 | 当 LLM 或聊天模型结束时 | handleLlmEnd | 
| LLM 错误 | 当 LLM 或聊天模型出错时 | handleLlmError | 
| 链启动 | 当链开始运行时 | handleChainStart | 
| 链结束 | 当链结束时 | handleChainEnd | 
| 链错误 | 当链出错时 | handleChainError | 
| 工具启动 | 当工具开始运行时 | handleToolStart | 
| 工具结束 | 当工具结束时 | handleToolEnd | 
| 工具错误 | 当工具出错时 | handleToolError | 
| 检索器启动 | 当检索器启动时 | handleRetrieverStart | 
| 检索器结束 | 当检索器结束时 | handleRetrieverEnd | 
| 检索器错误 | 当检索器出错时 | handleRetrieverError | 
回调处理程序
- 回调处理程序实现了 BaseCallbackHandler 接口。
在运行时,LangChain 配置一个适当的回调管理器(例如,CallbackManager),当事件被触发时,该管理器将负责在每个“已注册”的回调处理程序上调用适当的方法。
传递回调
callbacks 属性在整个 API 中的大多数对象(模型、工具、代理等)的两个不同位置可用
- 请求时回调:在请求时以及输入数据一起传递。在所有标准 Runnable对象上可用。这些回调由它们定义的对象的所有子对象继承。 例如,await chain.invoke({ number: 25 }, { callbacks: [handler] })。
- 构造函数回调:const chain = new TheNameOfSomeChain({ callbacks: [handler] })。这些回调作为参数传递给对象的构造函数。回调的作用域仅限于它们定义的对象,并且不会被对象的任何子对象继承。
危险
构造函数回调的作用域仅限于它们定义的对象。它们不会被对象的子对象继承。
如果你正在创建自定义链或 runnable,则需要记住将请求时回调传播到任何子对象。
有关如何使用回调的具体信息,请参阅此处的相关实践指南。