Files
tech/6_генерация_эмбеддингов/README.md
2026-02-01 22:02:49 +03:00

4.6 KiB
Raw Blame History

Генерация эмбеддингов (шаг 6)

Отдельный шаг пайплайна после мержа анализа и тегов (шаг 5). В вектор превращается валидированный анализ главы (каркас, инсайты, применение), а не сырой текст — поиск идёт по смыслу, а не по формулировкам.

Модель

  • По умолчанию: BAAI/bge-m3 (bge-m3). Мультиязычная модель, хорошая поддержка русского; размерность вектора 1024, лимит контекста 8192 токенов — полный анализ главы обычно укладывается без обрезки. Размер ~1.2GB, ~515 сек на главу.
  • Лимит входа: 8192 токенов (bge-m3). При превышении — стратегия из embed_input_spec.txt (truncation или chunk + агрегация).
  • Альтернативы: nomic-embed-text, evilfreelancer/enbeddrus (для более лёгкого режима). Модель задаётся конфигом; при смене — пересоздание коллекций Qdrant (размерность 1024 для bge-m3).

Вход

Выход шага 5 (мерж): валидированный анализ главы (framework, insights, application) — сериализуется в текст по спецификации embed_input_spec.txt. Теги в вектор не входят; они хранятся в payload Qdrant для фильтрации.

Выход

Вектор эмбеддинга фиксированной размерности (1024 для bge-m3). Сохраняется в Qdrant в коллекции chapter_analyses (коллекция создаётся с size=1024) вместе с payload (book_id, chapter_id, validation_score, tags и т.д.).

Спецификация входа

Файл Назначение
embed_input_spec.txt Рецепт построения текста для эмбеддинга: какие поля, порядок, приоритет при truncation

Подстановки при построении текста

  • {framework} — сериализованный блок framework (принципы, terms, chains)
  • {insights} — сериализованный блок insights
  • {application} — сериализованный блок application

Ограничения и limitations в эмбеддинг по умолчанию не включаются (опционально — в конфиге). Теги — только в payload, не в тексте для эмбеддинга.

Скрипт через Ollama

run_embed_ollama.py — один вызов Ollama /api/embed для генерации вектора по JSON шага 5. Текст для эмбеддинга собирается из framework, insights, application по embed_input_spec.txt (функция merged_json_to_embed_text из embed_cli.py).

Вход (по умолчанию):

  • ../5_мерж_анализа_и_тегов/merged_with_tags.json — результат шага 5 (анализ + теги)

Выход: embedding.json в каталоге скрипта — массив float (вектор размерности 1024 для bge-m3).

Запуск:

cd 6_генерация_эмбеддингов
python3 run_embed_ollama.py
# с указанием путей:
python3 run_embed_ollama.py --merged /path/to/merged_with_tags.json -o embedding.json
# другая модель или URL Ollama:
python3 run_embed_ollama.py --model bge-m3 --ollama-url http://localhost:11434

Универсальный CLI (OpenAI-совместимый API)

embed_cli.py — для LM Studio или другого OpenAI-совместимого API (позиционные аргументы: путь к JSON, имя модели, опционально --base-url, -o).

Использование в пайплайне

Вызывается после шага 5 (мерж анализа и тегов). Модель задаётся конфигом (env/конфиг); смена модели не меняет формат хранения в Qdrant, при смене — пересчёт эмбеддингов по необходимости.