Добавить в корзинуПозвонить
Найти в Дзене
Цифровой Путь

Промпт — плохой исполнительный слой: почему AI-агенты работают нестабильно

AI-агент обрабатывал клиентские заявки. Системный промпт — 2 800 токенов: порядок шагов, валидация, retry, маршрутизация. Стабильность: 72%. Переписывал промпт 3 недели — довёл до 81%. Потолок. Сколько ни полируй формулировки — LLM интерпретирует их вероятностно. «Сначала А, потом Б» — для модели это совет, не приказ. Вынес управление выполнением в код (Python + LangGraph) — стабильность 97%. Та же модель, те же данные. 🔹 **Порядок шагов** → граф в LangGraph. Агент не может пропустить шаг — переходы жёсткие. 🔹 **Валидация** → Pydantic-схема. Промпт «проверь сумму» работает в 85% случаев. Pydantic — в 100%. 🔹 **Retry** → код с лимитом 3 попытки и backoff. Без лимита агент однажды сделал 38 повторных вызовов за 4 минуты ($12 за один запрос). 🔹 **Маршрутизация** → `if/elif/else` с приоритетами. Промпт не описывал, что делать, когда заявка — одновременно жалоба и срочная. Код — описывает однозначно. 🔹 **Состояние** → typed dict. «Помни, что клиент проверен» — в промпте забывается на д
Оглавление

AI-агент обрабатывал клиентские заявки. Системный промпт — 2 800 токенов: порядок шагов, валидация, retry, маршрутизация. Стабильность: 72%.

Переписывал промпт 3 недели — довёл до 81%. Потолок. Сколько ни полируй формулировки — LLM интерпретирует их вероятностно. «Сначала А, потом Б» — для модели это совет, не приказ.

Вынес управление выполнением в код (Python + LangGraph) — стабильность 97%. Та же модель, те же данные.

Что вынес из промпта

🔹 **Порядок шагов** → граф в LangGraph. Агент не может пропустить шаг — переходы жёсткие.

🔹 **Валидация** → Pydantic-схема. Промпт «проверь сумму» работает в 85% случаев. Pydantic — в 100%.

🔹 **Retry** → код с лимитом 3 попытки и backoff. Без лимита агент однажды сделал 38 повторных вызовов за 4 минуты ($12 за один запрос).

🔹 **Маршрутизация** → `if/elif/else` с приоритетами. Промпт не описывал, что делать, когда заявка — одновременно жалоба и срочная. Код — описывает однозначно.

🔹 **Состояние** → typed dict. «Помни, что клиент проверен» — в промпте забывается на длинных цепочках. `client_verified: bool` — не забывается никогда.

Главное правило

Если инструкцию можно записать как if/else — ей не место в промпте.

Промпт сжался с 2 800 до 400 токенов. Одна задача на шаг. LLM думает — код управляет.

+25 процентных пунктов стабильности без смены модели.