4.6 KiB
Генерация эмбеддингов (шаг 6)
Отдельный шаг пайплайна после мержа анализа и тегов (шаг 5). В вектор превращается валидированный анализ главы (каркас, инсайты, применение), а не сырой текст — поиск идёт по смыслу, а не по формулировкам.
Модель
- По умолчанию: BAAI/bge-m3 (bge-m3). Мультиязычная модель, хорошая поддержка русского; размерность вектора 1024, лимит контекста 8192 токенов — полный анализ главы обычно укладывается без обрезки. Размер ~1.2GB, ~5–15 сек на главу.
- Лимит входа: 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, при смене — пересчёт эмбеддингов по необходимости.