doc: видение Opus — LLM-driven ES нового поколения
This commit is contained in:
@@ -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 | Убирает тихие ошибки |
|
||||||
|
| 🧪 Исслед. | Версионная ре-интерпретация | Сравнение моделей на истории |
|
||||||
Reference in New Issue
Block a user