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!