Schweregrad
Normal — aber hochstörend in belebten öffentlichen Themen: Wiederholtes Klicken auf „Wiederholen“ spült das Thema mit doppelten Bot-Beiträgen voll, sodass es für Mitglieder so aussieht, als würde der Bot „selbstständig posten / in einer Schleife hängen bleiben.“
Plattform
- Server: Discourse-Kern
main(2026.7.x-Zweig), reproduziert gegen neuestesorigin/main(dbf5eedac40, 2026-07-14).discourse-aiim Kern enthalten. - Client: Reproduziert von mehreren Browsern/Geräten (Desktop Chrome, Android Chrome, iOS Safari) — es ist serverseitig, daher ist der Client irrelevant.
Beschreibung
Tatsächliches Ergebnis: In einem öffentlichen Thema fügt das Klicken auf Wiederholen bei einer AI-Bot-Antwort einen ganz neuen Bot-Beitrag zum Thema hinzu. Die ursprüngliche Antwort bleibt unverändert, sodass jeder Wiederholungsversuch einen weiteren Beitrag hinzufügt. N Wiederholungen → N zusätzliche Beiträge.
Erwartetes Ergebnis: Wiederholen sollte die bestehende Bot-Antwort an Ort und Stelle neu generieren (den Inhalt ersetzen), genau wie es in einer AI-Bot-PM/DM-Konversation der Fall ist. Es sollte kein neuer Beitrag erstellt werden.
Schritte zur Reproduktion (von einem frischen Discourse)
- Aktiviere Discourse AI + AI-Bot; erstelle/aktiviere einen AI-Agenten (Persona) mit einem Bot-Benutzer und schalte „Erlaube Thema-Erwähnungen“ ein, damit er in öffentlichen Themen antworten kann (
allow_topic_mentions). Füge die Benutzergruppe zu den erlaubten Gruppen des Agenten und zuai_bot_allowed_groupshinzu. - Erwähne den Bot in einem öffentlichen Thema in einem Beitrag, damit er antwortet.
- Öffne im Antwortbeitrag des Bots das Admin-/Schraubenschlüssel-Menü und klicke auf Wiederholen (die Regenerationsaktion →
POST /discourse-ai/ai-bot/post/:post_id/retry). - Beobachtung: Eine neue Bot-Antwort wird angehängt, anstatt die bestehende neu zu generieren. Wiederhole Wiederholen → jedes Mal ein zusätzlicher Beitrag.
- Zum Vergleich: Führe dasselbe in einer PM mit dem Bot durch: Wiederholen generiert korrekt an Ort und Stelle neu (keine Duplikate). Die Divergenz zwischen PM und öffentlichem Thema ist der Hinweis.
Reproduziert zu 100 % der Zeit in öffentlichen Themen.
Ursache (Code-Verweise, aktuelles origin/main)
BotController#retry_response(plugins/discourse-ai/app/controllers/discourse_ai/ai_bot/bot_controller.rb) wertetJobs::CreateAiReplymit `reply_post_id: post.id`` ein — d. h. „regeneriere diesen bestehenden Beitrag.“Jobs::CreateAiReplylädt ihn alsreply_postund übergibt ihn anPlayground#reply_to(..., existing_reply_post: reply_post).- In
Playground#reply_to(plugins/discourse-ai/lib/ai_bot/playground.rb):stream_reply = post.topic.private_message? if stream_reply.nil?→falsefür öffentliche Themen (~L518).existing_reply_postwird nur innerhalb desif stream_reply-Zweigs verbraucht (reply_post = existing_reply_post, ~L538).- Der nicht-streamende
else-Zweig (~L662) führt bedingungslosPostCreator.create!(...)aus, hängt einen neuen Beitrag an und berührt den zu wiederholenden Beitrag nie.
Für jedes nicht-PM-Thema wird die Absicht „an Ort und Stelle neu generieren“ aus retry_response stillschweigend verworfen und stattdessen ein Duplikat erstellt. (Die gleiche Asymmetrie bedeutet, dass Bot-Antworten in öffentlichen Themen nicht gestreamt werden, was das bestehende Verhalten ist; der Fehler besteht speziell darin, dass existing_reply_post von Retry auf diesem Pfad ignoriert wird.)
Vorgeschlagene Lösung (nur Richtung)
existing_reply_post unabhängig vom Streaming beachten — z. B. im nicht-streamenden Zweig, wenn existing_reply_post vorhanden ist, diesen revise (revidieren) statt PostCreator.create! aufzurufen; oder die Entscheidung „bestehenden Beitrag wiederverwenden“ von stream_reply entkoppeln.
Sicherer Modus
N/A — serverseitiges Plugin-Verhalten, unabhängig von Themen/Website-JS.