Discourse AI – Sentiment

:bookmark: Dieser Leitfaden erklärt, wie Sie die Stimmungs- und Emotionsklassifizierung in Discourse AI konfigurieren und die Berichte zur Untersuchung der Beiträge Ihrer Community nutzen.

:person_raising_hand: Erforderliche Benutzerstufe: Administrator für die Konfiguration; Administrator oder Moderator zur Ansicht der Berichte.

Die Stimmungs- und Emotionsklassifizierung hilft Ihnen, Muster in den Diskussionen Ihrer Community zu erkennen:

  • Stimmung klassifiziert Beiträge als positiv, neutral oder negativ.
  • Emotion weist Punkte für 28 Labels zu, darunter Dankbarkeit, Neugier, Wut und Traurigkeit.

Dies sind separate Funktionen. Sie können eine oder beide aktivieren und für jede ein unterschiedliches Klassifizierungs-Backend auswählen. Die Berichte zählen klassifizierte Beiträge, nicht eindeutige Personen oder Persönlichkeitstypen. Nutzen Sie sie, um lesenswerte Diskussionen zu finden, aber nicht als Ersatz für das Verständnis des Kontexts.

Bevor Sie beginnen

Sie müssen Discourse AI über discourse_ai_enabled aktivieren und ein konfigurierbares Klassifizierungs-Backend einrichten.

Gehostet von Discourse? Ihre Website verfügt möglicherweise bereits über dedizierte Klassifizierungs-Endpunkte. Prüfen Sie die vorhandene Konfiguration, bevor Sie sie ändern. Kontaktieren Sie team@discourse.org, wenn Sie Hilfe bei der Verfügbarkeit, der Endpunkt-Konfiguration oder beim Nachfüllen (Backfill) von Grenzen benötigen.

Selbst gehostet? Konfigurieren Sie einen kompatiblen dedizierten Endpunkt, einen KI-Agenten mit einem Sprachmodell oder ein Entscheidungsmodell. Die bloße Aktivierung der Funktion stellt keinen Inferenzdienst bereit.

Überprüfen Sie die Datenschutzrichtlinie, die Aufbewahrungsregeln und die Kosten Ihres Anbieters, bevor Sie die automatische Verarbeitung aktivieren. Die Klassifizierung sendet den Beitragstext an das ausgewählte Backend. Die folgenden Screenshots verwenden erfundene Beiträge auf einer Testwebsite und ein Entscheidungsmodell; sie empfehlen diesen Anbieter nicht für Inhalte privater Communities.

Stimmung und Emotion konfigurieren

  1. Öffnen Sie Admin → Plugins → AI → Features.
  2. Öffnen Sie „Stimmung und Emotion“.
  3. Wählen Sie unter „Stimmung“ „Aktiviert“, wenn Sie eine Klassifizierung in positiv, neutral und negativ wünschen. Dies steuert ai_sentiment_enabled.
  4. Wählen Sie das „Backend“ aus und konfigurieren Sie den entsprechenden Endpunkt, Agenten oder das Modell wie unten beschrieben.
  5. Wählen Sie unter „Emotion“ „Aktiviert“, wenn Sie eine Emotionsklassifizierung wünschen. Dies steuert ai_sentiment_emotion_enabled.
  6. Wählen Sie das Backend aus und konfigurieren Sie es unabhängig.
  7. Legen Sie die in der nächsten Section beschriebenen Limits für die Hintergrundverarbeitung fest.
  8. Klicken Sie auf „Senden“ und überprüfen Sie, ob Ihre Auswahl gespeichert wurde.

Dieses Beispiel verwendet ein Entscheidungsmodell für beide Funktionen. „Beiträge pro Stunde“ ist bewusst auf 0 gesetzt, um die automatische Scan während des Tests zu pausieren. Verwenden Sie einen positiven Wert, um neue und historische Beiträge automatisch zu verarbeiten.

