Maison >développement back-end >Tutoriel Python >Créez des applications Slack fiables

Créez des applications Slack fiables

DDD
DDDoriginal
2024-09-14 08:15:44779parcourir

Build reliable Slack apps

Créer une application Slack est amusant ! Mais votre application est-elle fiable ?
En en créant un moi-même, j'ai remarqué deux problèmes courants dans les applications Slack open source populaires :

  1. De nombreuses applications traitent les événements de manière synchrone, ce qui peut entraîner des délais d'attente. Slack attend des réponses dans un délai de 3 secondes, mais si votre application déclenche des pipelines AI/RAG, les modèles d'IA peuvent mettre plus de temps à générer une réponse (par exemple, le nouveau modèle o1 peut prendre environ 10 secondes pour « réfléchir »). Les meilleures pratiques de Slack recommandent de mettre les événements en file d’attente et de les traiter de manière asynchrone.

  2. De nombreuses applications ne gèrent pas les événements en double. Si votre application ne répond pas, Slack réessaye l'événement trois fois. Sans traitement approprié, les nouvelles tentatives peuvent entraîner des réponses en double ou incohérentes de la part de l'application. Cela conduit à de mauvaises expériences utilisateur.

Voici comment je les résous avec DBOS Python, une bibliothèque d'exécution open source légère et durable. Je suis parti d'une démo d'application Slack prête à l'emploi basée sur l'IA/RAG (llamabot de LlamaIndex), des fonctions légèrement modifiées et annotées afin que chaque message entrant démarre un flux de travail DBOS.

Le code d'envoi du message est simple :

@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. Le flux de travail est lancé en arrière-plan, permettant à mon application de répondre rapidement à Slack. Les workflows DBOS s'exécutent toujours jusqu'à leur terme une fois démarrés (même de manière asynchrone). Ainsi, les messages sont toujours traités de manière fiable.

  2. J'utilise l'ID d'événement du message comme clé d'idempotence du flux de travail, donc DBOS l'utilise pour garantir que chaque message est traité exactement une fois.

Vous pouvez trouver plus de détails sur l'application Slack basée sur l'IA que j'ai créée dans ce dépôt GitHub : https://github.com/dbos-inc/dbos-demo-apps/tree/main/python/llamabot

Le README contient des instructions détaillées sur la façon dont vous pouvez utiliser cette application directement dans votre espace de travail Slack.

Comment créez-vous habituellement des applications fiables ? Avez-vous des retours sur cette application ? S'il vous plaît laissez-moi savoir !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn