Проблемы анализа тональности Discourse AI: Формат модели Hugging Face и сбой конечной точки Azure
Привет, сообщество Discourse и разработчики,
Я столкнулся с серьезными проблемами при попытке настроить и использовать функцию анализа тональности в плагине Discourse AI на своем форуме. Похоже, существуют две отдельные проблемы, которые мешают её корректной работе.
Проблема 1: Несоответствие формата ответа модели Hugging Face
Я настроил модель cardiffnlp/twitter-roberta-base-sentiment из Hugging Face для анализа тональности. Хотя мой API-ключ действителен, и я могу успешно вызывать API с моего экземпляра Discourse через curl, плагин Discourse AI, похоже, неправильно парсит ответ из-за изменения формата вывода модели Hugging Face.
Моя команда curl (подтверждающая действительность API-ключа и новый формат):
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!\"}"
Вывод из curl (показывающий новый вложенный формат массива):
[[{"label":"LABEL_2","score":0.9891520738601685},{"label":"LABEL_1","score":0.009014752693474293},{"label":"LABEL_0","score":0.0018332178005948663}]]
Проблема: Модель twitter-roberta-base-sentiment ранее возвращала один массив хешей «метка-оценка»: [{"label": "LABEL_2", "score": 0.98}, ...]. Однако теперь она возвращает вложенный массив: [[{"label": "LABEL_2", "score": 0.98}, ...]].
Закодированная логика парсинга плагина Discourse AI (в частности, classification["label"][/\d+/].to_i, как указано в трассировке стека) не учитывает этот внешний слой массива. Это приводит к ошибке TypeError, когда он пытается обратиться к Символу как к Целому числу.
Сообщение об ошибке (из исключения задачи):
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…
Полная трассировка стека для проблемы с 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'
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...
Проблема 2: Конфигурация модели Microsoft Azure приводит к ошибке Hugging Face
Когда я попытался переключиться на модель Text Analytics от Microsoft в настройках Discourse AI, я получил ошибку 404 Resource not found, и, что удивительно, трассировка стека все еще указывает на hugging_face_text_embeddings.rb.
Сообщение об ошибке (из исключения задачи):
Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)
Фрагмент соответствующей трассировки стека (указывающий на Hugging Face, несмотря на выбранную модель 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'
Наблюдение: Это указывает на то, что даже когда я выбираю и настраиваю конечную точку и API-ключ модели Microsoft, плагин Discourse AI, похоже, имеет жестко закодированную или неправильно маршрутизирует запросы анализа тональности через логику или конечные точки, специфичные для Hugging Face. Это полностью предотвращает использование модели Microsoft.
Скриншоты конфигурации:
Я прикрепил скриншот моих настроек Discourse AI, чтобы показать конфигурацию:
- Подробная конфигурация моделей анализа тональности ИИ (показывающая как модели Hugging Face, так и Microsoft) — я тестировал только с конфигурациями Hugging Face или только Microsoft, получая тот же результат
Эти проблемы делают функцию анализа тональности фактически неработоспособной. Похоже, что плагину требуется обновление для обработки нового формата ответа Hugging Face и для правильной маршрутизации запросов при настройке различных провайдеров анализа тональности.
Любая помощь или рекомендации по этим проблемам были бы очень полезны.
Спасибо!