Dedizierte Klassifizierungs-Endpunkte verwenden

Wählen Sie „Dedizierter Klassifizierungs-Endpunkt“ für jede Funktion, die Sie mit einem dedizierten Modell ausführen möchten. Folgen Sie „Dedizierte Klassifizierungs-Endpunkte konfigurieren“ bis zur Einstellung ai_sentiment_model_configs.

Die referenzierten dedizierten Modelle sind:

Funktion Modell
Stimmung cardiffnlp/twitter-roberta-base-sentiment-latest
Emotion SamLowe/roberta-base-go_emotions

Jeder Konfigurationseintrag identifiziert seinen classification_type (sentiment oder emotion), model_name, endpoint und api_key. Geben Sie einen separaten Eintrag für jeden dedizierten Klassifizierer an, den Sie verwenden. Halten Sie Zugangsdaten vertraulich; geben Sie sie nicht in Support-Beiträgen oder Screenshots an.

Siehe Selbsthosting von Stimmung und Emotion für Discourse AI für die Bereitstellung des Inferenz-Servers. Aktivieren und wählen Sie jede Funktion separat über die oben genannten Steuerelemente.

Das dedizierte Backend erwartet eine kompatible Klassifizierungs-API. Das Kopieren eines Anthropic-, OpenAI-Chat- oder Azure-Language-Endpunkts in diese Einstellung macht ihn nicht kompatibel. Ein erfolgreicher Verbindungstest für ein Sprachmodell an anderer Stelle in Discourse testet keinen dedizierten Stimmungs-Endpunkt.

KI-Agent oder Entscheidungsmodell verwenden

Wählen Sie für „LLM-Agent“ einen geeigneten Klassifizierer-Agenten mit einem konfigurierten Sprachmodell. Discourse enthält Stimmungs- und Emotionsklassifizierer-Agenten. Ein allgemeiner Gesprächsagent ist kein Ersatz für einen Agenten, der so konfiguriert ist, dass er die erwarteten Label-Punkte zurückgibt.

Wählen Sie für „Entscheidungsmodell“ zunächst ein kompatibles Entscheidungsmodell konfigurieren und testen, und wählen Sie es dann für jede aktivierte Funktion aus. Ein Entscheidungsmodell benötigt für diese Klassifizierung kein separates Gesprächssprachmodell.

Agenten- und Entscheidungsmodell-Anfragen können Anbietergebühren verursachen oder Credits verbrauchen. Überprüfen Sie die Datennutzungsregeln des ausgewählten Modells, bevor Sie es einer automatisch verarbeiteten Funktion zuweisen.

Verarbeitung und historische Abdeckung steuern

Ein geplanter Job prüft alle fünf Minuten auf Beiträge mit fehlenden Klassifizierungen. Neue und historische Beiträge teilen sich diesen Scan; Ergebnisse sind möglicherweise nicht sofort nach dem Posten verfügbar. Es gibt keine Mindestanzahl an Beiträgen oder Tagen, bevor Daten erscheinen können: Ein erfolgreich klassifizierter Beitrag kann bereits beitragen.

Steuerelement Website-Einstellung Standard Effekt
Beiträge pro Stunde ai_sentiment_backfill_maximum_posts_per_hour 240 Ungefähre Anzahl der pro Stunde verarbeiteten Beiträge. 0 stoppt den geplanten Scan, einschließlich neuer Beiträge.
Höchstalter der Beiträge in Tagen ai_sentiment_backfill_post_max_age_days 60 Scannen Sie Beiträge, die innerhalb dieses Altersfensters erstellt wurden. 0 bedeutet heute, nicht unbegrenzte Historie.

Erhöhen Sie das Alterslimit, um ältere Beiträge einzubeziehen. Der geplante Job verarbeitet fehlende Ergebnisse im Laufe der Zeit; die Auswahl eines älteren Datumsbereichs im Bericht klassifiziert diese Historie nicht automatisch.

