C
ChaoBro

12-Factor Agents: как правильно проектировать AI-агентов промышленного уровня? Это руководство стоит прочитать каждому разработчику

В 2011 году инженеры Heroku опубликовали документ под названием «12-Factor App». Это не код и не фреймворк, а методология — о том, как создавать масштабируемые и поддерживаемые SaaS-приложения.

Позже этот документ стал де-факто стандартом эпохи cloud-native. Docker, Kubernetes и различные микросервисные фреймворки в своей основе несут гены 12-Factor.

Теперь кто-то решил сделать то же самое для AI-агентов.

humanlayer/12-factor-agents: 21 600 звёзд, 273 коммита. Автор Dex пишет прямо:

Я перепробовал каждый агентный фреймворк — от готовых к использованию CrewAI и LangChain до позиционируемых как «минималистичные» SmolAgents и заявляющих о «промышленном уровне» LangGraph и Griptape. Но большинство продуктов, называющих себя «AI-агентами», на самом деле не обладают настоящей агентностью. По большей части это детерминированный код, в который просто в нужных местах добавили немного LLM.

Звучит резко, но если вдуматься, это действительно так.

Ключевая идея: хороший агент — это не «задай цель и пусть работает сам»

Первый принцип 12-Factor Agents переворачивает представления многих об агентах:

Factor 1: Natural Language to Tool Calls

Основная способность LLM — не «мышление», а преобразование естественного языка в структурированные вызовы инструментов. Это означает, что фокус при проектировании агента должен смещаться на «предоставление правильных инструментов» и «определение корректного формата вызовов», а не на то, чтобы заставлять LLM блуждать в бесконечной свободе.

Factor 8: Own your control flow(掌控你的控制流)

Этот принцип ещё важнее. Многие пишут агентов по схеме: «дай промпт, дай набор инструментов, крути цикл до завершения». 12-Factor чётко заявляет: так нельзя.

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

Краткий обзор 12 принципов

Эти 12 принципов охватывают все аспекты разработки агентов:

  • Factor 1-4 описывают базовую логику «вызовов инструментов»: естественный язык → структурированный вывод → управление контекстом → определение инструментов
  • Factor 5-7 касаются «состояния выполнения»: как единообразно управлять бизнес-состоянием и состоянием выполнения, как приостанавливать/возобновлять работу, как привлекать человека
  • Factor 8-10 относятся к «архитектурному проектированию»: принадлежность потока управления, сжатие ошибок, гранулярность агента
  • Factor 11-12 охватывают «интеграцию и развёртывание»: запуск из любого места, превращение агента в stateless-редьюсер

Я выделил несколько наиболее практичных принципов, чтобы разобрать их отдельно.

Factor 3: Own your context window(掌控你的上下文窗口)

Контекстное окно не бесконечно. 12-Factor подчёркивает, что контекстом необходимо управлять стратегически: какую информацию сохранять, какую сжимать, а какую удалять. В противном случае по мере удлинения диалога производительность LLM будет резко падать.

Factor 7: Contact humans with tool calls(用工具调用联系人类)

Этот принцип очень практичен. Когда агент сталкивается с неоднозначной ситуацией, он не должен «гадать», а должен использовать вызов инструментов для запроса вмешательства человека. Звучит просто, но большинство агентных фреймворков не проектируют это как первоклассную функцию.

Factor 12: Make your agent a stateless reducer(让 Agent 成为无状态的 reducer)

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

Почему это руководство заслуживает внимания?

Потому что главная проблема в разработке AI-агентов сегодня заключается не в «недостаточной мощности технологий», а в том, что «методология ещё не сформирована».

Все экспериментируют, набивают шишки и изобретают велосипед заново. Ценность 12-Factor Agents в том, что он пытается систематизировать этот разрозненный опыт, превратив его в набор принципов, которые можно обсуждать, итеративно улучшать и передавать дальше.

Он не привязан ни к какому фреймворку и не рекомендует конкретный стек технологий. Он отвечает на более фундаментальный вопрос: каких принципов следует придерживаться, когда вы хотите создать на базе LLM по-настоящему рабочий продукт?

Основной источник: GitHub - humanlayer/12-factor-agents