About Portfolio Services Blog Contact 🎙 Talk to AI
EN DE RU
🎙 Talk to AI
May 16, 2026 · 3 min read

Slimming context: как уменьшать токен-контекст без потери качества

Я — Денис Шохирев, Enterprise AI архитектор из Эрлангена, Германия. В DennisCraft AI Studio я внедряю AI-агентов для B2B-клиентов из DACH-региона в логистике, финтехе и промышленной автоматизации. Стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. За последние полгода я внедрил 14 production-агентов, и каждый второй проект упирался в проблему «раздувания» токен-контекста: в реальных пайплайнах промты быстро переростают лимиты моделей, а решения из демо не выдерживают регламентированных

Denis Shokhirev
Denis Shokhirev
Enterprise AI Architect
Telegram LinkedIn

Я — Денис Шохирев, Enterprise AI архитектор из Эрлангена, Германия. В DennisCraft AI Studio я внедряю AI-агентов для B2B-клиентов из DACH-региона в логистике, финтехе и промышленной автоматизации. Стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. За последние полгода я внедрил 14 production-агентов, и каждый второй проект упирался в проблему «раздувания» токен-контекста: в реальных пайплайнах промты быстро переростают лимиты моделей, а решения из демо не выдерживают регламентированных нагрузок.

Почему контекст разрастается в проде

Когда вы проектируете LLM-агента для индустриального клиента, особенно с длинными историческими данными (например, отслеживание грузов или аудиторские логи), размер токен-контекста быстро уходит за тысячи токенов. Claude 3 Opus держит до 200K токенов (Anthropic docs, 2024), но даже это не всегда хватает — особенно если в pipeline несколько агентов, которые пересылают друг другу состояния и результаты.

Проблемы, которые я вижу у клиентов:

  • В логистике — вся история диалога плюс технические данные по грузам, SLA, инструкциям.
  • В финтехе — длинные цепочки транзакций (до 5000 строк на одного пользователя), которые надо анализировать в real-time.
  • В промышленности — логи оборудования, диагностические отчёты, часто превышающие 10K токенов за одну сессию.

Перегруз контекста бьёт по latency и бюджету: inference растёт по времени и стоимости, а качество ответа падает из-за «размытия» релевантной информации.

Топ-5 production-паттернов slimming context

Паттерн Когда использовать Инструменты
Semantic Chunking Большие документы, неструктурированные данные Claude Code, OpenAI cookbook
RAG (Retrieval-Augmented Generation) Базы знаний, поиск по историческим данным Supabase (pgvector), self-hosted Postgres
Context Window Pruning Длинные диалоги, чат-боты n8n, собственные фильтры
Summarization-on-the-fly Логи, отчёты, транзакции Claude, OpenAI GPT-3.5/4, n8n
Schema-based Filtering Структурированные данные, API-ответы Pydantic, custom scripts

Semantic Chunking и RAG на практике

Semantic Chunking

Вместо того чтобы «резать» документы по 1024 или 2048 токенов, режу их по смысловым блокам (абзацам, главам, секциям). Для этого использую python-скрипты с sentence-transformers и стандартными токенизаторами от openai/anthropic. Краткий пример:


from sentence_transformers import SentenceTransformer
import tiktoken

model = SentenceTransformer('all-MiniLM-L6-v2')
tokenizer = tiktoken.get_encoding('cl100k_base')

def semantic_chunks(text, max_tokens=1024):
    sentences = text.split('. ')
    current_chunk = []
    current_len = 0
    for sent in sentences:
        token_len = len(tokenizer.encode(sent))
        if current_len + token_len > max_tokens:
            yield ' '.join(current_chunk)
            current_chunk = [sent]
            current_len = token_len
        else:
            current_chunk.append(sent)
            current_len += token_len
    if current_chunk:
        yield ' '.join(current_chunk)

Этот паттерн особенно хорош для длинных регламентов или инструкций.

RAG с Supabase и pgvector

В проде для поиска по историческим данным всегда использую RAG-паттерн: индексация документов в pgvector (Supabase), быстрый поиск топ-N релевантных чанков, отправка только их в LLM. Пример pipeline на n8n:


// n8n custom function for RAG
items = $input.all();
const query = items[0].json.query;
const results = await $supabase
  .from('documents')
  .select('content, embedding')
  .order('embedding', { ascending: false })
  .limit(5);
return results.data;

Такой подход «сжимает» контекст с 20K токенов до 1-2K без потери релевантности.

Context Window Pruning и Summarization

Context Window Pruning

Для диалоговых агентов внедряю sliding window: только последние 5-7 сообщений, плюс summary по истории. Итоговый prompt всегда укладывается в 2-3K токенов. Это критично для latency и стабильности. В n8n или python-функциях реализую фильтрацию:


def prune_context(messages, max_tokens=2048):
    pruned = []
    total = 0
    for msg in reversed(messages):
        tokens = len(tokenizer.encode(msg['content']))
        if total + tokens > max_tokens:
            break
        pruned.insert(0, msg)
        total += tokens
    return pruned

Summarization-on-the-fly

Для логов и длинных цепочек данных запускаю промежуточное суммирование на каждом этапе пайплайна. Например, каждые 1000 событий агрегирую summary с помощью GPT-4 или Claude, чтобы сохранить суть, а не детали. Это особенно актуально для финтех-агентов, где нужно видеть только аномалии или outliers.

Schema-based Filtering: когда структура — друг

Если данные строго структурированы (JSON, API-ответы), фильтрую только нужные поля через Pydantic или собственные фильтры. Это «холодный» способ выкинуть шум до попадания в prompt.


from pydantic import BaseModel

class Transaction(BaseModel):
    id: str
    amount: float
    date: str
    status: str

def filter_transactions(raw):
    txs = [Transaction(**t) for t in raw if t['status'] == 'active']
    return txs

FAQ

Какая реальная экономия токенов?

На практике slimming-паттерны уменьшают итоговый prompt в 5-10 раз (с 20K до 2-4K токенов) без падения качества. Считаю savings через OpenAI tokenizer и анализ latency/стоимости.

Есть ли разница между Claude и OpenAI по контекст-менеджменту?

Да, у Claude лучше переносится длинный контекст (до 200K), но prompt-оптимизация нужна и там — latency и стоимость растут нелинейно.

RAG всегда лучше, чем summary?

Нет, для диалогов или событийных данных summary эффективнее. RAG — для поиска по документам.

А что с безопасностью при slimming?

Важно не выбрасывать security-значимые фрагменты. Для этого использую semgrep/bandit/gitleaks для автоматического поиска паттернов в данных.

Нужно ли делать тесты на каждом slimming-этапе?

Да, иначе легко потерять критичные данные. Покрываю пайплайны тестами — как минимум через pytest и ручную валидацию.

В вашем prod-LLM pipeline где чаще всего «раздувается» контекст — на этапе сбора данных, передачи между агентами или при логировании? Готов обсудить. Я провожу бесплатный 30-мин аудит стека для DACH-компаний, кто строит AI в регламентированных отраслях. Пишите в LinkedIn или на @ger_dennis_ai.

Ready to build?

Turn your process into an AI system

Fixed price. Production quality. DACH B2B focus.

Start a project → ← All articles