Die Rate ist ungefähr, keine exakte Anfrage- oder Ausgabenobergrenze. Die Aktivierung beider Klassifizierer kann zwei Anfragen pro Beitrag verursachen. Fehlgeschlagene Anfragen oder Ablehnungen können erneut versucht werden. Bearbeitete Beiträge werden separat geprüft und werden nicht durch die Rate oder Altersgrenzen des geplanten Scans kontrolliert.

Private Nachrichten, gelöschte Beiträge, gelöschte Themen und Nicht-Standard-Beitragstypen sind vom geplanten Backfill-Scan ausgeschlossen. Der Ausschluss privater Nachrichten im Scanner und in den Berichten ist keine Garantie für alle Klassifizierungspfade: Der Job für bearbeitete Beiträge wendet denselben PM-Filter nicht an. Berücksichtigen Sie dies, bevor Sie einen externen Anbieter konfigurieren.

Stimmung nach Kategorie oder Tag untersuchen

  1. Öffnen Sie Admin → Berichte → Stimmungsanalyse, oder besuchen Sie /admin/reports/sentiment_analysis auf Ihrer Website.
  2. Wählen Sie Start- und Enddatum.
  3. Wählen Sie „Kategorie“ oder „Tag“, um die Ergebnisse zu gruppieren.
  4. Verwenden Sie den entsprechenden Kategorie- oder Tag-Filter, um die Ergebnisse einzugrenzen. Die Kategoriefilterung bietet auch die Option, Unterkategorien einzubeziehen.
  5. Lesen Sie die Gesamtsumme jeder Gruppe und ihre positive, negative und neutrale Aufschlüsselung.
  6. Klicken Sie auf eine Zeile einer Gruppe, um ihr Diagramm und die zugrunde liegenden Beiträge zu inspizieren.

Das Beispiel enthält neun klassifizierte Beiträge: drei positive, drei negative und drei neutrale. Neutrale Beiträge sind in diesem Bericht enthalten.

In der Detailansicht:

  • Wählen Sie „Alle“, „Positiv“, „Neutral“ oder „Negativ“, um die geladenen Beiträge zu filtern.
  • Öffnen Sie das Thema eines Beitrags, um die umgebende Diskussion zu lesen.
  • Verwenden Sie das Link-Symbol neben dem Diagramm, um die URL für diese Berichtsansicht zu kopieren. Empfänger benötigen weiterhin Staff-Zugriff.
  • Klicken Sie auf „Zurück“, um zu den gruppierten Ergebnissen zurückzukehren.

Berichtsdaten beziehen sich darauf, wann Beiträge erstellt wurden, nicht wann die Klassifizierung lief. Ein Beitrag kann zu mehreren Tag-Gruppen beitragen, wenn sein Thema mehrere Tags hat, daher können Tag-Gesamtwerten denselben Beitrag mehr als einmal zählen.

Den allgemeinen Stimmungstrend lesen

Öffnen Sie den Bericht „Allgemeine Stimmung“ aus Admin → Berichte, oder besuchen Sie /admin/reports/overall_sentiment.

Der Score ist:

Anzahl positiver Beiträge − Anzahl negativer Beiträge

Ein positiver oder negativer Score muss größer als 0.6 sein, damit der Beitrag in dieser Gruppe zählt. Wenn weder der positive noch der negative Score die Schwelle überschreitet, behandelt der gruppierte Bericht den Beitrag als neutral. Die Schwelle ist fest; es gibt keine Website-Einstellung, um sie zu ändern.

Die allgemeine Stimmung ist eine Netto-Beitragsanzahl, nicht eine Durchschnittswahrscheinlichkeit oder ein Glücksprozentwert. Drei positive und drei negative Beiträge ergeben einen allgemeinen Score von 0, unabhängig davon, wie viele neutrale Beiträge es gibt. Untersuchen Sie die gruppierte Aufschlüsselung und die zugrunde liegenden Diskussionen, bevor Sie einen flachen Trend als Fehlen starker Meinungen interpretieren.

