Дата публикации
ai_products

Как выжать из GPT-4 и Gemini максимум: 8 архитектурных приёмов вместо гонки за размером LLM

Что нового

Microsoft на реальных продакшн‑проектах с генеративным ИИ показывает неприятную статистику и довольно трезвый рецепт, как с ней жить:

  • Чистый вызов API к GPT‑4, Claude, Gemini на задачах со строгой структурой (код, DAX‑запросы, доменное рассуждение) даёт только 35–40% точности.
  • Промпт‑инжиниринг поднимает планку до ≈60%.
  • Оставшиеся 35+ процентных пунктов приходятся не на «следующую версию модели», а на архитектуру системы вокруг LLM.

Автор предлагает 8 архитектурных «столпов», собранных из продакшн‑систем GenAI. Они:

  • уменьшают стоимость запросов к LLM до –70–80% за счёт маршрутизации и кэшей;
  • сокращают среднюю задержку ответов до <200 мс для 70–80% трафика;
  • поднимают точность за счёт детерминированных проверок, контекста и фидбэка.

Ключевая идея: использовать GPT‑4, Claude, Gemini и другие LLM как один компонент, а не как весь продукт. Вокруг — база знаний, правила, кэши и валидация.

Ниже — коротко по каждому из восьми столпов.

  1. Обогащение промптов проверенным контекстом: +35–40% точности, самый мощный рычаг.
  2. Трёхуровневая маршрутизация (Tier 0/1/2): до 80% экономии и –85% задержки.
  3. Явные правила «анти‑паттернов»: +8–10% точности, минус 80% типовых структурных ошибок.
  4. Динамический few‑shot: +5–15% точности.
  5. Детерминированная валидация и авто‑фиксы: +3–5% сверху и постоянное улучшение.
  6. Мульти‑агентная оркестрация с малым числом агентов: меньше латентности и поломок.
  7. Многоуровневый кэш: +40–50% к скорости, совокупный hit‑rate 85%+.
  8. Полная наблюдаемость и авто‑обучение: система сама подсказывает, что чинить дальше.

Как это работает

1. Промпты с проверенным знанием вместо «угадайки» из обучения

Главный источник ошибок в продакшене — галлюцинированные идентификаторы: LLM придумывает имена таблиц, полей, функций, которые в вашей системе не существуют.

Причина проста: GPT‑4 или Claude 3 обучались на общем корпусе, а работают по вашим приватным БД, API, схемам, которых в обучении не было.

Решение:

  • В каждый запрос добавлять явный контекст:
    • типы и схемы данных;
    • спецификации API;
    • онтологии и конфигурации;
    • каталоги сущностей.
  • Агрессивно фильтровать: в контексте на один запрос — 5–10 максимально релевантных сущностей, а не тысячи.
  • Хранить знание в графе или поисковом индексе:
    • запрос: «есть сущность X, какие атрибуты и ограничения нужны вместе с ней?»;
    • ответ: нужный подграф для промпта.
  • Обогащать сущности семантическими метаданными:
    • типы, диапазоны значений, связи, usage‑ноты.
  • Постоянно синхронизировать контекст с источником правды (БД, репозитории, конфиги), чтобы не подсовывать устаревшие схемы.

LLM занимается тем, что умеет лучше всего — композицией и рассуждением, а не точным вспоминанием имён полей. Вспоминание берёт на себя детерминированный поиск по графу/индексу.

2. Три уровня маршрутизации: от шаблона до LLM

Наблюдение из реального кейса (NL → Power BI DAX):

  • 60–70% запросов можно закрыть без LLM вообще.

Система делится на три уровня:

Tier 0 — шаблоны (template slot‑filling)

  • Обрабатывает запросы, которые точно совпадают с известными паттернами.
  • Механика: извлекаем параметры → подставляем в заранее подготовленный шаблон.
  • LLM не вызывается.
  • Задержка: ≈50 мс.
  • Точность: 95–98%.

Tier 1 — композиция из проверенных фрагментов

  • Запрос комбинирует уже известные паттерны в новой форме.
  • Система достаёт заранее валидированные «кирпичики» через поиск, детерминированно собирает результат и валидирует.
  • LLM также не нужен.
  • Задержка: ≈200 мс.
  • Точность: 90–95%.

Tier 2 — полноценная генерация LLM с обогащённым контекстом

  • Для действительно новых запросов, которые нельзя собрать из шаблонов и блоков.
  • В промпт попадают:
    • отфильтрованный контекст;
    • релевантные примеры;
    • явные правила и план.
  • Один вызов LLM.
  • Задержка: 2–5 секунд.
  • Точность: 88–93%.

Маршрутизация по сложности

Каждый запрос оценивает лёгкий скоринг (<1 мс) по параметрам:

  • глубина рассуждения;
  • число компонентов;
  • количество кросс‑ссылок и вложенности;
  • «новизна» относительно известных паттернов.

Дальше простое правило:

  • 0–39 баллов → Tier 0.
  • 40–59 → Tier 1, если уверенность ≥85%, иначе Tier 2.
  • 60+ → Tier 2.

