Discourse AI – Analyse des sentiments

:bookmark: Ce guide explique comment configurer la classification des sentiments et des émotions dans Discourse AI et comment utiliser les rapports pour explorer les publications de votre communauté.

:person_raising_hand: Niveau d’utilisateur requis : Administrateur pour la configuration ; administrateur ou modérateur pour consulter les rapports.

La classification des sentiments et des émotions vous permet d’explorer les tendances dans les discussions de votre communauté :

  • Le sentiment classe les publications comme positives, neutres ou négatives.
  • L’émotion attribue des scores sur 28 étiquettes, incluant la gratitude, la curiosité, la colère et la tristesse.

Ce sont des fonctionnalités distinctes. Vous pouvez activer l’une, l’autre ou les deux, et choisir un backend de classification différent pour chacune. Les rapports comptent le nombre de publications classées, pas les personnes uniques ni les types de personnalité. Utilisez-les pour trouver des discussions intéressantes à lire, et non comme substitut à la compréhension de leur contexte.

Avant de commencer

Vous devez activer Discourse AI via discourse_ai_enabled et configurer un backend de classification.

Hébergé par Discourse ? Votre site dispose peut-être déjà d’endpoints de classification dédiés provisionnés. Vérifiez la configuration existante avant de la modifier. Contactez team@discourse.org si vous avez besoin d’aide concernant la disponibilité, la configuration des endpoints ou les limites de traitement historique.

Auto-hébergé ? Configurez un endpoint dédié compatible, un agent IA avec un modèle de langage, ou un modèle de décision. L’activation de la fonctionnalité ne fournit pas à elle seule un service d’inférence.

Examinez la politique de confidentialité, les règles de rétention et les coûts de votre fournisseur avant d’activer le traitement automatique. La classification envoie le texte des publications au backend sélectionné. Les captures d’écran ci-dessous utilisent des publications fictives sur un site de test et un modèle de décision ; elles ne recommandent pas ce fournisseur pour du contenu communautaire privé.

Configurer le sentiment et les émotions

  1. Ouvrez Admin → Plugins → AI → Features.
  2. Ouvrez « Sentiment and emotion » (Sentiment et émotion).
  3. Sous « Sentiment », sélectionnez « Enabled » (Activé) si vous souhaitez la classification positive, neutre et négative. Cela contrôle ai_sentiment_enabled.
  4. Choisissez son « Backend » et configurez l’endpoint, l’agent ou le modèle correspondant comme décrit ci-dessous.
  5. Sous « Emotion », sélectionnez « Enabled » (Activé) si vous souhaitez la classification des émotions. Cela contrôle ai_sentiment_emotion_enabled.
  6. Choisissez son backend et configurez-le indépendamment.
  7. Définissez les limites de traitement en arrière-plan décrites dans la section suivante.
  8. Cliquez sur « Submit » (Soumettre) et vérifiez que vos sélections ont été enregistrées.

Cet exemple utilise un modèle de décision pour les deux fonctionnalités. « Posts per hour » (Publications par heure) est volontairement réglé sur 0 pour suspendre l’analyse automatique lors des tests. Utilisez une valeur positive pour traiter automatiquement les nouvelles publications et l’historique.

Utiliser des endpoints de classification dédiés

Choisissez « Dedicated classification endpoint » (Endpoint de classification dédié) pour chaque fonctionnalité que vous souhaitez exécuter avec un modèle dédié. Suivez « Configure dedicated classification endpoints » (Configurer les endpoints de classification dédiés) pour accéder au paramètre ai_sentiment_model_configs.

Les modèles dédiés de référence sont :

Fonctionnalité Modèle
Sentiment cardiffnlp/twitter-roberta-base-sentiment-latest
Émotion SamLowe/roberta-base-go_emotions

Chaque entrée de configuration identifie son classification_type (sentiment ou emotion), model_name, endpoint et api_key. Fournissez une entrée distincte pour chaque classifieur dédié utilisé. Gardez les identifiants privés ; ne les incluez pas dans les posts d’assistance ou les captures d’écran.