Emotionen untersuchen

Jede Emotion hat einen Bericht unter Admin → Berichte. Besuchen Sie beispielsweise /admin/reports/emotion_anger für „Wut“ oder /admin/reports/emotion_curiosity für „Neugier“. Wählen Sie einen Datumsbereich sowie eine tägliche, wöchentliche oder monatliche Gruppierung, um den Trend zu untersuchen.

Ein Emotionsbericht zählt Beiträge, deren Score für dieses Label größer als 0.1 ist. Diese Schwelle ist ebenfalls fest. Mehr als eine Emotion kann für denselben Beitrag qualifiziert sein, daher sind Emotions-Gesamtwerten nicht gegenseitig ausschließend.

Sie können Themen auch nach einer Emotion filtern. Besuchen Sie /filter?q=order:emotion_anger, um passende Themen zu finden, die nach der Anzahl der qualifizierten wut-klassifizierten Beiträge statt nach einem durchschnittlichen Emotions-Score sortiert sind. Verwenden Sie order:emotion_anger-asc, um die Reihenfolge umzukehren. Ohne einen activity-after:-Filter zählt diese Sortierung qualifizierte Beiträge aus dem letzten Jahr. Die üblichen Zugriffsrechte für Themenlisten gelten weiterhin.

Verfügbare Emotions-Labels

Bewunderung, Amüsement, Wut, Ärgernis, Zustimmung, Fürsorge, Verwirrung, Neugier, Verlangen, Enttäuschung, Missbilligung, Ekel, Verlegenheit, Aufregung, Angst, Dankbarkeit, Trauer, Freude, Liebe, Nervosität, Neutral, Optimismus, Stolz, Erkenntnis, Erleichterung, Reue, Traurigkeit und Überraschung.

Einschränkungen verstehen

  • Klassifizierung ist modellabhängig. Sarkasmus, zitiertes Material, Fachsprache und mehrsprachige Diskussionen können falsch interpretiert werden. Sprachabdeckung und Genauigkeit hängen vom gewählten Modell ab. Scores von verschiedenen Backends sind nicht unbedingt gleich kalibriert.
  • Berichte decken nur gespeicherte Ergebnisse ab. Eine aktivierte Funktion ohne funktionierendes Backend, pausierte Verarbeitung oder unzureichende historische Abdeckung kann leere oder unvollständige Berichte erzeugen.
  • Vorhandene Klassifizierungen werden wiederverwendet. Das Bearbeiten eines klassifizierten Beitrags ersetzt seine Ergebnisse nicht automatisch. Auch das Ändern des ausgewählten Agenten oder Entscheidungsmodells innerhalb desselben Backends reklassifiziert vorhandene Ergebnisse nicht.
  • Backend-Änderung ändert die Quelle der Berichterstellung. Alte Ergebnisse werden nicht in das ausgewählte Backend konvertiert. Berichte können leer erscheinen, während fehlende Klassifizierungen verarbeitet werden.
  • Berichte schließen private Nachrichten aus. Dieser Berichtsausschluss ist getrennt von der oben beschriebenen Datenverarbeitungseinschränkung.

Fehlen oder unerwartete Ergebnisse beheben

