37 lines
2.0 KiB
Markdown
37 lines
2.0 KiB
Markdown
# 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-канал)
|