Résumé du sujet de Discourse AI 🤖

|||
-|-|-|
:information_source: | Résumé | Utilise un modèle linguistique d’IA distant pour préparer et publier un résumé d’un sujet.
:hammer_and_wrench: | Lien vers le dépôt | GitHub - merefield/discourse-ai-topic-summary: Uses a remote AI language model to prepare and post a summary of a Topic
:open_book: | Guide d’installation | Comment installer des plugins dans Discourse
:heart: | Sponsoring | Envisagez de devenir un sponsor de mon travail open source à un niveau qui convient à vos ressources et besoins, ou à ceux de votre organisation, afin de garantir que ce plugin reçoive la maintenance qu’il mérite et continue de fonctionner pour votre site à l’avenir.

Vous appréciez ce plugin ? Merci de lui donner un :star: sur GitHub ! :pray:

Fonctionnalités

  • Résumés de sujets générés par l’IA :
    • Vous pouvez choisir quand ils sont générés pour la première fois et le nombre de nouveaux messages requis pour les recréer, rendant le plugin rentable.
    • Choix de l’emplacement d’affichage du sujet, soit en haut, soit dans une barre latérale (composant de thème Bars requis).
    • Système de vote permettant à la communauté de voter contre les résumés médiocres. Si les votes dépassent un seuil, un nouveau résumé est recherché.
    • Affichage dans la liste des sujets - Les résumés IA sont affichés à la place des extraits lorsqu’ils sont disponibles.
  • Système de marquage automatique (Auto-tagging)
    • réutilise le résumé pour marquer intelligemment votre sujet.
    • choisissez entre deux stratégies pour mieux adapter votre cas d’utilisation.
  • Génération automatique d’une miniature de sujet qui représente le sujet.
  • Toutes les invites sont modifiables dans Personnaliser → Texte.
  • Ce plugin a été le tout premier plugin d’IA pour Discourse :1st_place_medal:

(NB, ceci est juste un aperçu de l’interface utilisateur utilisant des données de développement aléatoires horribles, les résultats sont beaucoup meilleurs sur des données réelles)

Après un nombre minimum de messages, si un sujet se trouve dans une catégorie concernée, le plugin enverra le texte du sujet à un grand modèle linguistique Open AI avec une invite et publiera la réponse, destinée à être un résumé du contenu, ce qu’il réussit assez bien à faire. Il y a un choix de modèle.

Les résumés sont souvent étonnamment bons, parfois sublimes. Cependant, lorsqu’un résumé n’est pas assez bon, j’ai ajouté un mécanisme de vote communautaire pour forcer un rafraîchissement des résumés médiocres après un seuil défini.

Les résumés sont de toute façon recherchés à nouveau lorsqu’un nombre défini de messages supplémentaires ont été publiés.

Vous pouvez modifier l’invite et les seuils.

NOTE IMPORTANTE : les résumés ne sont jamais exposés aux anonymes, donc le texte ne sera pas indexable (vous pouvez penser que c’est une bonne chose ou non, mais au moins les robots d’indexation n’opéreront que sur vos données humaines authentiques).

Prise en charge du marquage automatique :

Fatigué de marquer les sujets ? Laissez l’IA le faire pour vous ! (Relativement intelligemment !)

Parfois, l’IA devient trop créative malgré les instructions que nous lui donnons ici, vous pouvez donc la restreindre à l’ensemble des étiquettes existantes.

Vous pouvez rapidement créer un utilisateur non administrateur à cet effet à partir de la console rails en utilisant :

rake admin:create (ne donnez pas à cet utilisateur les privilèges d’administrateur)

(Ceci est une solution de contournement un peu bancale car l’API interne actuelle de Discourse pour le marquage ne vous permet pas actuellement de spécifier “pas de nouvelles étiquettes”, donc la seule façon de l’empêcher facilement à l’heure actuelle est de les créer en tant qu’utilisateur qui n’a pas ce privilège (c’est-à-dire un niveau de confiance inférieur à min_trust_to_create_tag))

