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