Consultez Self-hosting sentiment and emotion for Discourse AI (Auto-hébergement du sentiment et des émotions pour Discourse AI) pour le déploiement du serveur d’inférence. Activez et sélectionnez chaque fonctionnalité séparément en utilisant les contrôles ci-dessus.

Le backend dédié attend une API de classification compatible. Copier un endpoint Anthropic, une API de chat OpenAI ou Azure Language dans ce paramètre ne le rend pas compatible. Un test de connexion réussi pour un modèle de langage ailleurs dans Discourse ne teste pas un endpoint de sentiment dédié.

Utiliser un agent IA ou un modèle de décision

Pour « LLM agent » (Agent LLM), sélectionnez un agent classifieur approprié avec un modèle de langage configuré. Discourse inclut des agents classifieurs de sentiment et d’émotions. Un agent conversationnel général n’est pas un substitut à un agent configuré pour retourner les scores d’étiquettes attendus.

Pour « Decision model » (Modèle de décision), configurez et testez d’abord un modèle de décision compatible, puis sélectionnez-le pour chaque fonctionnalité activée. Un modèle de décision ne nécessite pas de modèle de langage conversationnel séparé pour cette classification.

Les requêtes aux agents et aux modèles de décision peuvent entraîner des frais ou consommer des crédits du fournisseur. Examinez les règles de traitement des données du modèle sélectionné avant de l’assigner à une fonctionnalité traitée automatiquement.

Contrôler le traitement et la couverture historique

Une tâche planifiée vérifie les publications avec des classifications manquantes toutes les cinq minutes. Les nouvelles publications et l’historique partagent cette analyse ; les résultats ne sont pas nécessairement disponibles immédiatement après la publication. Il n’y a pas de nombre minimum de publications ou de jours avant que les données n’apparaissent : une seule publication classée avec succès peut contribuer.

Contrôle Paramètre du site Défaut Effet
Publications par heure ai_sentiment_backfill_maximum_posts_per_hour 240 Nombre approximatif de publications traitées par heure. 0 arrête l’analyse planifiée, y compris pour les nouvelles publications.
Limite d’âge des publications (jours) ai_sentiment_backfill_post_max_age_days 60 Analyser les publications créées dans cette fenêtre d’âge. 0 signifie aujourd’hui, pas un historique illimité.

Augmentez la limite d’âge pour inclure des publications plus anciennes. La tâche planifiée traite les résultats manquants au fil du temps ; sélectionner une plage de dates de rapport plus ancienne ne classe pas soi-même cet historique.

Le taux est approximatif, ce n’est pas une limite exacte de requêtes ou de dépenses. Activer les deux classifieurs peut entraîner deux requêtes par publication. Les requêtes échouées ou les refus peuvent être réessayés. Les publications modifiées sont vérifiées séparément et ne sont pas contrôlées par le taux ou les limites d’âge de l’analyse planifiée.

Les messages privés, les publications supprimées, les sujets supprimés et les types de publications non standard sont exclus de l’analyse de remplissage historique planifiée. L’exclusion des messages privés dans le scanner et les rapports ne garantit pas tous les chemins de classification : la tâche de publication modifiée n’applique pas le même filtre sur les messages privés. Tenez-en compte avant de configurer un fournisseur externe.

Explorer le sentiment par catégorie ou tag

  1. Ouvrez Admin → Reports → Sentiment analysis (Analyse du sentiment), ou visitez /admin/reports/sentiment_analysis sur votre site.
  2. Sélectionnez les dates de début et de fin.
  3. Choisissez « Category » (Catégorie) ou « Tag » (Tag) pour grouper les résultats.
  4. Utilisez le filtre de catégorie ou de tag correspondant pour affiner les résultats. Le filtrage par catégorie fournit également une option pour inclure les sous-catégories.
  5. Lisez le total de chaque groupe et sa répartition positive, négative et neutre.
  6. Cliquez sur la ligne d’un groupe pour inspecter son graphique et les publications sous-jacentes.

L’exemple contient neuf publications classées : trois positives, trois négatives et trois neutres. Les publications neutres sont incluses dans ce rapport.

