Self-Correction в мультиагентных системах: 9 шагов, которые

Недетерминированная модель в проде «сыпется» на ерунде: опечатка в ID склада, неверный формат даты. Паттерн Self-Correction превращает её ответы в управляемый конвейер.

Главное правило коммерческих систем: никогда не проверяйте первую LLM второй, если результат можно проверить детерминированным кодом.

Поток по шагам:

Первичный инференс — агент формирует Tool Call (JSON). Проверка аргументов (Pre-check) — Pydantic, структура и типы. Без LLM. Вызов инструмента — API / БД / RAG. Детерминированный бизнес-контроль (Post-check) — ID, остатки, лимиты. Без LLM. Семантическая проверка — LLM-судья ловит галлюцинации, cross-check с данными инструмента. Апрув — валидный JSON уходит в 1С / SAP / CRM.

Если на шаге 2, 4 или 5 — сбой:

Сборка correction-промпта — Recovery Handler собирает контекст. Повторный инференс — счётчик циклов +1, возврат на шаг 1. Эскалация (HITL) — если loop-counter ≥ Max_Loops, задача уходит человеку.

Единая воронка ошибок: все три точки контроля шлют сбой в один Recovery Handler — нет дублирующих циклов, счётчик считает попытки честно.

Как выглядит Correction Prompt изнутри. Фраза «исправь ID склада» заставит модель угадывать (придумает WH-888). Промпт должен быть директивным:

Вы — Агент Закупок. Предыдущая попытка завершилась ошибкой валидации бизнес-правил.

[ОШИБКА]: “warehouse_id”: “WH-999” не существует в системе.

[ДОПУСТИМЫЕ ЗНАЧЕНИЯ]: для региона “Центральный” — [“WH-101”, “WH-102”, “WH-105”].

Сформируйте валидный JSON. Менять другие поля (номенклатуру, объём) запрещено.

Три грабли паттерна и решения:

Семантический дрейф — модель «чинит» лишнее (округлит цену, поменяет комментарий). → Жёсткое указание «менять только поле X, остальное скопировать один в один» + diff-проверка на второй валидации. Бесконечный цикл — модель упёрто повторяет ту же ошибку, жжёт бюджет. → Счётчик на уровне оркестратора (не внутри агента); при iteration ≥ 2 — жёсткий разрыв. Затирание System Prompt — забыли базовую инструкцию, модель «глупеет». → System Prompt — неизменяемый фундамент; ошибки и текущий JSON — динамический хвост в messages.

Итог: код проверяет данные дважды (на входе в инструмент и на выходе LLM), смысл — LLM-судья. Так недетерминированный агент работает в детерминированных рамках.

#AIArchitecture #LLM #MultiAgent #LangGraph #MLOps #AIEngineering

Self-Correction в мультиагентных системах: 9 шагов, которые | Сетка — социальная сеть от hh.ru