docs: bge-m3 как единственная модель + 8 проактивных рисков
This commit is contained in:
1 parent
7daa75a995
commit
ad180cc518
1 file changed
+39
-2
@@ -304,9 +304,46 @@ CREATE TABLE runs (
|
||||
1. **Хранение атомов:** Postgres (истина) + Qdrant (эмбеддинги). Postgres уже в Docker — один чистый инстанс `atom-db` с `pgvector` + `pg_trgm`. Атомы/версии/композиции/стоимость — в Postgres. Эмбеддинги + дедупликация — в Qdrant.
|
||||
2. **Панель:** отложить до V5.
|
||||
3. **V4 граф:** Apache AGE (расширение Postgres), не Memgraph. GraphOutbox/воркер не нужны.
|
||||
4. **Эмбеддинги:** bge-m3 (установлен в Ollama 2026-09-14, 1024 дим, 8192 контекст, мультязычный, гибридный dense+sparse). MVP можно на nomic-embed-text (уже в Ollama), на продакшен — bge-m3.
|
||||
4. **Эмбеддинги:** bge-m3 — единственная модель для MVP и продакшена (установлен в Ollama 2026-09-14, dim=1024, 8192 контекст, мультязычный, гибридный dense+sparse). Не переключаться между nomic/bge-m3 — разный размер вектора (512 vs 1024) и разная система поиска = переиндексация и баги дедупа.
|
||||
5. **Домены:** 50 доменов, разделение по `role` (flagship/satellite/experiment/service). Технические домены (`service`) НЕ индексируются в семантику — дедуп только между SEO-доменами. Атомы привязаны к `project_id`, сборка — в рамках одного домена (защита footprint).
|
||||
6. **Postgres:** чистый инстанс `atom-db` (не использовать outline-postgres/coolify-db — они в продакшене). `pgvector` + `pg_trgm` + `btree_gin`.
|
||||
|
||||
---
|
||||
|
||||
*Версия 1.0 — roadmap по этапам. Детальные задачи (TDD) — на этапе реализации каждого уровня.*
|
||||
## Риски и как их избежать (проактивно, 2026-09-14)
|
||||
|
||||
### Риск 1: Разный размер вектора → переиндексация Qdrant
|
||||
**Проблема:** bge-m3 = dim 1024, nomic = dim 512. Если в MVP использовать nomic, а потом перейти на bge-m3 — коллекция Qdrant пересоздаётся, все эмбеддинги переиндексируются.
|
||||
**Решение:** сразу bge-m3 (dim=1024). Размер коллекции Qdrant фиксируется на старте. Проверить: `curl http://127.0.0.1:6333/collection/<name>` → `vector_size` должен быть 1024.
|
||||
|
||||
### Риск 2: Postgres-контейнеры уже заняты
|
||||
**Проблема:** `outline-postgres-1` и `postgres-zyo10oksv4l1i8s35zhrxijf` — в продакшене (outline, twenty, coolify). Нельзя тащить `atom-db` в них.
|
||||
**Решение:** отдельный инстанс `atom-db` с `pgvector`+`pg_trgm`. Проверить свободный порт (сейчас 543x заняты — взять 5434). Тест: `CREATE EXTENSION pgvector;` на пустом БД.
|
||||
|
||||
### Риск 3: pgvector — не в базовом образе
|
||||
**Проблема:** `postgres:16` не включает pgvector по умолчанию.
|
||||
**Решение:** образ `pgvector/pgvector:pg16` (официальный, уже с расширением) или `CREATE EXTENSION` при старте контейнера. Проверить: `SELECT name FROM pg_available_extensions WHERE name='pgvector';` → `installed_version` не NULL.
|
||||
|
||||
### Риск 4: bge-m3 — latency под нагрузкой
|
||||
**Проблема:** 1024-мерные эмбеддинги + гибридный поиск на 50 доменах → медленная индексация.
|
||||
**Решение:** эмбеддить батчами (по 10-20 атомов), асинхронно, не на критическом пути. Qdrant держит ivfflat/hnw-индекс. Проверить latency: `curl /api/embeddings` → ~200-500ms на запрос (нормально для локальной модели).
|
||||
|
||||
### Риск 5: Дедуп между техническими и SEO-доменами
|
||||
**Проблема:** 50 доменов, часть технические (wiki, docs, сервисы) — их текст «дублируется» с SEO-статьями по терминологии.
|
||||
**Решение:** `role='service'` исключается из семантической коллекции Qdrant. Дедуп только между `flagship/satellite/experiment`. Проверить: `WHERE role IN (...)` при эмбеддинге.
|
||||
|
||||
### Риск 6: pg_trgm + gin — место на диске
|
||||
**Проблема:** GIN-индекс по `plain_text` (trigram) на 50 доменах → раздувание.
|
||||
**Решение:** только для SEO-доменов, `pg_trgm` на `plain_text` атомов (не на всех полях). Monitor: `SELECT pg_size_pretty(pg_relation_size('atoms'));`.
|
||||
|
||||
### Риск 7: bge-m3 в Ollama vs embed-сервер
|
||||
**Проблема:** Ollama-эмбеддинги — медленнее, чем специализированный embed-сервер (e.g. Instructor, FastEmbed).
|
||||
**Решение:** MVP на Ollama bge-m3 (готово). Если latency станет проблемой — вынести embed в отдельный FastAPI-сервис (FastEmbed на CPU, dim=1024, ~10x быстрее). Не делать сразу.
|
||||
|
||||
### Риск 8: Qdrant-коллекция для атомов
|
||||
**Проблема:** Qdrant уже используется (`knowledge_base` и др.) — риск конфликта命名/конфигурации.
|
||||
**Решение:** новая коллекция `content_atoms` (dim=1024, distance=Cosine). Не трогать существующие коллекции. Проверить: `curl /collections` → `content_atoms` отсутствует → создать.
|
||||
|
||||
---
|
||||
|
||||
*Версия 1.1 — roadmap по этапам + фиксация решений + проактивные риски. Детальные задачи (TDD) — на этапе реализации каждого уровня.*
|
||||
Reference in new issue
Block a user