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

Créez des applications Slack fiables

Sep 14, 2024 am 08:15 AM

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"])
Copier après la connexion
  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 de ce site Web
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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser la belle soupe pour analyser HTML? Comment utiliser la belle soupe pour analyser HTML? Mar 10, 2025 pm 06:54 PM

Comment utiliser la belle soupe pour analyser HTML?

Filtrage d'image en python Filtrage d'image en python Mar 03, 2025 am 09:44 AM

Filtrage d'image en python

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte Mar 05, 2025 am 09:58 AM

Comment utiliser Python pour trouver la distribution ZIPF d'un fichier texte

Comment travailler avec des documents PDF à l'aide de Python Comment travailler avec des documents PDF à l'aide de Python Mar 02, 2025 am 09:54 AM

Comment travailler avec des documents PDF à l'aide de Python

Comment se cacher en utilisant Redis dans les applications Django Comment se cacher en utilisant Redis dans les applications Django Mar 02, 2025 am 10:10 AM

Comment se cacher en utilisant Redis dans les applications Django

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch? Mar 10, 2025 pm 06:52 PM

Comment effectuer l'apprentissage en profondeur avec TensorFlow ou Pytorch?

Sérialisation et désérialisation des objets Python: partie 1 Sérialisation et désérialisation des objets Python: partie 1 Mar 08, 2025 am 09:39 AM

Sérialisation et désérialisation des objets Python: partie 1

Comment implémenter votre propre structure de données dans Python Comment implémenter votre propre structure de données dans Python Mar 03, 2025 am 09:28 AM

Comment implémenter votre propre structure de données dans Python

See all articles