Dans la vue détaillée :

  • Sélectionnez « All » (Tout), « Positive » (Positif), « Neutral » (Neutre) ou « Negative » (Négatif) pour filtrer les publications chargées.
  • Ouvrez le sujet d’une publication pour lire la discussion environnante.
  • Utilisez l’icône de lien à côté du graphique pour copier l’URL de cette vue de rapport. Les destinataires ont toujours besoin d’un accès staff.
  • Cliquez sur « Back » (Retour) pour revenir aux résultats groupés.

Les dates du rapport font référence à la création des publications, pas à l’exécution de la classification. Une publication peut contribuer à plusieurs groupes de tags si son sujet a plusieurs tags, donc additionner les totaux de tags peut compter la même publication plus d’une fois.

Lire la tendance globale du sentiment

Ouvrez le rapport « Overall sentiment » (Sentiment global) depuis Admin → Reports, ou visitez /admin/reports/overall_sentiment.

Le score est :

Nombre de publications positives − nombre de publications négatives

Un score positif ou négatif doit être supérieur à 0.6 pour que la publication soit comptée dans ce groupe. Si aucun ne dépasse le seuil, le rapport groupé traite la publication comme neutre. Le seuil est fixe ; il n’y a pas de paramètre de site pour le modifier.

Le sentiment global est un nombre net de publications, pas une probabilité moyenne ni un pourcentage de bonheur. Trois publications positives et trois publications négatives produisent un score global de 0, quel que soit le nombre de publications neutres. Inspectez la répartition groupée et les discussions sous-jacentes avant d’interpréter une tendance plate comme une absence d’opinions fortes.

Explorer les émotions

Chaque émotion a un rapport sous Admin → Reports. Par exemple, visitez /admin/reports/emotion_anger pour « Anger » (Colère) ou /admin/reports/emotion_curiosity pour « Curiosity » (Curiosité). Choisissez une plage de dates et un groupement quotidien, hebdomadaire ou mensuel pour explorer la tendance.

Un rapport d’émotion compte les publications dont le score pour cette étiquette est supérieur à 0.1. Ce seuil est également fixe. Plus d’une émotion peut se qualifier pour la même publication, donc les totaux d’émotions ne sont pas mutuellement exclusifs.

Vous pouvez également filtrer les sujets par une émotion. Visitez /filter?q=order:emotion_anger pour trouver des sujets correspondants, classés par leur nombre de publications qualifiées comme colère plutôt que par un score émotionnel moyen. Utilisez order:emotion_anger-asc pour inverser l’ordre. Sans filtre activity-after:, cet ordre compte les publications qualifiées de l’année passée. Les permissions d’accès normales à la liste des sujets s’appliquent toujours.

Étiquettes d'émotions disponibles

Admiration, amusement, anger (colère), annoyance (agacement), approval (approbation), caring (bienveillance), confusion, curiosity (curiosité), desire (désir), disappointment (déception), disapproval (désapprobation), disgust (dégoût), embarrassment (embarras), excitement (excitation), fear (peur), gratitude (gratitude), grief (chagrin), joy (joie), love (amour), nervousness (nervosité), neutral (neutre), optimism (optimisme), pride (fierté), realization (réalisation), relief (soulagement), remorse (remords), sadness (tristesse) et surprise (surprise).

Comprendre les limites

  • La classification dépend du modèle. Le sarcasme, les citations, le langage spécialisé et les discussions multilingues peuvent être mal interprétés. La couverture linguistique et la précision dépendent du modèle choisi. Les scores de différents backends ne sont pas nécessairement calibrés de la même manière.
  • Les rapports ne couvrent que les résultats stockés. Une fonctionnalité activée sans backend fonctionnel, un traitement suspendu ou une couverture historique insuffisante peuvent produire des rapports vides ou incomplets.
  • Les classifications existantes sont réutilisées. Modifier une publication classée ne remplace pas automatiquement ses résultats. Changer l’agent sélectionné ou le modèle de décision au sein du même backend ne reclassifie pas non plus les résultats existants.
  • Changer de backend change la source des résultats du rapport. Les anciens résultats ne sont pas convertis vers le backend sélectionné. Les rapports peuvent apparaître vides pendant que les classifications manquantes sont traitées.
  • Les rapports excluent les messages privés. Cette exclusion de rapport est distincte de la limitation de traitement des données décrite ci-dessus.

