首頁  >  文章  >  後端開發  >  建立可靠的 Slack 應用程式

建立可靠的 Slack 應用程式

DDD
DDD原創
2024-09-14 08:15:44519瀏覽

Build reliable Slack apps

建立 Slack 應用程式很有趣!但您的應用程式可靠嗎?
在自己建立應用程式時,我注意到流行的開源 Slack 應用程式中存在兩個常見問題:

  1. 許多應用同步處理事件,這可能會導致超時。 Slack 預計在3 秒內做出回應,但如果您的應用程式觸發AI/RAG 管道,則AI 模型可能需要更長的時間才能產生回應(例如,新的o1 模型可能需要約10 秒的時間來“思考”)。 Slack 的最佳實踐建議對事件進行排隊並非同步處理它們。

  2. 許多應用程式不處理重複事件。如果您的應用程式無法回應,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"])
  1. 工作流程在背景啟動,使我的應用程式能夠快速回應 Slack。 DBOS 工作流程一旦啟動就始終運行完成(即使是非同步運行)。因此,訊息始終能夠可靠地處理。

  2. 我使用訊息的事件 ID 作為工作流程的冪等鍵,因此 DBOS 使用它來確保每個訊息只處理一次。

您可以在此GitHub 儲存庫中找到有關我建立的AI 支援的Slack 應用程式的更多詳細資訊:https://github.com/dbos-inc/dbos-demo-apps/tree/main/ python/llamabot

自述文件包含有關如何在 Slack 工作區中直接使用此應用程式的詳細說明。

您通常如何建立可靠的應用程式?您對此應用程式有任何反饋嗎?請告訴我!

以上是建立可靠的 Slack 應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn