104 lines
8.0 KiB
Plaintext
104 lines
8.0 KiB
Plaintext
# Спецификация входа для генерации эмбеддинга главы
|
||
|
||
Текст, который передаётся в модель эмбеддингов (по умолчанию BAAI/bge-m3), строится из **валидированного анализа главы**. Источник полей — JSON анализа по схеме из ARCHITECTURE_SUMMARY.md (блоки framework, insights, application). Цель — сохранить смысл для семантического поиска: по вектору ищут главы по смыслу (принципы, инсайты, техники), а не по сырому тексту.
|
||
|
||
---
|
||
|
||
## ЧТО ВКЛЮЧАТЬ
|
||
|
||
В текст для эмбеддинга входят **только** блоки анализа:
|
||
|
||
1. **Framework (каркас):** принципы (title, description, example), terms (термин → краткое пояснение), при необходимости — ключевые цепочки cause–mechanism–result (кратко).
|
||
|
||
2. **Insights (инсайты):** title, description (и при необходимости example) по каждому инсайту. Без лишних метаполей.
|
||
|
||
3. **Application (применение):** техники — name, goal, steps (кратко или полный список), при необходимости context_example. То, по чему будет искаться «как это применить».
|
||
|
||
**Не включать:**
|
||
- Оригинальный текст главы.
|
||
- Limitations — по умолчанию не включать (опционально через конфиг).
|
||
- Теги — хранятся в payload Qdrant, в вектор не входят.
|
||
|
||
---
|
||
|
||
## ПОРЯДОК И ФОРМАТ СЕРИАЛИЗАЦИИ
|
||
|
||
**Язык текста:** тот же, что и язык главы (или основной язык книги). Для мультиязычных коллекций — зафиксировать в конфиге (например, всегда русский / всегда язык главы).
|
||
|
||
**Порядок секций** (приоритет при truncation — сверху вниз):
|
||
|
||
```
|
||
FRAMEWORK
|
||
{framework}
|
||
|
||
INSIGHTS
|
||
{insights}
|
||
|
||
APPLICATION
|
||
{application}
|
||
```
|
||
|
||
**Разделители:**
|
||
- Между секциями: заголовок секции (FRAMEWORK, INSIGHTS, APPLICATION) + пустая строка.
|
||
- Внутри секции: элементы разделять переносом строки или маркером «—»; не склеивать в один абзац. Пример: каждый принцип — с новой строки; каждый инсайт — с новой строки; каждая техника — с новой строки.
|
||
|
||
**Формат полей:** читаемый текст с подписями («Принцип: …», «Инсайт: …», «Техника: …») или компактный структурированный текст. Избегать сырого JSON без подписей; предпочитать человекочитаемую склейку.
|
||
|
||
**Подстановки при сборке:**
|
||
- `{framework}` — строка из JSON блока framework (принципы, terms; chains при необходимости).
|
||
- `{insights}` — строка из JSON блока insights.
|
||
- `{application}` — строка из JSON блока application.
|
||
|
||
**Пример сериализации (фрагмент):**
|
||
|
||
```
|
||
FRAMEWORK
|
||
|
||
Принцип: Правило двух минут. Описание: Если действие занимает меньше двух минут — сделай его сразу. Пример: ответ на короткий email, вынести мусор.
|
||
Термины: атомная привычка — сверхмалое действие, повторяемое ежедневно.
|
||
|
||
INSIGHTS
|
||
|
||
Инсайт: Привычки формируют идентичность. Мы меняемся не через цели, а через системы и повторяющиеся действия.
|
||
|
||
APPLICATION
|
||
|
||
Техника: Снижение барьера входа. Цель: начать действие без откладывания. Шаги: сформулировать версию привычки «на 2 минуты»; выполнять её в одно и то же время; после закрепления — расширять.
|
||
```
|
||
|
||
**Нормализация перед подачей в модель:** схлопнуть множественные пробелы и переносы в один; обрезать пробелы по краям строк и в начале/конце итогового текста. Это уменьшает разброс из‑за форматирования.
|
||
|
||
---
|
||
|
||
## ЛИМИТ МОДЕЛИ И СТРАТЕГИЯ ПРЕВЫШЕНИЯ
|
||
|
||
- **Лимит (bge-m3):** 8192 токенов на вход. Полный анализ главы обычно укладывается. Для других моделей — лимит указывать в конфиге.
|
||
|
||
- **Если текст укладывается в лимит:** передать один сконкатенированный текст (FRAMEWORK + INSIGHTS + APPLICATION) в один вызов модели.
|
||
|
||
- **Если текст длиннее лимита** — выбрать одну из стратегий (зафиксировать в конфиге):
|
||
|
||
1. **truncate_priority:** обрезать текст до лимита. Сохранять в порядке приоритета: сначала APPLICATION (техники важны для поиска), затем INSIGHTS, затем FRAMEWORK. Отбрасывать с конца не поместившегося блока.
|
||
|
||
2. **truncate_per_section:** обрезать до лимита, сохраняя начало каждой секции. Сначала поместить начало FRAMEWORK, затем начало INSIGHTS, затем начало APPLICATION, пока не исчерпается лимит.
|
||
|
||
3. **chunk_aggregate:** разбить текст **последовательно** (с начала к концу) на чанки по лимиту; получить вектор для каждого чанка; усреднить векторы (или другой способ агрегации) и сохранить один итоговый вектор. Способ агрегации — в конфиге.
|
||
|
||
---
|
||
|
||
## ВЫХОД
|
||
|
||
- Один вектор фиксированной размерности. Для bge-m3 — **1024**. При смене модели размерность меняется; коллекции Qdrant создавать с соответствующим size.
|
||
- Вектор сохраняется в Qdrant в коллекции `chapter_analyses`. Payload — по схеме из ARCHITECTURE_SUMMARY.md: bookId, chapterId, chapterNumber, chapterTitle, validationScore, tags и др. Текст анализа в payload при необходимости хранить отдельно или не хранить (по политике системы).
|
||
|
||
---
|
||
|
||
## КОНФИГУРАЦИЯ
|
||
|
||
- Модель эмбеддингов: env/конфиг (по умолчанию EMBED_MODEL=bge-m3).
|
||
- Лимит токенов модели: конфиг (для bge-m3: EMBED_MAX_TOKENS=8192).
|
||
- Размерность вектора: для bge-m3 — 1024; при смене модели задавать в конфиге и пересоздавать коллекции Qdrant.
|
||
- Стратегия при превышении: конфиг (truncate_priority | truncate_per_section | chunk_aggregate).
|
||
- Включение limitations в текст: опционально, конфиг (по умолчанию false).
|
||
- Язык сериализации (при мультиязычности): опционально, конфиг (например, chapter_lang | book_lang | fixed:ru).
|