Вы запускаете AI-агента на сложную задачу. Он делает первый шаг. Второй. На третьем — странный халлюцинационный ответ. На четвёртом — забывает контекст. К пятому шагу процесс превращается в цифровую свалку. Знакомо? Это классическая проблема недетерминированных агентов, где каждая ошибка множит следующие.
В 2026 году, когда все говорят про Gemini 3 Flash и её способности к автономной работе, проблема стабильности стала критической. Особенно для production-ready систем, где каждая галлюцинация стоит денег.
Что такое Donna и зачем она вообще нужна
Donna — это не очередной фреймворк для агентов. Это Python-библиотека, которая заставляет AI-агентов работать как стейт-машины. Представьте: вместо того чтобы позволять агенту свободно бродить по задаче, вы определяете конечный автомат. Состояния. Переходы. Чёткие условия.
На 10.02.2026 Donna активно развивается на GitHub, с последним релизом 0.3.2. Проект набирает популярность среди разработчиков, уставших от непредсказуемости сложных агентных систем.
Основная идея проста: вы описываете процесс как последовательность состояний. Агент может переходить между ними только по определённым правилам. Нет состояния «заблудился в своих мыслях». Нет перехода «решил сделать что-то совершенно другое». Только то, что вы явно разрешили.
Как это работает на практике
Возьмём классический пример — обработку клиентского запроса в службе поддержки. В традиционном подходе с planner/executor архитектурой агент может:
- Сначала понять запрос
- Потом искать в базе знаний
- Потом генерировать ответ
- Или... вдруг решить, что нужно сначала уточнить детали у пользователя
- Или... попытаться исправить грамматику в исходном запросе
- Или... зациклиться на уточнении несущественной детали
С Donna вы определяете:
states = [
"parse_query",
"search_knowledge_base",
"generate_response",
"ask_for_clarification",
"finalize"
]
transitions = [
("parse_query", "search_knowledge_base", "if_query_understood"),
("parse_query", "ask_for_clarification", "if_query_unclear"),
("search_knowledge_base", "generate_response", "always"),
("ask_for_clarification", "parse_query", "after_clarification_received"),
("generate_response", "finalize", "response_valid"),
("generate_response", "search_knowledge_base", "response_insufficient")
]
Агент физически не может перескочить из «parse_query» сразу в «finalize». Не может застрять в бесконечном цикле уточнений (если вы явно не разрешили). Каждое состояние — это отдельный вызов LLM с чётким промптом и ожидаемым форматом вывода.
Чем Donna отличается от других подходов
| Подход | Детерминизм | Сложность | Где ломается |
|---|---|---|---|
| Классический ReAct (как в этом гайде) | Низкий | Средняя | В сложных цепочках рассуждений |
| Sub-agents (как в этих сценариях) | Средний | Высокая | При координации между агентами |
| Donna (стейт-машины) | Высокий | Низкая/Средняя | При неучтённых edge-cases |
| Полностью хардкодные workflow | Максимальный | Высокая | При изменении требований |
Главное преимущество Donna — предсказуемость. Вы знаете все возможные состояния системы. Можете протестировать каждый переход. Можете добавить мониторинг и логирование в ключевых точках. Это не «агент как чёрный ящик», а «агент как конечный автомат с наблюдаемыми состояниями».
Важный нюанс: Donna не заменяет память агента. Для работы с долгосрочным контекстом всё равно понадобится что-то вроде подходов из статьи про agent memory state. Но она гарантирует, что агент не забудет, на каком этапе процесса находится.
Реальные сценарии, где Donna спасает ситуацию
1 Многоэтапная обработка документов
Извлечение данных из PDF → валидация → преобразование в JSON → отправка в API. Каждый этап может сломаться. С Donna вы ловите ошибки на этапе валидации и возвращаетесь к извлечению, а не генерируете битый JSON и не ломаете downstream-системы.
2 Диалоговые системы с бизнес-логикой
Пользователь хочет изменить заказ. Агент должен: понять запрос → проверить возможность изменения → рассчитать новую стоимость → подтвердить у пользователя → внести изменения. Пропуск любого шага или изменение порядка = проблемы с бизнес-процессами.
3 Сборка агентов из компонентов
Интересно, что подход Donna хорошо сочетается с концепцией сборки агентов из LEGO. Каждый skill может быть представлен как состояние или группа состояний. Переходы между skills становятся явными и контролируемыми.
Подводные камни, о которых молчат в README
Donna — не серебряная пуля. Вот что бесит на практике:
- Взрывной рост числа состояний. Для сложного процесса легко нарисовать автомат с 50+ состояниями. А потом поддерживать эту схему.
- Жёсткость. Если забыли предусмотреть какой-то переход — агент застревает. Нужно либо добавлять состояние «аварийного выхода», либо мириться с ограничениями.
- Сложность отладки циклов. Разрешили переход из состояния A в B и из B в A? Поздравляю, вы создали потенциальный бесконечный цикл. Donna не предотвращает логические ошибки в проектировании автомата.
И главное: Donna не делает агентов умнее. Она делает их предсказуемее. Если ваша LLM постоянно генерирует мусор на этапе «понимания запроса», Donna лишь гарантирует, что этот мусор не попадёт в следующие этапы. Но не исправит сам мусор.
Кому стоит смотреть в сторону Donna в 2026 году
Если вы делаете:
- Бизнес-критические процессы, где ошибка на раннем этапе ломает весь pipeline
- Системы с чёткими регуляторными требованиями (нужно доказать, что агент следует определённому workflow)
- Комплексные агенты, которые уже выросли из простых ReAct-подходов
- Интеграции, где следующий шаг зависит от успешности предыдущего (цепочки API-вызовов, трансформаций данных)
Тогда Donna может быть тем, что нужно. Особенно если вы уже сталкивались с проблемами, описанными в статье про агентные workflow на практике.
Если же вы прототипируете идею, делаете исследовательский проект или ваш агент выполняет одну простую операцию — Donna добавит ненужной сложности. Иногда достаточно классического подхода с ReAct и инструментами.
Что дальше? Будущее детерминированных агентов
На 10.02.2026 тренд ясен: мир устал от непредсказуемых AI-агентов. Инструменты вроде Donna, подходы с явными workflow, системы наподобие OpenEnv Hub — всё это попытки ввести порядок в хаос.
Но настоящий прорыв будет, когда детерминизм станет не дополнительной опцией, а базовой частью агентных фреймворков. Когда стейт-машины будут генерироваться автоматически из описания задачи. Когда инструменты вроде Donna будут не отдельной библиотекой, а встроенным модулем в LangChain, LlamaIndex и других популярных фреймворках.
Пока же — Donna остаётся нишевым, но мощным инструментом для тех, кому критически важна предсказуемость. Не для всех. Но для тех, кто строит продакшен-системы, а не прототипы.
И да, если после этого обзора вам захотелось попробовать — не забудьте глянуть репозиторий на GitHub. Там есть примеры, которые сэкономят пару часов понимания, как именно описывать состояния и переходы. А эти часы лучше потратить на проектирование своего автомата. Потому что в Donna, как и в любой стейт-машине, самое сложное — не написать код, а спроектировать правильные состояния.