Задача #27
closedЭпик #23: Переключение модели и режимов поведения AI в чате
Backend: борьба с преждевременным завершением сессии AI
100%
Description
Описание¶
AI слишком быстро завершает работу — делает 2-3 действия и даёт финальный ответ, не доделав задачу.
Проявления¶
- Пользователь просит "напиши сцену с 3 персонажами" → AI пишет 1 блок и завершает
- Пользователь просит "проверь всю главу" → AI читает 2 блока из 8 и завершает
- Пользователь просит "обнови лор" → AI обновляет 1 запись из 5 упомянутых
Решение¶
1. Completion check nudge¶
После финального ответа AI (перед завершением) — инжектировать системное сообщение:
"Проверь: выполнил ли ты ВСЁ что просил пользователь? Перечисли что сделано и что осталось. Если осталось — продолжай."
2. Task decomposition enforcement¶
Перед началом работы AI обязан перечислить шаги (RULE #0 Phase 2). После завершения — сверить список.
3. Minimum actions для write-запросов¶
Если пользователь просит прозу и AI вызвал write_story_block < N раз, nudge: "Вы написали только 1 блок. Обычно сцена требует 2-3 блока."
4. Read-before-finish nudge¶
Если AI ни разу не вызвал read_chapter для проверки результата — nudge: "Перечитай написанное для проверки связности."
Файлы¶
- backend/src/narrator/narrator.runner.ts — nudge-логика
- backend/src/narrator/narrator.prompts.ts — промпт-модификаторы
- backend/src/narrator/narrator.presets.ts — настройки по режимам
HU Updated by Hardelele User about 3 hours ago
- Status changed from Новая to В работе
Большая часть реализована: auto-expand nudge (<500 слов), event nudge (обязательное создание событий), dynamic MAX_ITERATIONS (10-25 по сложности). НЕ реализовано: completion check nudge (проверка что AI выполнил ВСЁ перед завершением), read-before-finish nudge. ~70% готово.
HU Updated by Hardelele User about 3 hours ago
Начата реализация: completion check nudges в AgentRunner — счётчики proseBlocksWritten/readChapterCalled + nudge при преждевременном завершении.
HU Updated by Hardelele User about 3 hours ago
- Status changed from В работе to Решена
- % Done changed from 0 to 100
Реализовано в narrator.runner.ts:
-
Счётчики: proseBlocksWritten, readChapterCalled, completionCheckDone — трекают что AI сделал за сессию
-
Completion check nudge в блоке
chunk.type === 'done'(срабатывает ОДИН раз):- Prose minimum nudge: если написан 1 блок при requestType continue/edit → AI получает напоминание что сцена обычно требует 2-3 блока
- Read-before-finish nudge: если написал прозу но не вызвал read_chapter → напоминание проверить результат
- General completion check: для review/edit/complex запросов → напоминание проверить все ли шаги выполнены
-
Защита от зацикливания: completionCheckDone = true после первого nudge, повторный nudge невозможен
HU Updated by Hardelele User about 3 hours ago
Implemented Accountability Loop — 4-layer solution to prevent premature session termination:
Layer 1: Scene Plan Parsing — parseExpectedBlocks() method scans AI's thinking text for "Block N" / "Блок N" patterns, extracts expected block count from the AI's own scene plan.
Layer 2: Progress Notes — After each successful write_story_block, injects [PROGRESS] Block 1/3 written. 2 remaining. into tool results. Gives AI explicit feedback on completion status.
Layer 3: Completion Gate — Replaced heuristic with plan-aware gate:
- Primary: if AI planned N blocks but wrote fewer → accountability nudge with specific count
- Fallback: original heuristic for complex requests when no plan detected
- Satisfied: written >= expected → AI finishes normally
Layer 4: Prompt Phase 2c — Added "PROGRESS TRACKING" section instructing AI to check [PROGRESS] notes and not finish until all planned blocks are written.
Files changed:
-
narrator.runner.ts— expectedProseBlocks tracking, parseExpectedBlocks(), progress nudges, new completion gate -
narrator.prompts.ts— Phase 2c: PROGRESS TRACKING section
HU Updated by Hardelele User 22 minutes ago
- Status changed from Решена to Закрыта
Закрытие: задача решена ранее.