框架与工具链2012 字
LangChain自定义Callback组件
·全库 346 / 611
《LangChain自定义Callback组件》共 0.2 万字,通篇围绕 LangChain、Agent、prompt、日志 展开,归在「框架与工具链」这一层。
覆盖LangChainAgentprompt日志监控
适合要选技术栈、不想把别人踩过的坑重踩一遍的人
目录骨架(6 节)
- 回调概念
- 回调事件(Callback Events)
- 回调处理程序
- 传递回调函数
- 在运行时传递回调函数
- 自定义 callback handlers自定义 Chat model
示例代码
注:将ppt后缀名改为zip后解压
python版本:3.12.4
回调概念
LangChain提供了一个回调系统,允许您连接到LLM应用程序的各个阶段。这对于日志记录、监控、流式处理和其他任务非常有用。 您可以通过使用API中的callbacks参数订阅这些事件。这个参数是处理程序对象的列表,这些处理程序对象应该实现下面更详细描述的一个或多个方法。
回调事件(Callback Events)
| Event | Event Trigger | Associated Method |
|---|---|---|
| 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 |
回调处理程序
CallbackHandlers是实现了CallbackHandler接口的对象,该接口对应于可以订阅的每个事件都有一个方法。 当事件触发时,CallbackManager将在每个处理程序上调用适当的方法。
参考:https://api.python.langchain.com/en/latest/callbacks/langchain_core.callbacks.base.BaseCallbackHandler.html#langchain-core-callbacks-base-basecallbackhandler
#示例:callback_run.py
class BaseCallbackHandler:
"""可以用来处理langchain回调的基本回调处理程序。"""
def on_llm_start(
self, serialized: Dict[str, Any], prompts: List[str], **kwargs: Any
) -> Any:
"""LLM开始运行时运行。"""
def on_chat_model_start(
self, serialized: Dict[str, Any], messages: List[List[BaseMessage]], **kwargs: Any
) -> Any:
"""聊天模型开始运行时运行。"""
# 其他方法省略...
传递回调函数
callbacks 属性在 API 的大多数对象(模型、工具、代理等)中都可用,在两个不同的位置上:
- 构造函数回调:在构造函数中定义,例如 ChatOpenAI(callbacks=[handler], tags=['a-tag'])。在这种情况下,回调函数将用于该对象上的所有调用,并且仅限于该对象。 例如,如果你使用构造函数回调初始化了一个聊天模型,然后在链式调用中使用它,那么回调函数只会在对该模型的调用中被调用。
- 请求回调:传递给用于发出请求的 invoke 方法。在这种情况下,回调函数仅用于该特定请求,以及它包含的所有子请求(例如,调用触发对模型的调用的序列的调用,该模型使用在 invoke() 方法中传递的相同处理程序)。 在 invoke() 方法中,通过 config 参数传递回调函数。