Dépanner les résultats manquants ou inattendus

Problème À vérifier
Aucun résultat après l’activation Confirmez que la fonctionnalité concernée est activée, que son backend est configuré, que « Posts per hour » (Publications par heure) est positif et que les tâches de fond s’exécutent. Laissez le temps nécessaire pour l’analyse de cinq minutes et la file d’attente de traitement.
Le sentiment fonctionne mais les émotions sont vides Activez et configurez « Emotion » (Émotion) séparément. Un endpoint dédié de sentiment seul ne fournit pas les classifications d’émotions.
Les dates plus anciennes n’ont pas de résultats Augmentez la limite d’âge des publications, laissez le temps de traitement nécessaire et vérifiez que la plage du rapport inclut les dates de création des publications.
L’endpoint dédié renvoie une erreur Vérifiez son URL, ses identifiants, son modèle et son format de réponse. L’adaptateur attend un tableau plat d’étiquettes et de scores, avec des étiquettes de sentiment telles que positive, neutral et negative, pas des réponses de chat arbitraires ou des étiquettes de type LABEL_0.
L’endpoint du réseau privé est inaccessible Vérifiez la connectivité et, si nécessaire, ajoutez uniquement le nom d’hôte ou l’IP de l’endpoint d’inférence de confiance dans allowed_internal_hosts. Ne désactivez pas largement les protections contre la falsification de requêtes côté serveur (SSRF).
Les résultats ne changent pas après une modification ou la sélection d’un modèle Les résultats existants sont réutilisés. Ne supposez pas que modifier le contenu ou enregistrer un autre modèle programme une reclassification complète.
Un filtre montre moins de publications que son total Le total décrit l’ensemble du groupe, tandis que les onglets de sentiment filtrent les publications chargées. Vérifiez s’il y a d’autres résultats à charger et ouvrez les sujets originaux lors de l’investigation des écarts.

Les administrateurs peuvent examiner les enregistrements de requêtes des agents et des modèles de décision dans Admin → Plugins → AI → Logs (Journaux). Vérifiez /logs pour les erreurs de classification en arrière-plan, y compris les échecs des endpoints dédiés. Traitez le contenu des journaux comme sensible : ils peuvent contenir du texte de publications et des réponses de modèles. Supprimez les identifiants et le contenu privé avant de partager les diagnostics.

Ressources supplémentaires

10 « J'aime »

Un message a été fusionné dans un sujet existant : Problèmes avec le remplissage rétroactif des sentiments

Un message a été fusionné dans un sujet existant : Problèmes avec le remplissage rétrospectif des sentiments

Le message initial a été mis à jour avec une nouvelle vidéo présentant les fonctionnalités mises à jour de Sentiment, notamment beaucoup plus d’émotions et la compréhension des sujets/publications associés à chaque émotion.

J’ai configuré la configuration du modèle de sentiment avec un model_name, un endpoint et une api_key copiés des paramètres LLM, où cela passe le test, mais je reçois l’erreur ci-dessous dans /logs.

(Mais peut-être que je ne comprends pas correctement, car pourquoi le sentiment n’utilise-t-il pas l’un des LLM configurés ?)

Utilisation de claude-3-5-sonnet.


