AML: фреймворк, который позволит собирать AI-агентов как React-компоненты
Новый фреймворк Agent Markup Language позволяет описывать цепочки AI-агентов в привычном для фронтенд-разработчиков JSX-синтаксисе. Разберёмся, что это даёт на практике и где подвох.
Склеивающий код между AI-агентами превращается в основную головную боль. AML пытается решить это, упаковывая логику оркестрации в декларативный JSX — но давайте не будем путать читаемость с надёжностью.
Проблема: клей между агентами
Представьте типичный рабочий процесс: один AI-агент проверяет код на ошибки, другой составляет план тестов, а третий на основе обоих отчётов принимает решение о релизе. Звучит как нечто, что должен описывать фреймворк, но на практике разработчики пишут километры «клеевого» кода.
С OpenAI Codex SDK можно запускать потоки (threads), получать ответы, передавать их следующему агенту через промпт. Код рабочий, но монотонный: управление порядком выполнения, извлечение результатов, склейка промптов вручную. Когда агентов становится пять-шесть, этот клей начинает занимать больше времени на чтение, чем сама бизнес-логика.
Что предлагает AML
Agent Markup Language — это фреймворк с открытым исходным кодом (лицензия MIT), который позволяет описывать взаимодействие AI-агентов через JSX-синтаксис, знакомый каждому React-разработчику.
Вместо того чтобы писать императивный код, вы декларативно описываете, какой агент что делает и куда отправляет свой результат:
function ReleaseReview() {
return (
<Agent provider={Codex} system="Синтезируй данные, не выдумывая факты.">
## Проверка корректности
<Agent provider={Codex}>Проверь текущий diff на ошибки.</Agent>
## План тестов
<Agent provider={Codex}>Напиши минимальный план тестов.</Agent>
Напиши одну рекомендацию по релизу.
</Agent>
)
}
Дочерние агенты выполняются слева направо, их результаты подставляются туда, где они указаны в JSX. Родительский агент стартует только после того, как оба дочерних завершат работу.
Похоже на React, но не React
Авторы AML сознательно скопировали ментальную модель React-компонентов: функции упаковывают поведение, пропсы несут входные данные, JSX визуально показывает потоки данных. При этом AML — не React и даже не его обёртка.
Фреймворк поддерживает:
- Без пропсов — простые агенты без входных параметров
- Массивы и объекты в пропсах — как в обычном React
- Вложенных потомков — агент может принимать результаты других агентов
- Условный рендеринг — boolean-пропс определяет, запускать агента или вернуть текст
- FollowUp — продолжение диалога в той же сессии после сбора всех данных
Контроль потока остаётся за разработчиком. Выходные данные агентов — это просто данные, AML не исполняет сгенерированный моделью JSX как новый рабочий процесс. Это важный архитектурный выбор: никто не может «промпт-инжектировать» новый workflow.
Критический взгляд
Статья красивая, но есть нюансы, которые стоит учитывать.
Первое. Синтаксический сахар — это хорошо, но он не решает фундаментальные проблемы мультиагентных систем. Как верно заметил один из комментаторов: «Reusable agents need inputs, outputs, failure modes, ownership, and stop conditions, not just a clever prompt. Otherwise composition becomes nested uncertainty.» И он прав — AML делает код читаемым, но не гарантирует, что агенты будут вести себя предсказуемо.
Второе. Фреймворк привязан к конкретному провайдеру — OpenAI Codex SDK. Хотя в теории можно подставить другого провайдера, на практике все примеры в документации используют Codex. Это создаёт вендор-лок-ин.
Третье. AML находится на ранней стадии разработки. Использовать такое в продакшене — авантюра. Проекту нужна зрелая экосистема, тесты и реальные кейсы от сообщества.
Кому это нужно
AML может пригодиться разработчикам, которые уже строят сложные AI-пайплайны и устали от императивного «клея». JSX-синтаксис снижает порог входа для фронтендеров и делает workflow читаемым — но это не замена нормальной архитектуре.
Если вы только начинаете работать с AI-агентами, начните с императивного подхода и понимания потоков данных. AML пригодится, когда вы достигнете того масштаба, где клей действительно начинает болеть.
Проект доступен на GitHub под лицензией MIT.