Optionnellement, remplacez les extraits dans la liste des sujets par le résumé de l’IA

Le paramètre ai_topic_summary_expose_as_excerpt lorsqu’il est activé remplacera l’extrait dans les listes de sujets qui affichent des extraits (par exemple, via un composant de thème comme Topic List Previews ou Topic List Excerpts), par le résumé de l’IA s’il est disponible.

Activation/Désactivation des extraits :

Vous pouvez l’utiliser pour mon composant de thème Topic List Previews (TLP) - #592 by merefield

Image optionnelle représentant le sujet

J’ai ajouté une fonctionnalité de génération de miniature optionnelle à ce plugin.

Elle représentera le résumé dans une image qu’il ajoutera automatiquement en haut de l’OP.

  • Vous devez l’activer dans les paramètres du plugin
  • Vous pouvez éventuellement choisir de supprimer automatiquement la dernière image du haut à chaque fois
  • Vous pouvez modifier l’invite via le lien dans les paramètres du plugin afin d’influencer le style et le contenu (mais cela s’appliquera à toutes les images générées par la suite)

Profitez-en :framed_picture:

Limitations

En raison des limites de jetons, cela ne fonctionne actuellement que pour environ 160 messages maximum (selon le modèle !), donc il n’inclura pas le matériel des messages après un certain point. Cela changera très probablement à l’avenir à mesure que les modèles deviendront plus puissants et les services plus sophistiqués.

Limites de débit et coûts

La récupération de données auprès d’Open AI n’est pas gratuite. Cependant, les limites de débit sont implicitement basées sur la publication. Vous avez le contrôle sur le nombre de messages nécessaires avant que de nouveaux résumés ne soient recherchés. Cela ne devrait pas poser de problème.

Prise en charge des “Bars” latérales !!

Il existe désormais un widget compatible Bars qui est livré avec le plugin. Il vous suffit d’installer le composant de thème Bars et de le configurer :

Une fois installé, vous pouvez désactiver le résumé standard en haut du sujet et vous fier au widget dans la barre latérale.

Notes

Avis de non-responsabilité : Je ne suis pas responsable de ce que le LLM répond. Veuillez comprendre les avantages et les inconvénients d’un LLM, ce qu’il est et ce qu’il n’est pas capable de faire, ainsi que ses limites. Ils sont très doués pour créer du texte convaincant et contextuellement pertinent, mais peuvent être factuellement incorrects.

Note de confidentialité importante : Vos données de forum sont envoyées à Open AI. Bien qu’elles ne soient très probablement pas incorporées dans leurs modèles pré-entraînés, ils utiliseront les données dans leurs analyses et journaux. Assurez-vous d’ajouter ce fait dans les conditions d’utilisation et les déclarations de confidentialité de votre forum. Liens connexes : Conditions d’utilisation, Politique de confidentialité

Copyright : Open AI a fait une déclaration concernant le Copyright ici : OpenAI revendiquera-t-il le droit d’auteur sur les sorties que je génère avec l’API ? | Centre d’aide OpenAI

À faire

  • Ajouter des tests frontaux et arrière :construction:
  • Ajouter plus de configuration utilisateur pour affecter le style de la réponse :white_check_mark:
  • Ajouter la prise en charge des noms de modèles personnalisés :white_check_mark:
  • Ajouter la prise en charge de GPT-4 lorsqu’il sera disponible :white_check_mark:
  • Rendre le paramètre du modèle une liste déroulante :white_check_mark:
  • Ajouter la prise en charge des widgets pour le plugin Layouts :white_check_mark:
30 « J'aime »

C’était juste une question de temps avant que nous ayons ça !

Mais ma question principale est de savoir combien cela peut nous coûter ?

4 « J'aime »

Cela est en ligne sur l’un de mes forums depuis quelques jours maintenant. C’est actif dans presque toutes les catégories publiques.

Il est difficile de répondre car je ne sais pas à quel point votre forum est actif.

Ma suggestion est d’essayer dans une catégorie et de voir comment vous vous en sortez.

Il y a un tableau de bord décent.

Après avoir développé deux plugins basés sur GPT3 (le modèle le plus cher) et mis en ligne sur un site à la fin du mois dernier, le mien ressemble à ceci pour février :

Donc probablement moins que vos coûts d’email.

10 « J'aime »

Oh, cela pourrait être bon pour développer nos sujets de glossaire.

Cela devrait fonctionner en espagnol ?

3 « J'aime »

Je n’en ai aucune idée, vous devrez peut-être modifier l’invite dans les paramètres. Mais essayez !

(ceci devrait être une chaîne localisée, je vais bientôt la changer)

4 « J'aime »

Merci @merefield - cela ressemble à un excellent plugin !

Je l’ai activé et entré ma clé API, activé les catégories, etc., mais je n’ai encore vu aucun résumé. Y a-t-il un moyen de surveiller sa progression sur mon forum Discourse ? Je ne vois rien dans les journaux ou sidekiq (bien que je n’aie pas encore regardé en profondeur).

3 « J'aime »

Salut Chris, il réagit aux nouveaux articles. S’ils respectent les seuils et correspondent aux critères de localisation de la catégorie, il créera un résumé.

3 « J'aime »

Je vois, merci pour ces précisions @merefield

2 « J'aime »

Salut,

Ma reconstruction échoue lorsque j’active ce plugin de résumé. Je ne sais pas si cela a quelque chose à voir avec ma configuration sous-jacente ou des conflits de plugins. J’attache quelques détails au cas où cela serait utile.

Commenter le plugin ai-topic-summary résout le problème et la construction réussit.

Merci beaucoup pour vos conseils.

I, [2023-03-12T17:24:25.390052 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-03-12T17:24:31.668769 #1]  INFO -- : discourse-ai-topic-summary est déjà à la dernière version compatible
discourse-assign est déjà à la dernière version compatible
discourse-chat-integration est déjà à la dernière version compatible
discourse-chatbot est déjà à la dernière version compatible
discourse-checklist est déjà à la dernière version compatible
discourse-solved est déjà à la dernière version compatible
docker_manager est déjà à la dernière version compatible

I, [2023-03-12T17:24:31.677801 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::LoadError: impossible d'activer ruby-openai-3.4.0, déjà activé ruby-openai-3.3.0
/var/www/discourse/lib/plugin_gem.rb:26:in `load'
/var/www/discourse/lib/plugin/instance.rb:796:in `gem'
/var/www/discourse/plugins/discourse-chatbot/plugin.rb:9:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:693:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:693:in `activate!'
/var/www/discourse/lib/discourse.rb:352:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:349:in `each'
/var/www/discourse/lib/discourse.rb:349:in `activate_plugins!'
/var/www/discourse/config/application.rb:216:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:216:in `<class:Application>'
/var/www/discourse/config/application.rb:75:in `<module:Discourse>'
/var/www/discourse/config/application.rb:74:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
(Voir la trace complète en exécutant la tâche avec --trace)
I, [2023-03-12T17:24:38.020166 #1]  INFO -- : gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.3.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.3.0
1 gem installed
gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
When you HTTParty, you must party hard!
Successfully installed httparty-0.21.0
1 gem installed
gem install ruby-openai -v 3.4.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Note if upgrading: The `::Ruby::OpenAI` module has been removed and all classes have been moved under the top level `::OpenAI` module. To upgrade, change `require 'ruby/openai'` to `require 'openai'` and change all references to `Ruby::OpenAI` to `OpenAI`.
Successfully installed ruby-openai-3.4.0
1 gem installed

I, [2023-03-12T17:24:38.021523 #1]  INFO -- : Terminating async processes
I, [2023-03-12T17:24:38.022106 #1]  INFO -- : Sending INT to HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 41
2023-03-12 17:24:38.022 UTC [41] LOG:  received fast shutdown request
I, [2023-03-12T17:24:38.022874 #1]  INFO -- : Sending TERM to exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 102
102:signal-handler (1678641878) Received SIGTERM scheduling shutdown...
2023-03-12 17:24:38.035 UTC [41] LOG:  aborting any active transactions
2023-03-12 17:24:38.046 UTC [41] LOG:  background worker "logical replication launcher" (PID 50) exited with exit code 1
2023-03-12 17:24:38.049 UTC [45] LOG:  shutting down
102:M 12 Mar 2023 17:24:38.053 # User requested shutdown...
102:M 12 Mar 2023 17:24:38.054 * Saving the final RDB snapshot before exiting.
102:M 12 Mar 2023 17:24:38.120 * DB saved on disk
102:M 12 Mar 2023 17:24:38.122 # Redis is now ready to exit, bye bye...
2023-03-12 17:24:38.153 UTC [41] LOG:  database system is shut down

FAILED
--------------------
Pups::ExecError: cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate' failed with return #<Process::Status: pid 1043 exit 1>
Location of failure: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
exec failed with the params {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
bootstrap failed with exit code 1
3 « J'aime »

Oups, désolé. C’est un conflit entre mes deux plugins IA. Je vais résoudre le problème et revenir ! :sweat_smile: Mes excuses !

5 « J'aime »

Essayez ceci : FIX: conflict with chatbot · merefield/discourse-ai-topic-summary@0067eaf · GitHub

5 « J'aime »

Merci beaucoup de votre réponse rapide. J’essaierai cela demain. J’ai hâte de voir ce plugin en action !

3 « J'aime »

Mise à jour rapide : j’ai eu mon premier vrai résumé déclenché et il a fait un travail assez raisonnable. @merefield Je pense que tu as réussi ce plugin :-). Je pense en fait que mettre ChatGPT au travail comme ça a un bien meilleur potentiel futur que de simplement l’ajouter à un fil de discussion.

Voici le résumé qui a été généré et qui s’est placé en haut du sujet, il fait un excellent travail pour encourager les autres à lire - ou pas.

J’ai eu une erreur (erreur 500) en publiant une mise à jour qui aurait déclenché le résumé. C’était parce que j’avais essayé d’utiliser gpt-3.5-turbo dans les paramètres. Peut-être que s’il y a une erreur d’API ChatGPT, il serait préférable de permettre la soumission du message plutôt que l’utilisateur obtienne une erreur 500 sans savoir quoi faire.

Dans les journaux, il était clair ce que j’avais mal fait

StandardError (Ceci est un modèle de chat et n’est pas pris en charge dans le point de terminaison v1/completions. Vouliez-vous utiliser v1/chat/completions ?)

Évolutions potentielles :

  • Permettre au propriétaire du sujet / administrateur de supprimer le résumé s’il n’est pas pertinent / approprié ?
  • Peut-être un endroit pour voir tous les résumés dans une catégorie / globalement

Autre que cela, j’ai hâte de voir comment cela évolue. Merci beaucoup pour ce que vous avez fait jusqu’à présent. Mon site est très petit avec seulement quelques utilisateurs, mais je peux vraiment voir son potentiel.

4 « J'aime »

Excellent retour, merci. Ce sont de bonnes idées.

Oui, un bouton administrateur/auteur serait bien agréable. Je vais l’ajouter à la feuille de route.

Bien !

Je me demande si la liste « l’endroit pour voir les résumés » n’est pas en fait un extrait alternatif sur la liste des sujets ?

Je vais l’ajouter à la feuille de route.

Oui, je devrais convertir cela en une liste déroulante comme je l’ai fait avec Chatbot. Bien essayé cependant :wink:

GPT-4 arrive d’ailleurs, ce qui améliorera considérablement les résumés et gérera des sujets beaucoup plus longs.

6 « J'aime »

Pouvez-vous me dire si le plugin prend actuellement en charge ChatGPT 4 et l’API de l’application POE (plateforme de chat IA développée par Quora) ?

3 « J'aime »

Lol, laisse-moi une chance ! :sweat_smile: afaia, il n’a été annoncé qu’hier ?

Très peu de développeurs ont eu accès à l’API jusqu’à présent. Il y a une liste d’attente. Donc, les utilisateurs du plugin ne pourront probablement pas se connecter de toute façon.

(As-tu remarqué le titre du sujet, d’ailleurs ?)

Non et pas de plans pour le moment. Quel serait l’avantage ? Est-il connu pour exceller dans la résumé ?

2 « J'aime »

^^
désolé d’avoir été peu clair ^^ je voulais juste savoir si vous étiez intéressé par leur intégration à l’avenir ? Je suis l’actualité autour de GPT 04 et c’est surprenant et spécial pour nous, la communauté vietnamienne.

3 « J'aime »

Merci de votre intérêt. En ce qui concerne la prise en charge de GPT-4, permettez-moi de répondre ainsi :

Hell Yeah Dcuniverse GIF by DC

Je vais probablement l’ajouter d’abord à Chatbot, mais je m’occuperai certainement du résumé de sujet IA peu de temps après.

J’attends l’e-mail d’OpenAI… (et ensuite un peu de temps libre !)

5 « J'aime »

En fait, j’ai pensé à une solution légèrement plus simple pour ne pas encombrer l’interface utilisateur :

Que diriez-vous de simplement donner des paramètres pour le « poids du vote » pour l’administrateur et l’auteur ?

Ainsi, vous pouvez définir le poids du vote de l’auteur à 3 et si le seuil est de 3, cela entraîne la génération d’un nouveau résumé.

L’inconvénient des deux solutions (bouton ou pondération correspondant au seuil) est que l’auteur pourrait simplement spammer pour de nouveaux résumés, ce qui vous coûterait cher en appels API.

Je suggère donc que le vote de l’auteur ait un poids juste en dessous du seuil (mais supérieur à celui d’un utilisateur normal) et celui de l’administrateur au seuil ?

Nous n’aurons alors pas à modifier l’interface utilisateur et nous intégrerons cela dans la logique et les paramètres du backend.

Les votes négatifs de l’administrateur créeront toujours un nouveau résumé et réinitialiseront le décompte.

Qu’en pensez-vous @JamesPick ?

4 « J'aime »

Je suis d’accord avec votre préoccupation concernant le spam de nouveaux résumés.
Je pense que le problème vient moins du fait que l’IA fournisse un mauvais résumé que du fait que le sujet ne se prête pas à un bon résumé. Peut-être que le sujet a perdu son orientation ou est devenu plus une discussion et que les messages clés se perdent de ce qui est envoyé à ChatGPT.

En fin de compte, lorsque l’administrateur / le propriétaire du sujet voit clairement que le résumé ne produira rien de significatif pour le sujet, il peut l’annuler.

Je suppose qu’avec le temps, des fonctionnalités pourraient être ajoutées pour sélectionner les messages spécifiques qui pourraient être choisis pour être envoyés à l’API pour le résumé.

Je pensais à cela pour quelque chose comme ce fil de discussion. Vous pourriez marquer votre premier message comme celui qui sera toujours inclus dans un résumé ? Et ensuite, peut-être en ajouter quelques autres qui conviennent le mieux à un résumé.

Vous pourriez même avoir une option “générer un résumé” où même lorsqu’un sujet n’a qu’un seul message, un résumé peut être généré. Cela correspond bien à votre commentaire précédent

4 « J'aime »