Контекст для AI-агентов: как сократить расходы на токены на 60–90% и не потерять контроль над данными
Я — Denis Shokhirev, Enterprise AI architect из Эрлангена, Германия. В DennisCraft AI Studio я интегрирую AI-агентов для B2B-клиентов DACH на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. Когда твой клиент — не стартап, а банк или логистическая компания, каждая строка токенов и каждый байт данных важны. На одном из последних проектов стоимость токенов в RAG-агенте превышала зарплату middle-разработчика за месяц — потому что никто не думал о правильной архитектуре контекста. Поче
Я — Denis Shokhirev, Enterprise AI architect из Эрлангена, Германия. В DennisCraft AI Studio я интегрирую AI-агентов для B2B-клиентов DACH на стеке Claude, Supabase, n8n, Doppler и self-hosted Postgres. Когда твой клиент — не стартап, а банк или логистическая компания, каждая строка токенов и каждый байт данных важны. На одном из последних проектов стоимость токенов в RAG-агенте превышала зарплату middle-разработчика за месяц — потому что никто не думал о правильной архитектуре контекста.
Почему расходы на токены выходят из-под контроля
Большинство разработчиков AI-агентов начинают с простого подхода: весь релевантный контент (инструкции, базы знаний, документы) отправляется в prompt или system message. При scale это приводит к экспоненциальному росту затрат: за сутки production-агент может отправить LLM миллионы токенов, не замечая, что половина запросов — повторения. Мой рекорд — 480 000 рублей на токены за месяц для одного промышленного бота.
Где чаще всего теряют деньги
- Статичные инструкции для каждого запроса
- Текстовые документы в system prompt
- Результаты поиска по базе знаний без фильтрации
- Дублирующиеся сообщения между agent steps (например, в n8n workflow)
Архитектурные паттерны для сокращения расходов на токены
Вот конкретные подходы, которые я использую в production-агентах для DACH-клиентов, чтобы снизить расходы на 60–90% без потери качества и контроля над данными.
1. Инкрементальное построение контекста
Не отправляйте всю историю user-agent. Собирайте только минимально необходимый контекст для текущего шага. Пример — в n8n через кастомные nodes для извлечения ключевых фрагментов:
def build_context(messages, required_keys):
context = []
for msg in reversed(messages):
if msg['type'] in required_keys:
context.append(msg['content'])
if len(context) >= 4: # ограничиваем глубину истории
break
return "\n".join(reversed(context))
2. Использование Embedding Search вместо полного текста
Вместо отправки целых документов интегрируйте поиск по embedding-индексу (Supabase pgvector, self-hosted Postgres + pgvector). Возвращайте только релевантные абзацы, а не 10 страниц PDF.
from supabase import create_client
supabase = create_client(url, key)
def search_knowledge(query, top_k=3):
# Embedding запроса
embedding = get_embedding(query)
# Поиск по pgvector
rows = supabase.table("knowledge").select("*").limit(top_k).eq("embedding", embedding).execute()
return [row['text'] for row in rows['data']]
3. Кэширование промежуточных результатов
Вместо повторного запроса к LLM сохраняйте результаты часто встречающихся prompt-комбинаций в отдельной таблице Postgres или Supabase.
def get_or_generate_answer(prompt_hash):
answer = db.query("SELECT response FROM cache WHERE hash = %s", (prompt_hash,))
if answer:
return answer[0]
else:
response = call_llm_api(...)
db.execute("INSERT INTO cache (hash, response) VALUES (%s, %s)", (prompt_hash, response))
return response
Контроль над данными: где облачные решения подводят
Для промышленных, финтех- и логистических клиентов DACH региона контроль над данными — не хотелка, а требование регулятора. Я не использую облачные векторные базы (Pinecone, Weaviate), если есть шанс, что данные попадут за пределы EU или будут храниться вне инфраструктуры клиента. Self-hosted Postgres с pgvector — единственный вариант, который проходит аудит.
| Решение | Контроль над данными | Стоимость | Production-опыт |
|---|---|---|---|
| Pinecone | Минимальный | Высокая | Демо |
| Weaviate Cloud | Минимальный | Средняя | Демо |
| Self-hosted Postgres + pgvector | Полный | Низкая | Production |
Безопасность: статический анализ и контроль доступов
Любая оптимизация бессмысленна, если agent утечет данные. Все production-агенты я прогоняю через semgrep и bandit для обнаружения SQL-инъекций и небезопасных вызовов API (см. semgrep.dev, 2024). Доступ к embedding-индексу — только через сервисные аккаунты с ограниченными ролями Supabase или прямым контролем через Postgres GRANT.
FAQ
Стоит ли переходить на self-hosted Postgres ради контроля над данными?
Если у вас DACH-клиенты или финтех, другого выбора нет. Любые облачные embedding-хранилища не проходят аудит и могут привести к штрафам.
Можно ли сжать расходы на токены без потери качества?
Да, при грамотной архитектуре (инкрементальный контекст, embedding search, кэширование). В среднем мои агенты снижают расходы на 65–80% после перехода на эти паттерны.
Какой стек embedding search реально работает в проде?
Supabase с pgvector и self-hosted Postgres — единственный вариант, который стабильно работает под нагрузкой и проходит аудит.
Как мониторить утечки данных через AI-агентов?
Внедряйте статический анализ (semgrep, bandit), логируйте все запросы к embedding-индексу, настраивайте alert-правила по аномалиям доступа.
Что делать, если LLM все равно «спрашивает» лишний контекст?
Жестко ограничивать глубину истории и размер embedding-ответов. Настраивать правила на уровне workflow (например, в n8n), чтобы не передавать лишние блоки.
В каком месте вашей AI-архитектуры расходы на токены оказались неожиданно высокими? Сколько стоила вам эта ошибка? Я провожу бесплатный 30-минутный аудит стека для DACH-команд, которые строят AI в регулируемых рынках. Напишите мне в LinkedIn или на @ger_dennis_ai.
Turn your process into an AI system
Fixed price. Production quality. DACH B2B focus.