{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_with'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:78:in `block (4 levels) in bulk_classify!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1593:in `evaluate_to'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1776:in `block in on_resolvable'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:359:in `run_task'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:350:in `block (3 levels) in create_worker'

<internal:kernel>:187:in `loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
Statut : 400

{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_wit...

Le module de sentiment n’utilise pas de LLM généraux, mais des modèles spécifiquement affinés pour la classification des sentiments. Si vous souhaitez exécuter ces modèles vous-même, la documentation se trouve ici : Auto-hébergement du sentiment et de l’émotion pour DiscourseAI

3 « J'aime »

@Falco Je viens de remarquer que la sentiment analysis a cessé de fonctionner à partir de janvier 2025. Je pense qu’il s’agit de ce nouveau paramètre ai_sentiment_model qui, comme l’explique le lien ci-dessus, est destiné à faire fonctionner votre propre modèle/image de sentiment. J’ai remarqué qu’après la mise à jour de Discourse, la configuration ai_sentiment_model_configs est toute vide (est-ce que cela devrait être vide ?).Lorsque j’essaie d’exécuter un rake de backfill, cela me donne une erreur :

rake ai:sentiment:backfill
rake aborté !
ActiveRecord::StatementInvalid : PG::SyntaxError : ERREUR : erreur de syntaxe près de ")" (ActiveRecord::StatementInvalid)
LIGNE 1 : ...e_upload_id", "posts"."outbound_message_id" FROM () as posts..

Le plugin utilisait par défaut un serveur situé à DigitalOcean que j’avais mis en place pour faciliter les tests.

J’ai depuis réinitialisé les paramètres par défaut du plugin et les personnes qui souhaitent une classification par IA doivent exécuter des serveurs en suivant la documentation ici sur Meta.

En effet, mais nous supportions ce coût à des fins de test. Il n’est pas viable d’offrir cela à tous les auto-hébergeurs.

Il convient de mentionner que nous proposons ce service de classification sur des serveurs accélérés par GPU dans le cadre de notre service d’hébergement.

2 « J'aime »

Problèmes d’analyse de sentiment avec Discourse AI : Format du modèle Hugging Face et échec du point de terminaison Azure


Bonjour Communauté Discourse et Développeurs,

Je rencontre des problèmes importants lors de la configuration et de l’utilisation de la fonctionnalité d’analyse de sentiment dans le plugin Discourse AI sur mon forum. Il semble y avoir deux problèmes distincts qui empêchent son bon fonctionnement.


Problème 1 : Inadéquation du format de réponse du modèle Hugging Face

J’ai configuré le modèle cardiffnlp/twitter-roberta-base-sentiment de Hugging Face pour l’analyse de sentiment. Bien que ma clé API soit valide et que je puisse appeler l’API avec succès depuis mon instance Discourse en utilisant curl, le plugin Discourse AI semble analyser la réponse de manière incorrecte en raison d’un changement dans le format de sortie du modèle Hugging Face.

Ma commande curl (confirmant la clé API valide et le nouveau format) :

Bashcurl -X POST https://api-inference.huggingface.co/models/cardiffnlp/twitter-roberta-base-sentiment \ -H "Authorization: Bearer hf_xxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d "{\"inputs\": \"I love Discourse!\"}"

Sortie de curl (affichant le nouveau format de tableau imbriqué) :

[[{\"label\":\"LABEL_2\",\"score\":0.9891520738601685},{\"label\":\"LABEL_1\",\"score\":0.009014752693474293},{\"label\":\"LABEL_0\",\"score\":0.0018332178005948663}]]

Problème : Le modèle twitter-roberta-base-sentiment renvoyait auparavant un seul tableau de hachages label-score : [{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. Cependant, il renvoie maintenant un tableau imbriqué : [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]].
La logique d’analyse codée en dur du plugin Discourse AI (spécifiquement, classification[\"label\"][/\\d+/].to_i comme indiqué par la trace d’appels) ne tient pas compte de cette couche de tableau externe. Cela entraîne une TypeError lorsqu’il tente d’accéder à un Symbole comme un Entier.

Message d’erreur (provenant de l’exception de tâche) :

conversion implicite de Symbol en Integer impossible (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in block in transform_result' /var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in each’
/var/www/discourse/plugin…`

Trace d’appels complète pour le problème Hugging Face :

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `raise'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `wait_until_resolved!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:998:in `value!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:93:in `bulk_classify!'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/sentiment_backfill.rb:27:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/app/jobs/base.rb:379:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'
internal:kernel:187:in `loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
conversion implicite de Symbol en Integer impossible (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `block in transform_result'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `each'
/var/www/discourse/plugin...

Problème 2 : La configuration du modèle Microsoft Azure conduit à une erreur Hugging Face

Lorsque j’ai tenté de passer au modèle Microsoft Text Analytics dans les paramètres de Discourse AI, j’ai rencontré une erreur 404 Resource not found, et de manière surprenante, la trace d’appels pointe toujours vers hugging_face_text_embeddings.rb.

Message d’erreur (provenant de l’exception de tâche) :

Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)

