Disco Bot / AI-Suche mit Gemini nach Update auf 2026.8.0 defekt

Nach dem Update auf 2026.8.0 funktioniert die KI-Entdeckungs-Funktion nicht mehr, wenn Gemini Flash Latest (3.7) als Modell verwendet wird. In der Such-Oberfläche wirft der Disco Bot einen Fehler. In den Server-Logs sehe ich Folgendes:

Message (4 copies reported)

Job exception: {
  "error": {
    "code": 400,
    "message": "Role 'function' is not supported. Please use a valid role: SYSTEM, SYSTEM_1, USER, ASSISTANT, DEVELOPER, CONTEXT, USER_CONTEXT, MODEL, USER.",
    "status": "INVALID_ARGUMENT"
  }
}


Backtrace

/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:346:in 'block (3 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/net-http-0.9.1/lib/net/http.rb:2461:in 'block in Net::HTTP#transport_request'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/net-http-0.9.1/lib/net/http/response.rb:321:in 'Net::HTTPResponse#reading_body'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/net-http-0.9.1/lib/net/http.rb:2458:in 'Net::HTTP#transport_request'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/net-http-0.9.1/lib/net/http.rb:2410:in 'Net::HTTP#request'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/patches/net_patches.rb:19:in 'block in Net::HTTP#request_with_mini_profiler'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:51:in 'Rack::MiniProfiler::ProfilingMethods#step'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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:334:in 'block (2 levels) in DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/net-http-0.9.1/lib/net/http.rb:1630:in 'Net::HTTP#start'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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:315: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:291:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:192:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:254:in 'DiscourseAi::Completions::Llm#generate'
/var/www/discourse/plugins/discourse-ai/lib/agents/bot.rb:269:in 'DiscourseAi::Agents::Bot#reply'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/stream_discover_reply.rb:43:in 'Jobs::StreamDiscoverReply#execute'
/var/www/discourse/app/jobs/base.rb:313:in 'block (2 levels) in Jobs::Base#perform'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/rails_multisite-7.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in 'RailsMultisite::ConnectionManagement::NullInstance#with_connection'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:220:in 'Sidekiq::Processor#execute_job'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:185:in 'block (4 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:180:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/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'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job/interrupt_handler.rb:9:in 'Sidekiq::Job::InterruptHandler#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:183:in 'block in Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:26:in 'Sidekiq::Metrics::ExecutionTracker#track'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/metrics/tracking.rb:134:in 'Sidekiq::Metrics::Middleware#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:182:in 'Sidekiq::Middleware::Chain#traverse'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/middleware/chain.rb:173:in 'Sidekiq::Middleware::Chain#invoke'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:184:in 'block (3 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:145:in 'block (6 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_retry.rb:118:in 'Sidekiq::JobRetry#local'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:144:in 'block (5 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/config.rb:39:in 'block in <class:Config>'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:139:in 'block (4 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:281:in 'Sidekiq::Processor#stats'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:134:in 'block (3 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_logger.rb:15:in 'Sidekiq::JobLogger#call'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:133:in 'block (2 levels) in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_retry.rb:85:in 'Sidekiq::JobRetry#global'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:132:in 'block in Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/job_logger.rb:40:in 'Sidekiq::JobLogger#prepare'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:131:in 'Sidekiq::Processor#dispatch'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:183:in 'block (2 levels) in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'Thread.handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:182:in 'block in Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Thread.handle_interrupt'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:181:in 'Sidekiq::Processor#process'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:86:in 'Sidekiq::Processor#process_one'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/processor.rb:76:in 'Sidekiq::Processor#run'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/component.rb:10:in 'Sidekiq::Component#watchdog'
/var/www/discourse/vendor/bundle/ruby/3.4.0/gems/sidekiq-7.3.10/lib/sidekiq/component.rb:19:in 'block in Sidekiq::Component#safe_thread'
Message (4 copies reported)

DiscourseAi::Completions::Endpoints::Gemini: status: 400 - body: {
  "error": {
    "code": 400,
    "message": "Role 'function' is not supported. Please use a valid role: SYSTEM, SYSTEM_1, USER, ASSISTANT, DEVELOPER, CONTEXT, USER_CONTEXT, MODEL, USER.",
    "status": "INVALID_ARGUMENT"
  }
}


Backtrace

activesupport-8.0.5.1/lib/active_support/broadcast_logger.rb:218:in 'block in ActiveSupport::BroadcastLogger#dispatch'
activesupport-8.0.5.1/lib/active_support/broadcast_logger.rb:217:in 'Array#map'
activesupport-8.0.5.1/lib/active_support/broadcast_logger.rb:217:in 'ActiveSupport::BroadcastLogger#dispatch'
activesupport-8.0.5.1/lib/active_support/broadcast_logger.rb:129:in 'ActiveSupport::BroadcastLogger#error'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:703:in 'Kernel#public_send'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:703:in 'DiscourseAi::Completions::Endpoints::Base#failed_response_retry_status_and_delay'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:339: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:334: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:315: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:291:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion_request_with_retries'
/var/www/discourse/plugins/discourse-ai/lib/completions/endpoints/base.rb:192:in 'DiscourseAi::Completions::Endpoints::Base#perform_completion!'
/var/www/discourse/plugins/discourse-ai/lib/completions/llm.rb:254:in 'DiscourseAi::Completions::Llm#generate'
/var/www/discourse/plugins/discourse-ai/lib/agents/bot.rb:269:in 'DiscourseAi::Agents::Bot#reply'
/var/www/discourse/plugins/discourse-ai/app/jobs/regular/stream_discover_reply.rb:43:in 'Jobs::StreamDiscoverReply#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'

image

Kannst du es mit den nicht veralteten Endpoints versuchen?

2 „Gefällt mir“

Ja, das scheint zu funktionieren.

Ich brauche noch etwas Zeit, um herauszufinden, wie man auf die neuen Interaktions-Endpoints migriert. In der Zwischenzeit wäre es schön, wenn es mit den bestehenden Setups nicht kaputtgehen würde.

Außerdem habe ich festgestellt, dass die Modell-IDs mit dem Suffix latest nicht mit den neuen Interaction-Endpoints funktionieren. Beispielsweise funktionieren gemini-flash-latest und gemini-flash-lite-latest nicht mit den Interaction-Endpoints. Man muss die Versionsnummer explizit angeben – das ist ein großes Problem (und für uns persönlich wahrscheinlich ein K.o.-Kriterium), da es den Wartungsaufwand der Website erheblich erhöht. Gemini veraltet Versionen schneller, als ich neue Mitarbeiter einstellen und einarbeiten kann. Die Verwendung des latest-Suffixes in der Modell-ID hat uns viel Kopfschmerz erspart.

Das ist wahrscheinlich eine gute Diskussion für: Gemini API - Google AI Developers Forum

Langfristig wird die Interactions API die einzige unterstützte API sein.

Ich verstehe vollkommen, warum Google nicht möchte, dass „gemini-flash“ als Alias für die neueste Gemini-Flash-Version verwendet wird. Die Preise variieren stark zwischen den Modellen; 2.5 flash ist viel billiger als 3.7 flash, und beide werden derzeit unterstützt.

Du musst hier auf dem Laufenden bleiben, LLMs entwickeln sich gerade sehr schnell weiter.

Beachte, dass Gemini dieses Jahr tatsächlich langsamer vorangekommen ist als Anthropic oder Open AI.

1 „Gefällt mir“

Ich verstehe, was du meinst, aber ich spreche aus der Perspektive eines Administrators, der Discourse betreibt. Die meisten Admins können mit diesem Tempo nicht mithalten (und es hat daher keinen Sinn, dies im Google-Entwicklerforum zu melden, das im Grunde nur von KI-Entwicklern bevölkert ist – nicht von App-Administratoren).

Meine Vermutung ist, dass die meisten Organisationen Discourse einfach deployen und danach vergessen oder nur minimalen Support anbieten (wie bei 90 % der in Organisationen eingesetzten Apps). Administratoren und Budgets sind nicht darauf ausgelegt, mit dem Tempo der KI-Entwicklung Schritt zu halten. Ich denke, am Ende wird sich das auf Discourse auswirken: Weniger Admins werden KI über Discourse einsetzen, um ihre Betriebskosten im Griff zu behalten und die Produktivumgebung stabil zu halten, wenn dieser gesamte „KI-Tempo- und fehlende-Legacy-Kompatibilität“-Overhead auf die Admins abgewälzt wird.

