From 86b648c8d9bbe166cca0f9496d34cfbe6fa55faf Mon Sep 17 00:00:00 2001 From: neo Date: Tue, 13 Oct 2026 22:08:24 +0500 Subject: [PATCH] =?UTF-8?q?ADR-12:=20=D1=82=D0=B5=D1=81=D1=82=20EmbeddingG?= =?UTF-8?q?emma=202=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20bge-m3=20(?= =?UTF-8?q?=D0=BE=D1=81=D0=B2=D0=BE=D0=B1=D0=BE=D0=B4=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?3080=20Ti=20=D0=B4=D0=BB=D1=8F=20LLM-=D0=B8=D0=BD=D1=84=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D1=81=D0=B0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ARCHITECTURE.md | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) 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 | К тестированию |