Problem Was zu prüfen ist
Keine Ergebnisse nach Aktivierung Bestätigen Sie, dass die relevante Funktion aktiviert ist, ihr Backend konfiguriert ist, „Beiträge pro Stunde“ positiv ist und Hintergrund-Jobs laufen. Geben Sie dem Fünf-Minuten-Scan und der Verarbeitungswarteschlange Zeit.
Stimmung funktioniert, aber Emotion ist leer Aktivieren und konfigurieren Sie „Emotion“ separat. Ein dedizierter Endpunkt nur für Stimmung stellt keine Emotionsklassifizierungen bereit.
Ältere Daten haben keine Ergebnisse Erhöhen Sie das Beitragsalterslimit, geben Sie Verarbeitungszeit und prüfen Sie, ob der Berichtszeitraum die Erstellungsdaten der Beiträge umfasst.
Dedizierter Endpunkt gibt einen Fehler zurück Prüfen Sie URL, Zugangsdaten, Modell und Antwortformat. Der Adapter erwartet ein flaches Array aus Labels und Scores, mit Stimmungs-Labels wie positive, neutral und negative, nicht beliebige Chat-Antworten oder LABEL_0-Stil-Labels.
Endpunkt im privaten Netzwerk nicht erreichbar Prüfen Sie die Konnektivität und fügen Sie bei Bedarf nur den Hostnamen oder die IP des vertrauenswürdigen Inferenz-Endpunkts zu allowed_internal_hosts hinzu. Deaktivieren Sie Server-seitige Request-Fälschungsschutz (SSRF)-Schutzmechanismen nicht allgemein.
Ergebnisse ändern sich nicht nach einer Bearbeitung oder Modellwahl Vorhandene Ergebnisse werden wiederverwendet. Nehmen Sie nicht an, dass das Bearbeiten von Inhalten oder das Speichern eines anderen Modells eine vollständige Reklastifizierung plant.
Ein Filter zeigt weniger Beiträge als die Anzahl an Die Anzahl beschreibt die gesamte Gruppe, während Stimmungs-Tabs geladene Beiträge filtern. Prüfen Sie, ob weitere Ergebnisse geladen werden können, und öffnen Sie die Original-Themen, wenn Sie Abweichungen untersuchen.

Administratoren können Agenten- und Entscheidungsmodell-Anfragedaten unter Admin → Plugins → AI → Logs überprüfen. Prüfen Sie /logs auf Fehler bei der Hintergrundklassifizierung, einschließlich Ausfällen dedizierter Endpunkte. Betrachten Sie Log-Inhalte als vertraulich: Sie können Beitragstexte und Modellantworten enthalten. Entfernen Sie Zugangsdaten und private Inhalte, bevor Sie Diagnosen teilen.

Zusätzliche Ressourcen

10 „Gefällt mir“

Ein Beitrag wurde in ein bestehendes Thema eingefügt: Probleme mit Sentiment Backfill

Ein Beitrag wurde in ein bestehendes Thema zusammengeführt: Probleme mit Sentiment Backfill

Der OP wurde mit einem neuen Video aktualisiert, das die aktualisierten Funktionen von Sentiment zeigt, darunter deutlich mehr Emotionen und die Zuordnung von Themen/Posts zu jeder Emotion.

Ich habe die Konfiguration des Sentiment-Modells mit einem model_name, endpoint und api_key konfiguriert, die aus den LLM-Einstellungen kopiert wurden, wo es den Test besteht, aber ich erhalte die untenstehende Fehlermeldung in /logs.

(Aber vielleicht verstehe ich es nicht richtig, denn warum verwendet Sentiment nicht eines der konfigurierten LLMs?)

Verwendet 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'
Status: 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...

Das Sentiment-Modul verwendet keine allgemeinen LLMs, sondern Modelle, die speziell für die Sentiment-Klassifizierung feinabgestimmt wurden. Wenn Sie diese Modelle selbst ausführen möchten, finden Sie die Dokumentation unter Self-Hosting Sentiment and Emotion for DiscourseAI

3 „Gefällt mir“

@Falco Ich habe gerade bemerkt, dass der Sentiment seit Januar 2025 nicht mehr läuft. Ich vermute, dass es diese neue Einstellung ai_sentiment_model gibt, die, wie im obigen Link erklärt, für das eigene, dedizierte Sentiment-Modell / Bild gedacht ist. Ich habe nach einem Update von Discourse bemerkt, dass ai_sentiment_model_configs jetzt völlig leer ist (sollte das leer sein?).Wenn ich versuche, ein Backfill-Rake auszuführen, erhalte ich einen Fehler:

