Erreur en mode de raisonnement IA

Version :

Discourse v2026.7.2 — Commits · discourse/discourse · GitHub — Ember v6.10.1

Détails de l’erreur :

DiscourseAi::Completions::Endpoints::OpenAi: status: 400 - body: {"error":{"code":400,"upstream_code":"invalid_request_error","message":"The `reasoning_content` in the thinking mode must be passed bac
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:218:in 'block in ActiveSupport::BroadcastLogger#dispatch' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:217:in 'Array#map' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:217:in 'ActiveSupport::BroadcastLogger#dispatch' 
activesupport-8.0.5/lib/active_support/broadcast_logger.rb:129:in 'ActiveSupport::BroadcastLogger#error' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:685:in 'Kernel#public_send' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:685:in 'DiscourseAi::Completions::Endpoints::Base#failed_response_retry_status_and_delay' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:330:in 'block (3 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
net-http-0.9.1/lib/net/http.rb:2461:in 'block in Net::HTTP#transport_request' 
net-http-0.9.1/lib/net/http/response.rb:321:in 'Net::HTTPResponse#reading_body' 
net-http-0.9.1/lib/net/http.rb:2458:in 'Net::HTTP#transport_request' 
net-http-0.9.1/lib/net/http.rb:2410:in 'Net::HTTP#request' 
rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:19:in 'block in Net::HTTP#request_with_mini_profiler' 
rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:51:in 'Rack::MiniProfiler::ProfilingMethods#step' 
rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:18:in 'Net::HTTP#request_with_mini_profiler' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:325:in 'block (2 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
net-http-0.9.1/lib/net/http.rb:1630:in 'Net::HTTP#start' 
net-http-0.9.1/lib/net/http.rb:1064:in 'Net::HTTP.start' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:306:in 'block in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
<internal:kernel>:168:in 'Kernel#loop'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:282:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:191:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:50:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:218:in 'DiscourseAi::Completions::Endpoints::Base#replay_non_streaming_as_streaming!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:172:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/open_ai_shared.rb:50:in 'DiscourseAi::Completions::Endpoints::OpenAiShared#perform_completion!' 
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:245:in 'DiscourseAi::Completions::Llm#generate' 
/var/www/discourse/plugins/discourse-ai/lib/agents/bot.rb:176:in 'DiscourseAi::Agents::Bot#reply' 
/var/www/discourse/plugins/discourse-ai/lib/ai_bot/playground.rb:378:in 'DiscourseAi::AiBot::Playground#reply_to_chat_message' 
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/create_ai_chat_reply.rb:20:in 'Jobs::CreateAiChatReply#execute' 
/var/www/discourse/app/jobs/base.rb:313:in 'block (2 levels) in Jobs::Base#perform' 
rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
rails_multisite-7.0.0/lib/rails_multisite/connection_management.rb:17:in 'RailsMultisite::ConnectionManagement.with_connection'
/var/www/discourse/app/jobs/base.rb:300:in 'block in Jobs::Base#perform' 
/var/www/discourse/app/jobs/base.rb:297:in 'Array#each' 
/var/www/discourse/app/jobs/base.rb:297:in 'Jobs::Base#perform' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:220:in 'Sidekiq::Processor#execute_job' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:185:in 'block (4 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:180:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/suppress_user_email_errors.rb:6:in 'Sidekiq::SuppressUserEmailErrors#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/discourse_event.rb:6:in 'Sidekiq::DiscourseEvent#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
/var/www/discourse/lib/sidekiq/pausable.rb:131:in 'Sidekiq::Pausable#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/job/interrupt_handler.rb:9:in 'Sidekiq::Job::InterruptHandler#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:26:in 'Sidekiq::Metrics::ExecutionTracker#track' 
sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:134:in 'Sidekiq::Metrics::Middleware#call' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse' 
sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:173:in 'Sidekiq::Middleware::Chain#invoke' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:184:in 'block (3 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:145:in 'block (6 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_retry.rb:118:in 'Sidekiq::JobRetry#local' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:144:in 'block (5 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/config.rb:39:in 'block in <class:Config>' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:139:in 'block (4 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:281:in 'Sidekiq::Processor#stats' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:134:in 'block (3 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_logger.rb:15:in 'Sidekiq::JobLogger#call' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:133:in 'block (2 levels) in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_retry.rb:85:in 'Sidekiq::JobRetry#global' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:132:in 'block in Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/job_logger.rb:40:in 'Sidekiq::JobLogger#prepare' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:131:in 'Sidekiq::Processor#dispatch' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:183:in 'block (2 levels) in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'Thread.handle_interrupt' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'block in Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Thread.handle_interrupt' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Sidekiq::Processor#process' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:86:in 'Sidekiq::Processor#process_one' 
sidekiq-7.3.10/lib/sidekiq/processor.rb:76:in 'Sidekiq::Processor#run' 
sidekiq-7.3.10/lib/sidekiq/component.rb:10:in 'Sidekiq::Component#watchdog' 
sidekiq-7.3.10/lib/sidekiq/component.rb:19:in 'block in Sidekiq::Component#safe_thread' 

Configuration de l’IA :

J’ai effectué les tentatives suivantes :
Tentative 1 :
Activer la désactivation de la complétion en streaming (conversion des requêtes en streaming en requêtes non en streaming), mais l’exécution du test a renvoyé une erreur :

Échec de la requête en streaming : le modèle a renvoyé une réponse vide.

Tentative 2 :
Désactiver la désactivation de la complétion en streaming (conversion des requêtes en streaming en requêtes non en streaming)

En même temps, Travail de raisonnement (uniquement pour les modèles de raisonnement) (facultatif) : sélectionner « none »

L’exécution du test s’est déroulée normalement, mais ainsi, j’ai perdu la fonction de raisonnement, ce qui n’est pas ce que je souhaite.

Question : est-ce que le plugin IA ne gère pas correctement la logique d’exécution du test, ou est-ce que le format de retour de la plateforme de grand modèle que j’ai intégrée ne correspond pas ? Si des informations supplémentaires sont nécessaires, je suis tout à fait disposé à en fournir afin de déterminer le problème spécifique.

Le message d’erreur DiscourseAi::Completions::Endpoints::OpenAi: ... est-il tronqué ?

Je viens de rechercher ce message d’erreur sur Bing et il semble s’agir d’un problème spécifique au fournisseur DeepSeek

https://blog.csdn.net/weixin_38106322/article/details/161165043

As-tu testé un autre fournisseur (par exemple OpenRouter) ?

Merci pour votre réponse. J’utilise un service de routage LLM (llmrouter) développé et agrégé en interne par mon entreprise.

Je n’ai pas encore essayé OpenRouter, car je n’ai pas activé son service.

Si le problème est que DeepSeek exige que des jetons de raisonnement soient renvoyés lors de la complétion (également appelé « interleaved thinking »[1]), je pense que c’est une demande de fonctionnalité légitime.


  1. Ceci pourrait ne pas être exact, j’ai simplement cherché et l’interleaved thinking concerne plutôt la préservation du raisonnement entre les appels d’outils plutôt qu’entre des contenus arbitraires ↩︎

Pouvez-vous essayer de changer le fournisseur en vLLM et l’analyseur de raisonnement en deepseek_v4 ?

Le journal de l’IA est le suivant :

topic@discourse-2026-09-16.dcqresult.json (14,8 Ko)

J’ai dû faire quelques bidouillages avec LiteLLM pour que certains modèles fonctionnent dans Discourse AI.

As-tu essayé différents modèles de raisonnement ? Certains LLM ne fonctionnent que si cette option est activée, tandis que d’autres nécessitent qu’elle soit réglée sur « low » (et non « minimal ») ou sur la valeur par défaut « always » ; c’est généralement assez gourmand.

J’ai essayé, et en général, dès que j’active le mode de raisonnement, une erreur apparaît indiquant que « le modèle a renvoyé une réponse vide ». Cependant, d’après les journaux de l’IA, le modèle a bien renvoyé une réponse. Cela donne l’impression que la réponse du modèle n’est pas correctement reçue.

Chaque fois que je lance un test, deux entrées apparaissent dans le journal de l’IA. La première ne semble pas être en flux, tandis que la seconde, elle, l’est. Je ne sais pas pourquoi il y a deux entrées.