13.08.2026 20:25 перед внедрением коррекции поведения ИИ при использовании инструментов (создание флагов мусорных сообщений для очистки)
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# 🏛️ Архитектурный план: Двухуровневая очистка контекста и управление чатами
|
||||
|
||||
## 🎯 Концептуальная суть
|
||||
|
||||
* **Для пользователя (UI):** Полноценный, наглядный интерфейс с интерактивными превью, карточками и кнопками действий.
|
||||
* **Для нейросети (LLM):** Идеально «стерильное» окно контекста, очищенное от тяжелых временных черновиков (`is_ephemeral = 0`), что исключает галлюцинации и принуждает модель использовать функции SQLite (*Single Source of Truth*).
|
||||
* **Событийно-счетчиковая очистка:** Временные данные хранятся ровно столько, сколько нужно для завершения задачи или уточняющих вопросов, после чего безопасно зачищаются.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Пошаговый план реализации (Step-by-Step)
|
||||
|
||||
### **Шаг 1. Модификация схемы Базы Данных (SQLite)**
|
||||
|
||||
* Добавление флага эфемеральности в таблицу `chat_messages`:
|
||||
|
||||
```sql
|
||||
ALTER TABLE chat_messages ADD COLUMN is_ephemeral INTEGER DEFAULT 0;
|
||||
```
|
||||
|
||||
* `is_ephemeral = 0` — постоянные сообщения (вопросы, итоговые отклики, фиксированные задачи).
|
||||
* `is_ephemeral = 1` — временные рабочие выводы инструментов (превью системного промпта, промежуточные срезы/снапшоты, черновики).
|
||||
|
||||
---
|
||||
|
||||
### **Шаг 2. Разделение каналов истории и задел под изолированные сессии (Multi-Chat)**
|
||||
|
||||
* **Канал UI (Пользователь):** Функция выгрузки истории для веб-интерфейса отдаёт все сообщения (`is_ephemeral = 0` и `1`), обеспечивая прозрачность работы.
|
||||
* **Канал LLM (Оллама API):** В функцию `db_get_chat_history` передается жесткий фильтр:
|
||||
|
||||
```sql
|
||||
SELECT role, content
|
||||
FROM chat_messages
|
||||
WHERE session_id = ? AND is_ephemeral = 0
|
||||
ORDER BY id DESC
|
||||
LIMIT 12;
|
||||
```
|
||||
|
||||
* **Изолированные чаты (Перспектива):**
|
||||
* Создание сущности чатов (`chat_id` / `session_id`).
|
||||
* У каждого чата свой изолированный контекст.
|
||||
* Ручное удаление чата физически очищает все связанные записи в `chat_messages` и `session_states`.
|
||||
|
||||
---
|
||||
|
||||
### **Шаг 3. Интеллектуальный TTL-счетчик временного контекста (Auto-TTL)**
|
||||
|
||||
* Временный контекст (`is_ephemeral = 1`) **НЕ** сбрасывается мгновенно, если пользователь задает уточняющие вопросы в рамках той же темы.
|
||||
* Вводится счетчик сопутствующих сообщений (например, $N = 3..5$ сообщений).
|
||||
* Если оператор задает $N$ сообщений подряд, не относящихся к активному инструменту, или переключается на другой инструмент — временный контекст автоматически зачищается/деактивируется.
|
||||
|
||||
---
|
||||
|
||||
### **Шаг 4. UX-завершение транзакции (Кнопки «Да / Нет»)**
|
||||
|
||||
1. После выполнения операции (например, успешной перезаписи системного промпта) ассистент отдает флаг `transaction_completed: true`.
|
||||
2. На фронтенде выезжает блок подтверждения результатов:
|
||||
> «Желаемый результат получен?»
|
||||
> `[ 👍 Да, закрыть ]` `[ 👎 Нет, продолжить ]`
|
||||
3. **Клик «Да»:** Отправляет триггер на сервер $
|
||||
ightarrow$ бэкенд выполняет:
|
||||
```sql
|
||||
DELETE FROM chat_messages WHERE session_id = ? AND is_ephemeral = 1;
|
||||
```
|
||||
и очищает `session_states`.
|
||||
4. **Клик «Нет»:** Оставляет промежуточный контекст активным для продолжения редактирования.
|
||||
|
||||
---
|
||||
|
||||
## 🧹 Подготовка к старту
|
||||
|
||||
1. Предварительная зачистка кода от старых регулярных выражений и системных костылей в `llm/agent.py` и `llm/core/tool_injector.py`.
|
||||
@@ -0,0 +1,19 @@
|
||||
# 🏛️ Архитектурный план: Двухуровневая очистка контекста и управление чатами
|
||||
|
||||
## 🎯 Концептуальная суть
|
||||
* **Для пользователя (UI):** Полноценный, наглядный интерфейс с интерактивными превью, карточками и кнопками действий.
|
||||
* **Для нейросети (LLM):** Идеально «стерильное» окно контекста, очищенное от тяжелых временных черновиков (`is_ephemeral = 0`), что исключает галлюцинации и принуждает модель использовать функции SQLite (Single Source of Truth).
|
||||
* **Событийно-счетчиковая очистка:** Временные данные хранятся ровно столько, сколько нужно для завершения задачи или уточняющих вопросов, после чего безопасно зачищаются.
|
||||
|
||||
---
|
||||
|
||||
## 📋 Пошаговый план реализации (Step-by-Step)
|
||||
|
||||
### **Шаг 1. Модификация схемы Базы Данных (SQLite)**
|
||||
* Добавление флага эфемеральности в таблицу `chat_messages`:
|
||||
```sql
|
||||
ALTER TABLE chat_messages ADD COLUMN is_ephemeral INTEGER DEFAULT 0;
|
||||
is_ephemeral = 0 — постоянные сообщения (вопросы, итоговые отклики, фиксированные задачи).is_ephemeral = 1 — временные рабочие выводы инструментов (превью системного промпта, промежуточные срезы/снапшоты, черновики).Шаг 2. Разделение каналов истории и задел под изолированные сессии (Multi-Chat)Канал UI (Пользователь): Функция выгрузки истории для веб-интерфейса отдаёт все сообщения (is_ephemeral = 0 и 1), обеспечивая прозрачность работы.Канал LLM (Оллама API): В функцию db_get_chat_history передается жесткий фильтр:SQLSELECT role, content FROM chat_messages
|
||||
WHERE session_id = ? AND is_ephemeral = 0
|
||||
ORDER BY id DESC LIMIT 12;
|
||||
Изолированные чаты (Перспектива):Создание сущности чатов (chat_id / session_id).У каждого чата свой изолированный контекст.Ручное удаление чата физически очищает все связанные записи в chat_messages и session_states.Шаг 3. Интеллектуальный TTL-счетчик временного контекста (Auto-TTL)Временный контекст (is_ephemeral = 1) НЕ сбрасывается мгновенно, если пользователь задает уточняющие вопросы в рамках той же темы.Вводится счетчик сопутствующих сообщений (например, N = 3..5 сообщений).Если оператор задает $N$ сообщений подряд, не относящихся к активному инструменту, или переключается на другой инструмент — временный контекст автоматически зачищается/деактивируется.Шаг 4. UX-завершение транзакции (Кнопки «Да / Нет»)После выполнения операции (например, успешной перезаписи системного промпта) ассистент отдает флаг transaction_completed: true.На фронтенде выезжает блок подтверждения результатов:«Желаемый результат получен?»[ 👍 Да, закрыть ] [ 👎 Нет, продолжить ]Клик «Да»: Отправляет триггер на сервер $\rightarrow$ бэкенд выполняет DELETE FROM chat_messages WHERE session_id = ? AND is_ephemeral = 1 и очищает session_states.Клик «Нет»: Оставляет промежуточный контекст активным для продолжения редактирования.🧹 Подготовка к стартуПредварительная зачистка кода от старых регулярных выражений и системных костылей в llm/agent.py и llm/core/tool_injector.py.Выполнение scripts/clear_history.py для старта с чистого листа.
|
||||
Reference in New Issue
Block a user