Задача #28
closedЭпик #23: Переключение модели и режимов поведения AI в чате
Backend: защита от дублирования лора/событий (GPT dedup guard)
100%
Description
Описание¶
GPT-4o часто создаёт дубликаты лора и событий, игнорируя существующие записи.
Проблема¶
Пользователь пишет "создай лор про Восточную Башню", AI вызывает create_lore — а лор "Восточная Башня" уже существует. Вместо update — создаётся дубль.
Решение¶
1. Dedup check в executor¶
Перед create_lore — поиск по title (fuzzy, Levenshtein <= 3):
- Найден точный match → ошибка: "Lore 'X' уже существует (id: ...). Используйте update_lore."
- Найден fuzzy match → предупреждение: "Похожий лор: 'Y'. Вы имели в виду его?"
2. Аналогично для create_event¶
Поиск по title перед созданием.
3. Промпт-усиление (Extended mode)¶
"ПЕРЕД созданием лора или события — ОБЯЗАТЕЛЬНО проверь через search_lore / read_events что такой записи ещё нет."
Файлы¶
- backend/src/narrator/narrator.executor.ts — dedup checks
- backend/src/narrator/narrator.prompts.ts — промпт Extended mode
HU Updated by Hardelele User about 3 hours ago
- Status changed from Новая to В работе
Частично реализовано: Levenshtein fuzzy matching для персонажей (resolveCharacter). НЕ реализовано: dedup check в create_lore и create_event (создают дубли без проверки). Промпт-усиление для Extended mode не добавлено. ~30% готово.
HU Updated by Hardelele User about 3 hours ago
Начата реализация: dedup guard для createLore/createEvent (exact + fuzzy match) + промпт-усиление в RULE #4.
HU Updated by Hardelele User about 3 hours ago
- Status changed from В работе to Решена
- % Done changed from 0 to 100
Реализовано:
-
Dedup guard в createLore() (narrator.executor.ts):
- Exact match (case-insensitive) по title → ошибка: "Lore X already exists, use update_lore"
- Fuzzy match (Levenshtein ≤3) → ошибка: "Similar lore found: Y, did you mean to update?"
-
Dedup guard в createEvent() (narrator.executor.ts):
- Exact match (case-insensitive) по title → ошибка: "Event X already exists, use update_event"
- Fuzzy match (Levenshtein ≤3) → ошибка с suggestion
-
Промпт-усиление (narrator.prompts.ts):
- Добавлено в RULE #4.2: "BEFORE calling create_lore or create_event — ALWAYS search for existing entries first using search_lore / read_events"
HU Updated by Hardelele User 21 minutes ago
- Status changed from Решена to Закрыта
Закрытие: задача решена ранее.