На реальных данных такая маршрутизация даёт 96%+ точности выбора уровня.

Результат:

  • 70–80% запросов не расходуют токены LLM.
  • Большинство ответов приходят <200 мс, а не 2–5 секунд.
  • Детерминированные уровни гарантируют одинаковый результат на одинаковый ввод.

3. Анти‑паттерны как правила в системном промпте

Ошибки LLM — почти всегда повторяющиеся паттерны, а не чистый рандом. В любом домене 80% проблем укладываются в 6–13 типовых структурных ошибок.

Подход:

  1. Прогоняете 100+ запросов, собираете фейлы.
  2. Классифицируете ошибки и для каждой делаете правило:
    • конкретный «плохой» пример;
    • конкретный «хороший» пример;
    • одно предложение, почему первый неверен.
  3. Вшиваете этот список прямо в system prompt:
    • сразу после описания задачи;
    • до примеров.
  4. Используете жёсткую разметку: заголовки, жирный шрифт, «НИКОГДА НЕ ДЕЛАЙ …».
  5. Держите список коротким: 6–13 правил максимум.
  6. Раз в квартал обновляете: старые ошибки уходят, появляются новые.

LLM сильно реагирует на явные негативные примеры. Формулировка «будь аккуратен с X» почти не помогает, а пара «неправильно → правильно» резко снижает частоту повторения ошибки.

4. Динамический few‑shot, а не статический блок в промпте

Жёстко зашитые примеры быстро перестают попадать в контекст задачи. Лучше каждый раз подбирать 3–5 наиболее релевантных примеров под конкретный запрос.

Архитектура:

  • Гибридный поиск по хранилищу примеров:
    • keyword/BM25 — ловит точные совпадения по терминам и идентификаторам;
    • векторный поиск — ловит похожий смысл и структуру при других формулировках.
  • Rank fusion объединяет результаты и пересортировывает по общей релевантности.

Практика:

  • Сложные запросы → показываем сложные примеры, простые → простые.
  • Добавляем 1–2 негативных примера «плохо → хорошо» для текущего типа запроса.
  • Эмбеддинги считаем на этапе индексации, а не на каждый запрос.
  • Кэшируем результаты поиска для повторяющихся паттернов.
  • Лучше 3 отличных и разных примера, чем 10 средних.
  • Регулярно чистим и обновляем хранилище примеров.

Даёт +5–15% точности в зависимости от сложности домена.

5. Детерминированный post‑processing: валидация и авто‑фиксы

Даже при хорошем промпте LLM иногда выдаёт почти верный результат с мелкими дефектами:

  • неверный регистр;
  • пропущенный разделитель;
  • слегка искажённое имя сущности;
  • мелкое нарушение формата.

Решение — детерминированный пайплайн после LLM:

  1. Парсинг по формальной грамматике или AST:
    • ANTLR, tree‑sitter, нативные парсеры языка;
    • никаких regex‑ов для сложных структур.
  2. Правила исправления (10–20 штук):
    • нормализация имён и регистра;
    • добавление пропущенных разделителей;
    • ремонт структуры.
  3. Проверка соответствия контексту:
    • каждый идентификатор должен существовать в контексте;
    • неизвестные сущности флагируются.

Принципы:

  • Никаких дополнительных вызовов LLM. Только regex, AST‑трансформации, lookup‑таблицы.
  • Если исправление неоднозначно — лучше пропустить, чем «починить» неправильно.
  • Логируем каждое исправление и его тип.

Это даёт +3–5% точности как страховочную сетку, а главное — формирует фидбэк, который потом уходит в правила анти‑паттернов, шаблоны и контекст.

6. Мульти‑агентная оркестрация, но без зоопарка агентов

Мода на multi‑agent системы часто приводит к избыточному числу агентов, каждый из которых делает по одному шагу. В продакшене это бьёт по:

  • задержке (каждый хоп — сетевой вызов и сбор контекста);
  • потере контекста между агентами;
  • числу точек отказа;
  • сложности отладки.

Практика из реальных систем:

  • Объединяйте агентов, которые всегда идут строго последовательно, в один агент с несколькими шагами.
  • Параллельте независимые операции: поиск контекста и поиск примеров можно крутить одновременно.
  • Разделяйте задачи так, чтобы подзадачи были проще и их можно было отдавать на меньшие и более дешёвые модели (3× экономия, 2× ускорение).
  • На границе каждого агента — строгий контракт: явная схема входа и выхода.
  • Из четырёх агентов только двое максимум должны вызывать LLM, остальные — чистая логика.

Меньше агентов с чёткими границами = меньше латентности, проще дебаг и меньше неожиданных путей исполнения.

7. Многоуровневый кэш

Один кэш обычно ловит только точные повторы. В реальных системах полезно иметь иерархию кэшей, которые ловят разные типы повторов — от полного совпадения до «почти такой же запрос».

При грамотной настройке:

  • совокупный hit‑rate достигает 85%+;
  • средняя задержка падает на 40–50%;
  • расходы на LLM заметно снижаются.

