Скрытая начинка AI-агентов: почему все ошибаются
Скрытая архитектура AI-агентов: почему все ошибаются
Если ты хоть раз работал с AI-агентами, наверняка замечал эту странность: иногда агент идеально следует сложным инструкциям, а иногда игнорирует базовые правила, которые ты буквально только что написал.
Тебе это не кажется. Всё объясняет фундаментальная архитектура, которая стоит за каждым агентом. Поняв её, начинаешь видеть логику там, где раньше был хаос.
Всё решает while-true цикл
Секрет в том, что архитектура AI-агента до нелепого проста. По сути это while-true цикл, который накапливает данные в массиве.
while True:
user_input = get_input()
response = llm.complete(user_input)
if response.wants_tool:
result = execute_tool(response.tool_call)
response = llm.complete(result)
print(response)
Вот и всё. Вся магия — вокруг этого цикла. tool definitions, system prompts, управление контекстом — это просто обёртка.
Массив, о котором идёт речь — это context window. Каждый API-вызов отправляет всю накопленную переписку. Каждый новый виток добавляет данные. Сама модель между вызовами остаётся полностью stateless.
В твоём контекстном окне лежит: system prompt, описания инструментов, сообщения пользователя, ответы ассистента, результаты вызова инструментов, и всё остальное, что ты туда загрузил. Этот массив растёт с каждым запросом.
Проблема умной зоны
Вот где начинается самое интересное. Большинство разработчиков думают, что context window однородно — положил информацию, и модель обрабатывает её одинаково.
Нет.
Первые примерно 40% контекстного окна — это зона ясного мышления. Умная зона. Дальше внимание расплывается. Выбор инструментов становится халатным. Инструкции теряются. Цель ускользает.
Отсюда понятно, почему добавление контента иногда делает агента хуже. Frontier-модели надёжно следуют примерно 150-200 инструкциям. После этого порога даже чёткие правила в начале промпта игнорируются.
Задумайся: если ты грузишь system prompts, описания инструментов, историю переписки и документацию — полезные инструкции могут оказаться за пределами умной зоны.
Проблема распределения, о которой все молчат
Статический контент — скрытый враг производительности агента.
До начала разговора ты, скорее всего, уже забил контекстное окно вещами, которые кажутся необходимыми: развёрнутые system prompts, длинные описания инструментов, memory banks, MCP-настройки, ссылки на документацию.
Всё это статическое содержимое съедает умную зону ещё до первого сообщения пользователя.
Результат: твои самые важные инструкции — те, что определяют поведение агента для конкретной задачи — конкурируют за место в сокращающейся умной зоне.
Вот почему лучшие агенты начинают с чистого листа. Новая сессия — пустое контекстное окно. Никакого накопленного мусора. Никаких конфликтующих инструкций от предыдущих задач. Только то, что нужно для текущей работы.
Context rot: тихий режим отказа
Вот что коварно в управлении контекстом: ничего не ломается.
В обычном софте ты получаешь ошибки, исключения, видимые сбои. Но с контекстными окнами каждый вызов успешен. Модель отвечает. Просто со временем она... становится хуже.
Окно то же. Модель та же. Просто забивается.
Это context rot — постепенная деградация производительности агента по мере заполнения контекстного окна накопленной историей, результатами вызовов, ссылками на документы. Ошибки не будет. Просто агент станет менее надёжным, менее сфокусированным, менее послушным.
Это фундаментально отличается от обычных багов. Это не сбой — это проблема ёмкости. И подкрадывается незаметно.
Как заставить умную зону работать
Понимание этих принципов ведёт к практическим стратегиям.
Начинай чисто под каждую задачу. Не используй уставшее окно от предыдущего проекта. Новые задачи — новые сессии. Чистый лист, полная умная зона.
Загружай только то, что нужно здесь и сейчас. Та MCP-интеграция, которая полезна для другой работы? Исключи. Заметки от другого проекта? Они просто занимают место. Безжалостно фильтруй то, что попадает в контекст.
Сбрасывай на диск. Большие файлы остаются на диске. В окно идут только краткие выжимки. Файл всегда можно прочитать — после того как сжал его для контекста.
Используй суб-агенты для побочных задач. Когда агенту нужно исследовать что-то второстепенное — запусти суб-агента. Пусть разберётся и вернёт один абзац. Не давай исследованиям засорять основной контекст.
Оставляй место внизу. Когда агент закончил основную работу, нужно ещё доделать мелочи — написать тесты, закоммитить код, прогнать линтеры. Если контекст забит под завязку, для этого финального шага не останется места.
Разбивай большие задачи на сессии. Когда задача не влезает в одно окно — сначала спланируй. Запиши спецификацию на диск. Пусть несколько агентов подхватывают работу друг у друга.
Главный вывод
Каждая сессия начинается с нуля. Контекст не организует себя сам.
Кто-то должен заниматься распределением контекста, его ротацией, сжатием и восстановлением. Кто-то решает, что стоит держать в умной зоне, а что сбросить на диск.
Anthropic поставляет каркас агента — while-true цикл, выполнение инструментов, интеграцию с LLM. А вот слой вокруг — это твоя ответственность. Управление контекстом. Постановка задачи. Дизайн system prompt.
Понимание этой архитектуры не сделает тебя AI-гуру за один день. Но даст каркас для диагностики, когда агенты начинают чудить, и словарь для системного мышления об управлении контекстом.
В следующий раз, когда агент начнёт игнорировать инструкции, ты точно будешь знать, куда смотреть: сколько умной зоны ещё свободно и что её заполняет.
Вот она, скрытая архитектура. Теперь иди и создавай что-то.