2.5 KiB
2.5 KiB
content-atom — MVP stage 1
extract → Postgres + atom_versions (web) → Qdrant
Атомарный контент-конвейер: статья → типизированные атомы → хранение в Postgres → переупаковка под web-канал → эмбеддинги в Qdrant.
Стек
| Компонент | Что | Почему |
|---|---|---|
| Postgres (atom-db) | атомы (истина) | транзакции, pgvector |
| Qdrant | эмбеддинги + дедуп | векторный поиск, dim=1024 |
| bge-m3 | embed-модель | dim=1024, RU, гибридный |
| Ollama | локальный запуск bge-m3 | offline, ~19ms/atom |
Запуск
1. atom-db (Postgres + pgvector)
docker run -d --name atom-db --restart unless-stopped \
-p 5434:5432 \
-e POSTGRES_USER=atom -e POSTGRES_DB=content_atom -e POSTGRES_PASSWORD=atompass123 \
pgvector/pgvector:pg16
Расширение: CREATE EXTENSION vector; (pgvector 0.8.x).
2. .env
cat > .env.stage1 <<'EOF'
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5434
POSTGRES_USER=atom
POSTGRES_DB=content_atom
POSTGRES_PASSWORD=atompass123
OLLAMA_URL=http://127.0.0.1:11434
EOF
3. Запуск
env $(cat .env.stage1 | grep -v '^#' | tr '\n' ' ') \
python3 stage1/extract_to_postgres.py \
--article article.md --article article2.md \
--project rabota-ufa
Что делает
- extract — разбивает
.mdна блоки, классифицирует по паттернам (claim/stat/qa/hook/cta/instruction/comparison/quote). - Postgres — вставляет атомы в
atoms, генерируетatom_versionsподweb_article(markdown). - Qdrant — эмбеддит bge-m3 (dim=1024), сохраняет в коллекцию
content_atoms.
Результаты
- 387 атомов из 2 статей → Postgres за 0.4с
- 387 atom_versions под web-канал
- 387 эмбеддингов в Qdrant за 11.6с (~30ms/atom)
atom_id
UUID (Postgres PRIMARY KEY). atom_id-хеш использовался в спейке, но для Postgres нужен UUID.
Типы атомов
claim (326), instruction (42), stat (12), qa (5), comparison (1), hook (1).
Schema
db/schema.sql — 5 таблиц: projects, atoms, atom_versions, jobs, runs.
Следующий этап
MVP stage 2 — atom_relations + compositions (второй канал: Telegram, дедup).