# Генерация эмбеддингов (шаг 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). **Запуск:** ```bash 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, при смене — пересчёт эмбеддингов по необходимости.