Контекстное окно и токены. Ч. 2. Управление настройками
Практика
Контекст:
Контекстное окно и токены. Ликбез
🛠️ Два уровня настройки
❗️ Их нельзя путать.
🔧 Уровень 1. Клиент (Open WebUI) — настройка RAG-параметров
• Chunk Size — размер фрагмента в токенах
- Таблицы/цифры: 256–512
- Сплошной текст: 512–1024
• Chunk Overlap — перекрытие между чанками (10–20% от Chunk Size)
• Top‑K — сколько чанков отправляем
- Большие документы: 3–5
- Маленькие таблицы: 10–15
⚙️ Уровень 2. LM Studio — сколько модель может принять
Параметр модели. Он задаётся до загрузки весов в память.
Как изменить Context Length:
1. LM Studio → My Models → шестерёнка у модели
2. Поле `Context Length` (`n_ctx`) → новое значение
3. Обязательно: Сохранить → выгрузить → загрузить модель заново. LM Studio не умеет подхватывать изменения на лету.
⚠️ Увеличение Context Length в 2 раза увеличивает потребление KV‑кэша примерно в 4 раза (квадратичная зависимость). Если после увеличения модель не загружается — включите CPU Offload.
⚙️ CPU Offload — когда видеокарте тяжело
Если модель не влезает в VRAM, часть вычислений можно переложить на процессор. Медленнее (CPU считает хуже GPU). Для RAG — актуально, когда нужно увеличить `n_ctx`, а видеопамяти не хватает.
🚨 Выходное окно (`max_tokens`)
❗️Не путай контекстное окно (вход) с длиной ответа (выход).
- Context Length (`n_ctx`) — сколько токенов модель читает
- Max Tokens (`max_tokens`) — сколько токенов модель генерирует
⚠️ Эти параметры независимы, но оба упираются в общий бюджет памяти модели.
📊 Примеры расчётов
Текст, 10 страниц (≈ 4 K слов)
- 4 K × 0.75 = 3 K токенов
- Chunk Size = 512, Top‑K = 3 → 1536 токенов в промпт
Итог: ~2 K токенов — влезает
Таблица, 30×5
- ~1,5 K–2 K токенов сырых
- Chunk Size = 256, Top‑K = 10 → все чанки в промпт
Итог: ~2,5 K токенов — влезает
😱 Документ больше контекстного окна
Документ на 8686 токенов при n_ctx = 8192
Результат: ошибка
n_keep >= n_ctxРешение зависит от ресурсов и структуры документа:
• Нет VRAM → используй только чанки (экономь память)
• Есть VRAM → увеличить окно
• Документ цельный (связанные абзацы) → увеличь окно и отдай документ целиком
• Документ рыхлый (можно вырезать куски) → разбивай смело на чанки
✂️ Как чанки режут разные типы файлов
Текст
Режется по границам предложений или абзацев. Риск — потеря смысла на стыках.
Решается Overlap (10–20% от Chunk Size).
Таблицы
⚠️ Самый опасный случай! Чанкинг режет таблицу по строкам. Если строки связаны между собой (суммы, итоги, зависимости) — модель теряет логику.
Для таблиц лучше: увеличивать n_ctx (если таблица небольшая) или преобразовывать таблицу в текст.
Код
Режется по строкам или функциям. Может разорвать логические блоки → модель не увидит целостность функции.
PDF с колонками
Режется как текст, но ломает порядок колонок (теряется смысл). Лучше отдать не pdf, а текстовый документ.
Правило: таблицы и структурированные данные не любят чанкинг. Их надо отдавать модели целиком (увеличивай n_ctx).
🔄 Регулярные задачи
- Новый чат — сбрасывает историю (проще всего)
- Очистить историю — вручную в Open WebUI
- N-последних сообщений — не отправлять при каждом запросе всю историю, а только только последние N (см. настройки: Context Messages, History Length, Max Messages in Context)
Правило:
Разные документы → разные чаты
Один документ → можно один чат, но чистить историю (иконка корзины)
🧩 Алгоритм
• Оценить размер документа в токенах: `символы ÷ 4` (для русского языка)
• Выбрать режим загрузки в Open WebUI: < 2 K токенов → «Полный контекст» (весь файл), если больше → включите RAG с чанками
• Chunk Size: таблицы 256, текст 512/1024
• Overlap: 10–20%
• Top‑K: 3–5 (большие доки) или 10–15 (маленькие)
• Проверить сумму: `(Chunk Size × Top‑K) + вопрос + системный промпт + max_tokens` < 80% от `n_ctx`
• Не влезает? Уменьшить Chunk Size или Top‑K. Или увеличить `n_ctx` в LM Studio
• Перезагрузить модель: если изменил любые настройки модели