59 lines
4.6 KiB
Markdown
59 lines
4.6 KiB
Markdown
# Генерация эмбеддингов (шаг 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, при смене — пересчёт эмбеддингов по необходимости.
|