建立 Slack 應用程式很有趣!但您的應用程式可靠嗎?
在自己建立應用程式時,我注意到流行的開源 Slack 應用程式中存在兩個常見問題:
許多應用同步處理事件,這可能會導致超時。 Slack 預計在3 秒內做出回應,但如果您的應用程式觸發AI/RAG 管道,則AI 模型可能需要更長的時間才能產生回應(例如,新的o1 模型可能需要約10 秒的時間來“思考”)。 Slack 的最佳實踐建議對事件進行排隊並非同步處理它們。
許多應用程式不處理重複事件。如果您的應用程式無法回應,Slack 會重試該事件 3 次。如果沒有正確的處理,重試可能會導致應用程式出現重複或不一致的回應。這會導致糟糕的用戶體驗。
以下是我如何使用 DBOS Python(一個開源輕量級持久執行函式庫)來解決這些問題。我從現成的基於 AI/RAG 的 Slack 應用程式演示(來自 LlamaIndex 的 llamabot)開始,對函數進行了輕微修改和註釋,以便每個傳入訊息都會啟動 DBOS 工作流程。
訊息發送代碼很簡單:
@slackapp.message() def handle_message(request: BoltRequest) -> None: DBOS.logger.info(f"Received message: {request.body}") event_id = request.body["event_id"] # Use the unique event_id as an idempotency key to guarantee each message is processed exactly-once with SetWorkflowID(event_id): # Start the event processing workflow in the background then respond to Slack. # We can't wait for the workflow to finish because Slack expects the # endpoint to reply within 3 seconds. DBOS.start_workflow(message_workflow, request.body["event"])
工作流程在背景啟動,使我的應用程式能夠快速回應 Slack。 DBOS 工作流程一旦啟動就始終運行完成(即使是非同步運行)。因此,訊息始終能夠可靠地處理。
我使用訊息的事件 ID 作為工作流程的冪等鍵,因此 DBOS 使用它來確保每個訊息只處理一次。
您可以在此GitHub 儲存庫中找到有關我建立的AI 支援的Slack 應用程式的更多詳細資訊:https://github.com/dbos-inc/dbos-demo-apps/tree/main/ python/llamabot
自述文件包含有關如何在 Slack 工作區中直接使用此應用程式的詳細說明。
您通常如何建立可靠的應用程式?您對此應用程式有任何反饋嗎?請告訴我!
以上是建立可靠的 Slack 應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!