Идея проста: кэшировать не только финальные ответы, но и промежуточные шаги — результаты поиска контекста, подобранные примеры, планы выполнения.

8. Полная наблюдаемость и авто‑обучение

Без метрик архитектура превращается в гадание. Финальный столп — тотальный мониторинг и автоматические петли обучения.

Система постоянно собирает:

  • типы ошибок из валидации и авто‑фиксов;
  • статистику по маршрутизации (насколько часто Tier 2, какие запросы уходят в LLM);
  • hit‑rate на каждом уровне кэша;
  • изменения в паттернах запросов.

Дальше включается «вечный двигатель» улучшений:

  • авто‑фиксы → новые правила анти‑паттернов и обновление системного промпта;
  • частые паттерны → новые шаблоны Tier 0 и фрагменты Tier 1;
  • новые домены:
    • авто‑классификация сущностей по именам, типам и структуре;
    • генерация шаблонов из универсальных паттернов (трансформации, сравнения, композиции, последовательности);
    • автогенерация few‑shot примеров из успешных шаблонных ответов;
    • первые ~100 запросов — ручной разбор только краевых кейсов.

Это сокращает онбординг нового домена с дней ручной настройки до минут автоматического бутстрапа плюс точечный человеческий ревью.

Что это значит для вас

Где это реально помогает

Подход ориентирован на любые продукты, где LLM выдаёт структурированный или полуструктурированный результат:

  • генерация кода и SQL/DAX‑запросов;
  • NL → формальные языки (конфиги, политики, схемы);
  • доменные ассистенты с жёсткими схемами данных (финансы, медицина, промышленные системы);
  • чат‑боты, которые должны опираться на актуальную базу знаний, а не на «память» GPT‑4;
  • агенты‑автоматизаторы, которые вызывают реальные API и не имеют права «придумывать» имена методов.

Если вы:

  • делаете продукт на GPT‑4, Claude 3, Gemini;
  • уже упёрлись в потолок точности при простом промпт‑тюнинге;
  • платите слишком много за токены и время ответа,

то внедрение этих восьми столпов — способ поднять точность до продакшн‑уровня и одновременно снизить чек за LLM.

Где подход не обязателен

Если задача:

  • чисто креативная (тексты, идеи, стили);
  • не требует строгой структуры и валидации;
  • допускает вариативность без «правильного ответа»,

то часть архитектуры можно упростить:

  • меньше детерминированных правил;
  • слабее валидация;
  • можно не строить тяжёлый Tier 0/1.

Но даже там полезны:

  • кэши для повторяющихся запросов;
  • наблюдаемость и фидбэк по ошибкам;
  • обогащение контекстом для снижения галлюцинаций.

Важно про доступность

Описанные приёмы не зависят от конкретного вендора: они работают и с GPT‑4, и с Claude, и с Gemini, и с менее мощными моделями. Но доступ к самим LLM и облачной инфраструктуре может быть ограничен для пользователей из России и часто требует VPN и корпоративной юрлица за рубежом.

Если вы работаете с российскими облаками и локальными LLM, архитектура остаётся той же: меняется только конкретный API.

Место на рынке

Материал говорит не про ещё одну «супермодель», а про архитектурный слой поверх любых LLM. Это важно, потому что голая гонка за размером модели даёт ограниченный выигрыш:

  • переход с «сырого вызова GPT‑4/Claude/Gemini» на «тот же вызов + промпт‑инжиниринг» поднимает точность с 35–40% до ≈60%;
  • дальше рост идёт не за счёт GPT‑4.1 вместо GPT‑4, а за счёт:
    • контекста (+35–40%);
    • правил анти‑паттернов (+8–10%);
    • динамических примеров (+5–15%);
    • детерминированной валидации (+3–5%).

По сути, хорошо спроектированная система с меньшей моделью может обгонять «сырые» вызовы самых дорогих frontier‑LLM на задачах со строгой структурой — и при этом стоить дешевле за счёт:

  • того, что 70–80% запросов вообще не доходят до LLM;
  • многоуровневого кэша с 85%+ hit‑rate;
  • маршрутизации подзадач на более дешёвые модели.

Если вы сравниваете стратегии «подождать GPT‑5» и «перестроить архитектуру вокруг текущих GPT‑4/Claude/Gemini», то в задачах кодогенерации, запросов к БД и доменных ассистентов вторая стратегия даёт более предсказуемый и измеримый выигрыш.

Главные выводы для архитекторов и продакт‑менеджеров:

  • Архитектура важнее размера модели на структурированных задачах.
  • Детерминированные компоненты должны закрывать большинство кейсов, LLM — только по‑настоящему новые и сложные.
  • Ошибки закономерны: их можно собирать, формализовать и запрещать.
  • Система должна учиться сама: каждый авто‑фикс и каждый промах маршрутизатора — сигнал для следующей итерации.
  • Меньше агентов, но с чёткими контрактами — надёжнее, дешевле и проще в сопровождении.

Если вы строите серьёзный продукт вокруг GPT‑4/Claude/Gemini, этот набор из восьми столпов — по сути, чек‑лист для выхода из стадии «демо» в реальный продакшн.


Читайте также