Ich höre hier allerdings widersprüchliche Botschaften.

Einerseits sprichst du von Budgetsorgen, andererseits sagst du aber: „Ich will immer das neueste, beste und teuerste Modell von Google“?

Wenn du die Kosten (Geld) begrenzen musst, musst du ein bestimmtes Modell festlegen. Wenn es um „Ich will das Beste, mir egal, was es kostet“ geht, verstehe ich dich, aber dann sind wir in der Bredouille, wenn gemini-flash-latest von 5 auf 50 Dollar steigt … dann werden die Leute wohl fragen: Warum habt ihr das gemacht?

1 „Gefällt mir“

Die Suchkosten von 50 auf 100 US-Dollar pro Monat zu erhöhen, um automatisch auf ein neues Modell umzustellen, im Vergleich zu 50.000 US-Dollar pro Jahr für Verwaltung und Schulung … die erste Option gewinnt. Das ist doch genau das Versprechen der KI, oder? Geringe Zusatzkosten = signifikante Verbesserung der TCO (Total Cost of Ownership)? Weniger Suchanfragen, weil die KI-Ergebnisse präziser und schneller sind.

Aktuell setze ich OpenClaw-Agenten ein, um neue Einstellungen zu ersetzen, da es für mich günstiger ist, Kombinationen aus Claude / ChatGPT / Gemini zu nutzen, als neue Mitarbeiter einzustellen und zu schulen – außerdem kann ich buchstäblich einen neuen Agenten mit null Vorlaufzeit und null Schulungs-/Onboarding-Bedarf „einstellen“, da ich ihn einfach duplizieren kann.

Die Idee ist, die Overhead-Kosten niedrig und die Ausfallzeiten nahe bei null zu halten. Wenn ich das Setup und die Konfiguration auf Discourse alle paar Wochen/Monate überwachen muss, lohnt sich ein Update von Discourse nicht (zumindest nicht, bis ich einen KI-Agenten dafür habe – und dann ist es wieder eine Kosten-Nutzen-Analyse, wie viele Tokens der Agent verbraucht, um das Setup zu überwachen und auf dem neuesten Stand zu halten – nur um Discourse zu aktualisieren).

Es geht nicht um das Neueste und Beste, sondern schlicht darum, die TCO niedrig zu halten (ein Kompromiss). Die Alternative ist, Discourse nicht zu aktualisieren.

Das ist keine Alternative mehr. Es ist extrem gefährlich, alte, ungepatchte Versionen von Discourse zu betreiben. Man sollte sich immer auf einem unterstützten Channel befinden. Jeder, der Discourse selbst hostet, sollte dies niemals als „einmal im Jahr aktualisieren“ betrachten. Mindestens sollte man Discourse monatlich aktualisieren.

Wir nehmen Sicherheit sehr ernst. Die Anzahl der Augen, die sich jede Zeile des Codes, den wir schreiben, ansehen, ist exponentiell gestiegen, und alle paar Tage werden neue Randfälle entdeckt.


Natürlich ist das kein Thema, wenn du bei uns gehostet wirst. Wir aktualisieren unsere gehosteten LLMs regelmäßig und stellen dir Tokens direkt zur Verfügung, sodass du dir um solche Dinge keine Sorgen machen musst.

1 „Gefällt mir“

Interessanterweise hatte ich vor ein paar Jahren ein ähnliches Gespräch mit Microsoft darüber, wann sie bestimmte APIs zugunsten neuerer Versionen als veraltet kennzeichnen wollten, und ich brachte denselben Punkt zur Sprache – die Abwärtskompatibilität beizubehalten.

Auch sie waren einverstanden und haben es schließlich umgesetzt – es ist einfacher, die Kompatibilität aufrechtzuerhalten (ohne neue Funktionen unterstützen oder zurückportieren zu müssen) und die Systeme am Laufen zu halten, als sie gar nicht zu nutzen.