Extrait de trace d’appels pertinent (pointant vers Hugging Face malgré la sélection du modèle Microsoft) :

/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:76:in `do_request!'
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:51:in `classify_by_sentiment!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:156:in `request_with'

Observation : Cela indique que même lorsque je sélectionne et configure le point de terminaison et la clé API du modèle Microsoft, le plugin Discourse AI semble être codé en dur ou acheminer incorrectement les requêtes d’analyse de sentiment via une logique ou des points de terminaison spécifiques à Hugging Face. Cela empêche l’utilisation du modèle Microsoft.


Captures d’écran de la configuration :

J’ai joint une capture d’écran de mes paramètres Discourse AI pour montrer la configuration :

  • Configuration détaillée des modèles d’IA pour le sentiment (montrant les modèles Hugging Face et Microsoft) - J’ai testé avec uniquement la configuration du modèle Hugging Face ou uniquement celle du modèle Microsoft avec le même résultat

Ces problèmes rendent la fonctionnalité d’analyse de sentiment pratiquement inutilisable. Il semble que le plugin nécessite une mise à jour pour gérer le nouveau format de réponse Hugging Face et pour acheminer correctement les requêtes lorsque différents fournisseurs de sentiment sont configurés.

Toute aide ou orientation sur ces problèmes serait grandement appréciée.

Merci !

2 « J'aime »

Je suis curieux de savoir si le reporting de sentiments fonctionne pour d’autres, ou si j’ai mal configuré quelque chose. J’aimerais savoir ce que je dois vérifier ou configurer d’autre pour activer le reporting de sentiments, car je rencontre toujours le même problème.

1 « J'aime »

Nous essayons d’utiliser cette fonctionnalité avec Azure AI Language (depuis notre instance Discourse auto-hébergée) - car nous utilisons déjà notre abonnement Azure pour intégrer GPT-4.5 à Discourse (pour la fonctionnalité de résumé et de chatbot) :

…mais nous n’obtenons aucune donnée dans le tableau de bord des sentiments, et nous pouvons voir ces erreurs dans les journaux :

Discourse AI : Erreurs lors de la classification en masse : Échec de la classification de 208 messages (exemples d'ID : 2256, 909, 2270, 2260, 2797) : JSON::ParserError : Une chaîne vide n'est pas une chaîne JSON valide.

La trace montre que Discourse pourrait essayer d’utiliser HuggingFace - sont-ce les seuls modèles pris en charge pour le moment ?

Merci,

N

1 « J'aime »

Alors, la seule façon d’utiliser cette fonctionnalité est de configurer vos propres instances des modèles (qui nécessitent des instances GPU gourmandes en ressources qui seraient coûteuses) ? Cette fonctionnalité semble très utile, mais il semble qu’elle me coûterait plus cher à mettre en place que mon hébergement Discourse actuel.

Oui, les modèles pris en charge sont ceux listés dans le premier message.

Nous ajouterons éventuellement la prise en charge de la classification à l’aide de LLM pour les personnes dont le coût n’est pas un problème.

Eh bien, toute la fonctionnalité est construite autour de la classification des messages à l’aide de modèles ML, donc oui, vous avez besoin d’un endroit pour les exécuter.

Et comme Discourse peut fonctionner sur le VPS le moins cher du marché, l’exécution de modèles ML est en effet plus coûteuse. Si vous voulez avoir la fonctionnalité de la manière la moins chère possible, il est possible de l’exécuter sur un serveur avec seulement une poignée de cœurs de processeur, tant que vous avez suffisamment de RAM pour charger les modèles.

1 « J'aime »

Désolé si cette question a déjà été posée, mais je n’ai pas réussi à trouver une référence à l’endroit exact où le score seuil peut être configuré :sweat_smile:

1 « J'aime »

Malheureusement, le score seuil n’est pas configurable par les utilisateurs ou les administrateurs. C’est une valeur spécifique définie dans la base de code.

1 « J'aime »