Игорь Градов
Игорь Градов
6 мин
ai

AGIMA показала LLM production pipeline: модель предлагает, код исполняет

Компания AGIMA опубликовала разбор production-архитектуры для ИИ-агентов, где главная идея в том, чтобы модель не выполняла действие напрямую, а формировала предложение, которое проверяет и исполняет обычный код.

AGIMA показала LLM production pipeline: модель предлагает, код исполняет
Почему это важно

Когда ИИ-агент сам вызывает платёжный API или правит данные в CRM, одна ошибка модели превращается в реальный убыток: двойной возврат, удалённую запись, изменённые права доступа. Разделение «предложение модели» и «исполнение кодом» превращает галлюцинацию (когда модель уверенно выдумывает то, чего не было) из катастрофы в отклонённый черновик.

Андрей Непряхин, директор департамента разработки AGIMA, описал подход на примере типовой задачи: пользователь просит ИИ-помощника оформить возврат платежа. Модель разбирает текст, находит заказ, выбирает причину и вызывает API. Если ответ не пришёл за 30 секунд, возникает вопрос: повторять запрос, проверять статус или передавать человеку. Именно здесь архитектура, построенная как единый LLM production pipeline (конвейер от запроса пользователя до реального действия), рассыпается. Слепой повтор может создать второй возврат. Отказ от повтора оставит первый запрос в неопределённом состоянии. Разбор AGIMA показывает, как собрать конвейер так, чтобы каждый участок отвечал за своё.

Workflow или агент: четыре вопроса перед выбором

Непряхин ссылается на инженерный гайд Anthropic, где workflow (рабочий процесс с заранее заданным кодом маршрутом) и агент (процесс, где модель сама выбирает шаги и инструменты) рассматриваются не как ступени эволюции, а как разные ветви архитектуры. Anthropic рекомендует начинать с простейшего достаточного решения и учитывать задержку и стоимость агентной сложности.

Перед выбором ветви автор предлагает ответить на четыре вопроса:

  • Насколько неоднозначен вход? Свободный текст требует интерпретации, а проверка лимита или расчёт обычно имеют точные правила.
  • Можно ли формально проверить результат? JSON-схема проверит типы и обязательные поля, но не уместность компенсации.
  • Известен ли маршрут заранее? Если каждый запрос проходит classify → validate → approve → execute, маршрут уже существует.
  • Какова цена ошибочного действия? Черновик можно удалить, а платёж, публикация или изменение доступа оставляют внешний след.

Если неоднозначен только текст на входе, а маршрут известен, автономный агент добавляет лишние состояния без пользы.

Proposal-паттерн: модель предлагает, код решает

Ключевая идея LLM production pipeline от AGIMA: модель возвращает объект-предложение (proposal), а не выполняет действие. Структура фиксирует, что именно модель «думает», но ничего ещё не меняет.

from dataclasses import dataclass
from decimal import Decimal
from typing import Literal

@dataclass(frozen=True)
class RefundProposal:
    order_id: str
    reason: Literal["duplicate", "quality", "delivery", "other"]
    amount: Decimal
    confidence: float
    evidence_ids: tuple[str, ...]

Поле confidence помогает маршрутизации, но не отменяет бизнес-правило. Автор подчёркивает: порог уверенности нельзя назначать «на глаз» или брать из документации. Его калибруют на размеченных данных (обучающие данные с проставленными правильными ответами) под нужный баланс точности и полноты. В детекторе AGIMA порог 0,2 по калибровке давал точность 1,0, тогда как 0,5 терял около половины полноты.

После получения proposal обычный код заново загружает заказ, сверяет сумму, статус и права вызывающей стороны. Исполнение собрано как цепочка явных «гейтов» (контрольных точек):

def handle_refund(command, actor, store, payments):
    proposal = llm.propose_refund(command.text, command.context)
    validate_schema(proposal)

    order = store.get_order(proposal.order_id)
    validate_business_rules(proposal, order)
    require_permission(actor, "refund", order.account_id)

    if needs_human_approval(proposal, order):
        return queue_for_review(command.id, proposal)

    operation_id = stable_operation_id(command.id, "refund")
    store.save_operation_id(command.id, operation_id)

    return execute_with_reconciliation(
        operation_id=operation_id,
        request=build_refund_request(proposal, order),
        client=payments,
    )

Комментарий автора: operation_id сохраняется до первого внешнего вызова. Иначе рестарт между вызовом API и записью разорвёт связь с операцией, и система потеряет возможность проверить, прошёл ли платёж.

Почему retry опасен для записи?

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

Автор делит тайм-аут на четыре исхода:

  • Запрос не был отправлен: обычный повтор допустим.
  • Удалённая система вернула подтверждённый отказ: повтор зависит от класса ошибки.
  • Запрос отправлен, но ответ потерян: исход неизвестен, сначала нужна сверка.
  • Частичный ответ уже отдан потребителю: автоматически повторять нельзя, даже если есть ключ идемпотентности (механизм, гарантирующий, что повторный вызов не создаст дубль).