rake ai:sentiment:backfill
rake abgebrochen!
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR:  Syntaxfehler bei oder in der Nähe von ")" (ActiveRecord::StatementInvalid)
LINIE 1: ...e_upload_id", "posts"."outbound_message_id" VON () als posts..

Das Plugin verwendete standardmäßig einen Server in DigitalOcean, den ich zum einfacheren Testen eingerichtet hatte.

Ich habe seitdem die Standardeinstellungen des Plugins auf einen sauberen Stand zurückgesetzt, und wer KI-Klassifizierung wünscht, muss Server gemäß der Dokumentation hier auf Meta betreiben.

In der Tat, aber wir haben diese Kosten für Testzwecke getragen. Es ist nicht nachhaltig, dies für jeden Self-Hoster anzubieten.

Erwähnenswert ist, dass wir diesen Klassifizierungsdienst auf GPU-beschleunigten Servern als Teil unseres Hosting-Services anbieten.

2 „Gefällt mir“

Probleme mit der Stimmungsanalyse in Discourse AI: Hugging Face Modellformat & Azure Endpunktfehler


Hallo Discourse Community und Entwickler,

Ich stoße auf erhebliche Probleme bei der Konfiguration und Nutzung der Sentiment-Analyse-Funktion im Discourse AI Plugin auf meinem Forum. Es scheint zwei verschiedene Probleme zu geben, die verhindern, dass es korrekt funktioniert.


Problem 1: Format-Inkompatibilität der Hugging Face Modellantwort

Ich habe das Modell cardiffnlp/twitter-roberta-base-sentiment von Hugging Face für die Sentiment-Analyse konfiguriert. Während mein API-Schlüssel gültig ist und ich die API erfolgreich von meiner Discourse-Instanz mit curl aufrufen kann, scheint das Discourse AI Plugin die Antwort falsch zu parsen, da sich das Ausgabeformat des Hugging Face Modells geändert hat.

Mein curl-Befehl (bestätigt gültigen API-Schlüssel und neues Format):

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

Ausgabe von curl (zeigt das neue verschachtelte Array-Format):

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

