diff --git a/History/opus-vision-es.md b/History/opus-vision-es.md new file mode 100644 index 0000000..b60212b --- /dev/null +++ b/History/opus-vision-es.md @@ -0,0 +1,75 @@ +# Opus 4.8 — Видение: LLM-driven Event Sourcing нового поколения + +**Дата:** 2026-06-23 + +--- + +## Оценка текущей архитектуры + +**Частично соответствует лучшим практикам ES. Нарушает две аксиомы:** + +### 1. Событие должно быть фактом, а не интерпретацией +Классика: событие — «что произошло» (PriceChanged), объективный факт. +У нас: ADD/UPDATE/DELETE — интерпретация документа моделью, не факт. +Настоящий факт: «загружен допник №3 с таким текстом». + +### 2. События должны быть детерминированы +Классика: реплей даёт то же состояние. +У нас: та же модель + тот же документ = могут быть другие ops (стохастичность LLM). + +**Вывод:** прагматичный гибрид. Не «неправильно», но неклассически. + +--- + +## Двухслойный лог (ключевая идея) + +- **Слой 1 — сырые факты:** `DocumentIngested(text_hash, bytes, order)`. Детерминированные, реплеятся идеально. +- **Слой 2 — интерпретация:** `SpecChangeProposed` с метаданными (model_id, prompt_version, input_hash, raw_response, temperature). +- `spec_current` — проекция слоя 2. + +Даёт: перепрогнать слой 1 новой моделью без потери истории. + +--- + +## Неизведанные идеи + +### 1. Версионная ре-интерпретация +Апгрейд модели → перепрогон всего потока → параллельная spec_current_v2 → сравнение дрейфа на истории. Версионирование *понимания* данных. + +### 2. Provenance каждой строки +«Эта услуга пришла из допника №3, вот исходный абзац, reasoning LLM, confidence 0.82». UI «почему здесь эта цифра». + +### 3. Human-correction как событие → flywheel +Правка юзера = `SpecChangeCorrected(by=user)` = regression-тест + размеченный пример. Бесплатный датасет качества. + +### 4. «Prompt CI» — промпты как код с тестами +Из human-corrections → golden dataset. Изменение промпта → eval-харнесс. Регрессионные тесты для промптов. + +### 5. Confidence-gating + self-consistency +N прогонов (или 2-3 модели) → консенсус. Согласные ops → авто. Расхождения → ручная проверка. Лечит нестохастичность. + +### 6. Эмбеддинги вместо name_hash +Векторный матчинг сущностей внутри event-проекции. «Аренда стойко-места…» с разными тире → один вектор. + +### 7. Temporal queries — «спецификация на дату» +UI-ползунок по времени: «как выглядел договор на 2025-03-01». Технически возможно уже сейчас. + +### 8. Outbox/Saga + idempotency keys +Exactly-once через HTTP-границы Lucee↔Python↔LLM. Для надёжности при мульти-юзерах. + +### 9. Constrained decoding (GBNF-грамматика) +Форсировать валидный JSON ops на уровне декодера LLM. Убирает ошибки парсинга. + +--- + +## Приоритеты (от Opus) + +| Приоритет | Идея | Зачем | +|---|---|---| +| 🔥 Высокий | Двухслойный лог | Чинит детерминизм, открывает всё | +| 🔥 Высокий | Provenance-метаданные | Аудит, доверие, миграция моделей | +| 🔥 Высокий | Human-correction как событие | Flywheel: бесплатный eval-датасет | +| ⭐ Средний | Эмбеддинги для матчинга | Решает name_hash надёжнее | +| ⭐ Средний | Temporal UI | Killer-фича почти даром | +| ⭐ Средний | Confidence-gating | Убирает тихие ошибки | +| 🧪 Исслед. | Версионная ре-интерпретация | Сравнение моделей на истории |