# spike/extract_atoms.py — выводы ## Результаты спейка (2026-09-14) **Тест:** 2 статьи (glvrd-research.md, promotion-plan-unikor-v2.md) → 387 атомов. - **Эмбеддинг bge-m3:** ~19ms/atom (батчами по 5) - **Qdrant:** коллекция `content_atoms` (dim=1024, Cosine) - **Дедуп:** 17 дублей найдено (порог 0.85) ## Ключевые находки ### Qdrant source build (1.18.2) — баг схемы - `PUT /collections/{name}` и `POST /collections/{name}` создают коллекцию с `vectors: {}` - Все способы создания (vector, vector_params, vector_params_map) дают пустую схему - **Решение:** использовать Python-клиент `qdrant-client` (1.19.0) — он правильно формирует запросы - `create_collection(collection_name=..., vectors_config=VectorParams(size=1024, distance=Distance.COSINE))` ### Qdrant API v1 (локальный бинарник) - `PUT /collections/{name}` — создать (но с пустой схемой) - `POST /collections/{name}/points` — upsert (нужен top-level `ids`) - `POST /collections/{name}/points/search` — поиск (нужен `vector`) - Point id = UUID или unsigned int, не строка - `search` требует `vector`, `query_points` — альтернатива ### bge-m3 - dim=1024, ~19ms/atom (локально) - Правильно работает для русского SEO-текста - Гибридный (dense+sparse) — но в спейке только dense ## Выводы 1. **bge-m3 + Qdrant работают** — дедуп между доменами ловится (17 дублей) 2. **Qdrant source build** — использовать Python-клиент, не raw HTTP 3. **Масштаб:** 387 атомов за 7.4с → ~50 доменов × 200 атомов = ~10000 атомов за ~3мин (приемлемо) 4. **Следующий шаг:** MVP stage 1 (`extract` → `atom_versions` → web-канал)