Именно третий и четвёртый случаи превращают «умного агента» в источник финансовых ошибок, если весь конвейер спрятан в одном промпте (prompt) и одном цикле агента.

Что делать с этим прямо сейчас?

Автору Дзена и копирайтеру. Если вы подключаете ИИ к публикации (автопостинг, генерация черновиков), стройте по тому же принципу: модель готовит черновик, а скрипт или вы сами проверяете его перед отправкой. Автоматическая публикация без промежуточного «proposal» рано или поздно опубликует галлюцинацию.

Маркетологу. Proposal-паттерн напрямую применим к ИИ-агентам, которые управляют рекламными ставками или рассылками. Любое действие с деньгами или с аудиторией проходит через код-гейт, а не выполняется моделью напрямую.

Предпринимателю в РФ и СНГ. Подход не привязан к конкретному провайдеру. Его можно реализовать с YandexGPT, GigaChat или любой открытой моделью (open-source), развёрнутой на своём сервере. Главное: инференс (inference, процесс получения ответа от модели) отделён от побочных эффектов.

Как это применить

Пользователь пишет в чат-бот: «Верните деньги за заказ 4829, пришло разбитое». Модель формирует RefundProposal с order_id="4829", reason="quality", amount=Decimal("2490.00"), confidence=0.87. Код загружает заказ 4829 из базы, проверяет, что статус позволяет возврат, что сумма совпадает, что у оператора есть права. Если confidence ниже откалиброванного порога или сумма превышает лимит, proposal уходит на ручную проверку. Без proposal-паттерна модель вызвала бы API напрямую, и при тайм-ауте повторный вызов создал бы двойной возврат на 2 490 рублей.

Частые ошибки

Порог confidence «на глаз». Назначить 0,7 потому что «кажется разумным» означает пропустить часть валидных кейсов или, наоборот, пропустить опасные. Калибровка на реальных данных обязательна.

operation_id после вызова API, а не до. Если процесс упадёт между вызовом платёжного API и сохранением идентификатора, система не сможет узнать, прошёл ли платёж. Сохраняйте идентификатор до внешнего вызова.

Весь конвейер в одном промпте. Смешивание интерпретации текста, проверки прав и исполнения в одном цикле агента лишает возможности тестировать каждый участок отдельно. Баг в логике прав маскируется под ошибку модели, и наоборот.

Слепой retry при потерянном ответе. Если запрос был отправлен, но ответ не получен, повтор без сверки может удвоить операцию. Сначала проверьте статус через отдельный запрос.

Мнение редакции dzen.guru

Подход AGIMA ценен не кодом (он намеренно упрощён), а тем, что явно назначает владельцев решений: модель отвечает за предложение, код за схему и факты, человек за исключения. По моим наблюдениям, большинство production-падений с ИИ-агентами происходят именно на границе «модель решила, что можно» и «система выполнила». Proposal-паттерн превращает эту границу из невидимой в тестируемую. Честная оговорка: это не готовая библиотека и не гарантия безопасности. Пример фиксирует архитектурный принцип, а конкретные пороги, схемы валидации и политики retry каждая команда подбирает под свои данные и свою цену ошибки.

Если вы строите ИИ-агента, который делает что-то необратимое, пусть первым вопросом будет не «какую модель взять», а «где в моём конвейере модель перестаёт предлагать и начинает действовать», и кто стоит на этой границе.

Поделиться:TelegramVK
Игорь Градов
Игорь Градов

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».

Комментарии

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

ИИ-стартапы в России и мире: $2,5 млрд оценки без выручки как сигнал пузыря
ai

ИИ-стартапы в России и мире: $2,5 млрд оценки без выручки как сигнал пузыря

Ноа Шинн бросил университет семь месяцев назад и довёл свой стартап Instinct до оценки в 2,5 млрд долларов, хотя сервис до сих пор работает в закрытой бете и…

5 мин
Lightspeed вложит $250 млн только в ИИ: венчурные фонды искусственного интеллекта сужают фокус
ai

Lightspeed вложит $250 млн только в ИИ: венчурные фонды искусственного интеллекта сужают фокус

Lightspeed, один из крупнейших венчурных фондов Кремниевой долины с портфелем в Anthropic, xAI и Databricks, привлекает 250 миллионов долларов в новый фонд…

6 мин
RAG нейросети на 80 000 фрагментов: пять гипотез провалились, спас reranker
ai

RAG нейросети на 80 000 фрагментов: пять гипотез провалились, спас reranker

Я вижу, что источник — это техническая статья на Хабре от ML-инженера Александра Михеева из компании «Рунити» (Центр гибридного интеллекта). Это НЕ раунд…

5 мин