⛑️ 事件:在 Open WebUI 中使用 __event_emitter__
和 __event_call__
Open WebUI 的插件架構不僅僅是處理輸入並生成輸出——它更是與使用者介面和用戶的即時互動交流。為了讓您的 Tools、Functions 和 Pipes 更加動態,Open WebUI 通過 __event_emitter__
和 __event_call__
提供內建事件系統。
本指南將解釋什麼是事件,如何從您的代碼觸發它們,以及您可以使用的事件類型完整目錄(內容遠超僅僅是 "input"
)。
🌊 什麼是事件?
事件是從您的後端代碼(Tool 或 Function)發送到 Web UI 的即時通知或互動請求。它們允許您更新聊天、顯示通知、請求確認、運行 UI 流程等等。
- 事件使用
__event_emitter__
助手發送以進行單向更新,或者使用__event_call__
當您需要用戶輸入或回應(例如確認、輸入等)。
比喻: 可以把事件看作您的插件可以觸發的推送通知和模態對話框,使聊天體驗更豐富、更具互動性。
🧰 基本用法
發送事件
您可以在 Tool 或 Function 的任意位置調用以下代碼來觸發事件:
await __event_emitter__(
{
"type": "status", # 請參考下文中的事件類型列表
"data": {
"description": "處理開始!",
"done": False,
"hidden": False,
},
}
)
您不需要手動添加像 chat_id
或 message_id
等字段——這些將由 Open WebUI 自動處理。
互動事件
當您需要在用戶回應之前暫停執行(例如確認/取消對話框、代碼執行或輸入)時,請使用 __event_call__
:
result = await __event_call__(
{
"type": "input", # 或者 "confirmation", "execute"
"data": {
"title": "請輸入您的密碼",
"message": "此操作需要密碼",
"placeholder": "在此輸入您的密碼",
},
}
)
# result 將包含用戶輸入的值
📜 事件載荷結構
當您發出或調用事件時,基本結構如下:
{
"type": "event_type", // 請參考下文完整列表
"data": { ... } // 特定事件的數據載荷
}
大多數情況下,您只需設置 "type"
和 "data"
。Open WebUI 將自動填充路由。