Files
content-atom/README-stage1.md
T

2.5 KiB
Raw Blame History

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

Что делает

  1. extract — разбивает .md на блоки, классифицирует по паттернам (claim/stat/qa/hook/cta/instruction/comparison/quote).
  2. Postgres — вставляет атомы в atoms, генерирует atom_versions под web_article (markdown).
  3. 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).