Callbacks
先決條件
LangChain 提供了一個 callback 系統,讓您可以hook into LLM 應用程式的各個階段。這對於日誌記錄、監控、串流和其他任務非常有用。
您可以使用整個 API 中提供的 callbacks
參數來訂閱這些事件。此參數是處理程序物件的列表,這些物件應實作以下更詳細描述的一或多個方法。
Callback 事件
事件 | 事件觸發器 | 關聯方法 |
---|---|---|
聊天模型開始 | 當聊天模型開始時 | on_chat_model_start |
LLM 開始 | 當 llm 開始時 | on_llm_start |
LLM 新 token | 當 llm 或聊天模型發出新 token 時 | 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 |
Callback 處理器
Callback 處理器可以是 sync
或 async
- 同步 callback 處理器實作 BaseCallbackHandler 介面。
- 非同步 callback 處理器實作 AsyncCallbackHandler 介面。
在執行時期,LangChain 會配置適當的 callback 管理器(例如,CallbackManager 或 AsyncCallbackManager),當事件觸發時,它將負責調用每個「已註冊」callback 處理器上的適當方法。
傳遞 callbacks
callbacks
屬性在整個 API 中的大多數物件(模型、工具、代理等)的兩個不同位置都可用
- 請求時間 callbacks:在請求時與輸入資料一起傳遞。在所有標準
Runnable
物件上都可用。這些 callbacks 由定義它們的物件的所有子物件繼承。例如,chain.invoke({"number": 25}, {"callbacks": [handler]})
。 - 建構子 callbacks:
chain = TheNameOfSomeChain(callbacks=[handler])
。這些 callbacks 作為引數傳遞給物件的建構子。Callbacks 的範圍僅限於定義它們的物件,並且不會被物件的任何子物件繼承。
警告
建構子 callbacks 的範圍僅限於定義它們的物件。它們不會被物件的子物件繼承。
如果您正在建立自訂鏈或 runnable,您需要記住將請求時間 callbacks 傳播到任何子物件。
Python <=3.10 中的非同步
任何 RunnableLambda
、RunnableGenerator
或 Tool
,如果調用其他 runnable 並且在 python <=3.10 中以 async
方式運行,則必須手動將 callbacks 傳播到子物件。這是因為在這種情況下,LangChain 無法自動將 callbacks 傳播到子物件。
這是您可能無法看到從自訂 runnables 或工具發出事件的常見原因。
有關如何使用 callbacks 的具體資訊,請參閱此處相關的操作指南。