diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 9071aa6..2649ac2 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -37,7 +37,7 @@ **Решение:** Состояние = детерминированная свёртка журнала через reducer. Replay верифицируется в CI. Exactly-once через Transactional Outbox + Idempotency Key + Saga. -**Почему:** локальные модели non-deterministic → без детерминированного executor'а нельзя гарантировать повторяемость. +**Почему:** локальные models non-deterministic → без детерминированного executor'а нельзя гарантировать повторяемость. **Альтернативы:** - Хранение snapshot'ов состояния — дороже, сложно мержить. @@ -171,7 +171,7 @@ - Контекст меняется: то, что актуально сегодня (версия, железо, модели), завтра устаревает. Идея устойчивее инструментов. **Как применять:** -1. Прочитать как карту возможностей («что вообще возможно»). +1. Прочитать как карту возможностей (« что вообще возможно»). 2. Выбрать кандидатов под MVP и реальные задачи. 3. Протестировать на железе: latency, качество, consumption GPU. 4. Отбросить то, что не показывает результат; оставить то, что работает. @@ -180,6 +180,28 @@ --- +## 12. Модель встраиваний: тест EmbeddingGemma 2 вместо bge-m3 + +**Решение:** Рассмотреть EmbeddingGemma 2 (Google) как замену или дополнительную модель для эмбеддингов вместо bge-m3. Тестировать, не менять сразу. + +**Почему:** +- Сервер a2000 — 2× RTX 3080 Ti. bge-m3 (dim=1024, тяжёлая) занимает GPU целиком; чтобы освободить 3080 под LLM-инференс, её надо выключать. +- EmbeddingGemma 2 — лёгкая embed-модель (~200M). На фоне 24/7-фоновой эмбединговой нагрузки она не вытесняет LLM-инференс агента и не требует «выключить 3080», чтобы освободить GPU. +- Для фоновой ингестсии (не интерактив) приоритет — низкое consumption GPU в фоне, а не максимальное качество поиска. + +**Ключевое ограничение (обязательно учитывать):** +- Разный размер вектора = переиндексация. В контент-atom bge-m3 — единственная embed-модель (dim=1024); смена модели меняет размер вектора → переиндексация Qdrant + Postgres/pgvector. +- Значит замена — не «подкрутил конфиг», а пересборка эмбеддингов. Делать осознанно, лучше как отдельный запуск-эксперимент, а не в боевом контуре. + +**Как проверять (на железе, не по описанию):** +- recall@k / MRR на реальных задачах против bge-m3. +- Latency эмбединга и consumption GPU параллельно с LLM-инференсом (не должно OOM'ить 3080). +- Если EmbeddingGemma 2 даёт приемлемый recall и не давит GPU — кандидат в MVP-стек. Иначе остаёмся на bge-m3. + +**Статус:** к тестированию (гипотеза, не решение к внедрению). + +--- + ## Статус решений | # | Решение | Статус | @@ -195,3 +217,4 @@ | 9 | MVP-стратегия | Принято | | 10 | Связь с spark-mind | Принято | | 11 | Обзор технологий (не инструкция) | Принято | +| 12 | EmbeddingGemma 2 vs bge-m3 | К тестированию |