Project

General

Profile

Actions

Задача #28

closed
HU

Эпик #23: Переключение модели и режимов поведения AI в чате

Backend: защита от дублирования лора/событий (GPT dedup guard)

Задача #28: Backend: защита от дублирования лора/событий (GPT dedup guard)

Added by Hardelele User about 5 hours ago. Updated 21 minutes ago.

Status:
Закрыта
Priority:
Нормальный
Assignee:
-
Start date:
02/16/2026
Due date:
% Done:

100%

Estimated time:

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 Actions #1

  • 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 Actions #2

Начата реализация: dedup guard для createLore/createEvent (exact + fuzzy match) + промпт-усиление в RULE #4.

HU Updated by Hardelele User about 3 hours ago Actions #3

  • Status changed from В работе to Решена
  • % Done changed from 0 to 100

Реализовано:

  1. 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?"
  2. Dedup guard в createEvent() (narrator.executor.ts):

    • Exact match (case-insensitive) по title → ошибка: "Event X already exists, use update_event"
    • Fuzzy match (Levenshtein ≤3) → ошибка с suggestion
  3. Промпт-усиление (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 Actions #4

  • Status changed from Решена to Закрыта

Закрытие: задача решена ранее.

Actions

Also available in: PDF Atom