Problem: Das Modell twitter-roberta-base-sentiment gab früher ein einzelnes Array von Label-Score-Hashes zurück: [{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. Jetzt gibt es jedoch ein verschachteltes Array zurück: [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]].
Die hartcodierte Parsing-Logik des Discourse AI Plugins (speziell classification[\"label\"][/\\d+/].to_i, wie im Backtrace angegeben) berücksichtigt diese äußere Array-Ebene nicht. Dies führt zu einem TypeError, wenn versucht wird, ein Symbol als Integer zu verwenden.

Fehlermeldung (aus Job-Ausnahme):

no implicit conversion of Symbol into Integer (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…`

Vollständiger Backtrace für das Hugging Face Problem:

/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'
no implicit conversion of Symbol into Integer (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...

Problem 2: Konfiguration des Microsoft Azure Modells führt zu Hugging Face Fehler

Als ich versuchte, zum Microsoft Text Analytics Modell in den Discourse AI Einstellungen zu wechseln, erhielt ich einen 404 Resource not found Fehler, und überraschenderweise verweist der Backtrace immer noch auf hugging_face_text_embeddings.rb.

Fehlermeldung (aus Job-Ausnahme):

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

Relevanter Backtrace-Ausschnitt (verweist auf Hugging Face trotz ausgewähltem Microsoft Modell):

/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'

Beobachtung: Dies deutet darauf hin, dass selbst wenn ich den Endpunkt und den API-Schlüssel des Microsoft Modells auswähle und konfiguriere, das Discourse AI Plugin anscheinend hartcodiert ist oder die Anfragen zur Sentiment-Analyse fälschlicherweise über Hugging Face spezifische Logik oder Endpunkte leitet. Dies verhindert, dass das Microsoft Modell überhaupt genutzt werden kann.


Konfigurations-Screenshots:

Ich habe Screenshots meiner Discourse AI Einstellungen beigefügt, um die Konfiguration zu zeigen:

  • Detaillierte Konfiguration für KI-Sentiment-Modelle (zeigt sowohl Hugging Face als auch Microsoft Modelle) - Ich habe mit nur Hugging Face oder nur Microsoft Modellkonfigurationen getestet, mit demselben Ergebnis

Diese Probleme machen die Sentiment-Analyse-Funktion praktisch unbrauchbar. Es scheint, dass das Plugin ein Update benötigt, um das neue Hugging Face Antwortformat zu verarbeiten und Anfragen korrekt zu leiten, wenn verschiedene Sentiment-Anbieter konfiguriert sind.

Jede Hilfe oder Anleitung zu diesen Problemen wäre sehr willkommen.

Vielen Dank!

2 „Gefällt mir“

Ich bin neugierig, ob die Sentiment-Berichterstattung für andere funktioniert oder ob ich etwas falsch konfiguriert habe. Ich möchte wissen, was ich noch überprüfen oder konfigurieren muss, um die Sentiment-Berichterstattung zu aktivieren, da ich immer noch dasselbe Problem habe.

1 „Gefällt mir“

Wir versuchen, diese Funktion mit Azure AI Language (von unserer selbst gehosteten Discourse-Instanz) zu nutzen – da wir bereits unser Azure-Abonnement zur Integration von GPT-4.5 mit Discourse (für Zusammenfassungs- und Chatbot-Funktionalität) verwenden:

…aber wir erhalten keine Daten im Sentiment-Dashboard und sehen diese Fehler in den Protokollen:

Discourse AI: Fehler bei der Stapelklassifizierung: 208 Beiträge konnten nicht klassifiziert werden (Beispiel-IDs: 2256, 909, 2270, 2260, 2797): JSON::ParserError: Ein leerer String ist kein gültiger JSON-String.

Der Backtrace zeigt, dass Discourse möglicherweise versucht, HuggingFace zu verwenden – sind dies im Moment die einzigen unterstützten Modelle?

Danke,

N

1 „Gefällt mir“

Ist der einzige Weg, diese Funktion zu nutzen, die Einrichtung eigener Instanzen der Modelle (die ressourcenintensive GPU-Instanzen benötigen, die kostspielig wären)? Diese Funktion sieht sehr nützlich aus, aber es scheint, dass die Einrichtung mich mehr kosten würde als mein eigentliches Discourse-Hosting.

Ja, die unterstützten Modelle sind die, die in der OP aufgeführt sind.

Wir werden irgendwann die Unterstützung für die Klassifizierung mit LLMs für Leute hinzufügen, deren Kosten keine Rolle spielen.

Nun, die gesamte Funktion ist darauf ausgelegt, Beiträge mit ML-Modellen zu klassifizieren, daher benötigen Sie irgendwo, um diese auszuführen.

Und da Discourse auf dem billigsten VPS laufen kann, ist das Ausführen von ML-Modellen tatsächlich teurer. Wenn Sie die Funktion auf die billigste Art und Weise haben möchten, ist es machbar, sie auf einem Server mit nur einer Handvoll CPU-Kernen auszuführen, solange Sie genügend RAM haben, um die Modelle zu laden.

1 „Gefällt mir“

Entschuldigung, falls diese Frage bereits gestellt wurde, aber ich konnte keine Referenz darauf finden, wo genau der Schwellenwert konfiguriert werden kann :sweat_smile:

1 „Gefällt mir“

Leider ist der Schwellenwert keine vom Benutzer oder Administrator konfigurierbare Einstellung. Es handelt sich um einen spezifischen Wert, der in der Codebasis festgelegt ist.

1 „Gefällt mir“