Discourse AI 情感分析问题:Hugging Face 模型格式与 Azure 端点故障
Discourse 社区和开发者们,大家好,
我在论坛上配置和使用 Discourse AI 插件中的情感分析功能时遇到了严重问题。似乎有两个独立的问题阻碍了其正常工作。
问题 1:Hugging Face 模型响应格式不匹配
我已经为情感分析配置了 Hugging Face 的 cardiffnlp/twitter-roberta-base-sentiment 模型。虽然我的 API 密钥有效,并且我可以使用 curl 命令从 Discourse 实例成功调用 API,但 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)没有考虑到这个外部数组层。这导致在尝试将 Symbol 转换为 Integer 时出现 TypeError。
错误消息(来自 Job Exception):
无法将 Symbol 隐式转换为 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'
\u003cinternal:kernel\u003e: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'
无法将 Symbol 隐式转换为 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 错误
当我尝试在 Discourse AI 设置中切换到 Microsoft Text Analytics 模型时,我遇到了 404 Resource not found 错误,令人惊讶的是,回溯仍然指向 hugging_face_text_embeddings.rb。
错误消息(来自 Job Exception):
Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)
相关回溯片段(尽管选择了 Microsoft 模型,但仍指向 Hugging Face):
/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'
观察: 这表明即使我选择了并配置了 Microsoft 模型的端点和 API 密钥,Discourse AI 插件似乎也硬编码或错误地将情感分析请求路由到 Hugging Face 特定的逻辑或端点。这导致 Microsoft 模型根本无法使用。
配置截图:
我附上了 Discourse AI 设置的截图,以展示配置:
- AI 情感模型详细配置(显示 Hugging Face 和 Microsoft 模型)- 我仅测试了 Hugging Face 或仅测试了 Microsoft 模型配置,结果相同
这些问题使得情感分析功能实际上无法使用。看来该插件需要更新以处理新的 Hugging Face 响应格式,并在配置了不同的情感提供商时正确路由请求。
非常感谢您在这些问题上的任何帮助或指导。
谢谢!