alexeyfv

Опубликовано

- 2 мин чтения

Следите за выводом консоли при использовании AI-агентов

AI Agents CLI LLM
img of Следите за выводом консоли при использовании AI-агентов

Я не видел, чтобы кто-то писал об этом, но мне кажется, что это важно, если AI-агенты вызывают CLI утилиты за вас.

Обычно CLI утилиты выводят информацию в консоль. Например, вы внесли изменения в проект с помощью агента, и теперь просите агента выполнить команды вроде npm build или dotnet test. Ниже приведён пример того, как это выглядит в GitHub Copilot, когда агент выполняет команду.

AI agent runs command

Вызываемые команды могут генерировать подробные логи, предупреждения, ошибки и другие сообщения. Даже если только некоторые из них релевантны (например, ошибки, которые мешают компиляции проекта), в контекст добавится вообще всё, что создано в результате вызова команды. Например:

  • Предупреждения об старых (deprecated) зависимостях или предупреждения линтера. Они могут напрямую вообще не влиять на текущую задачу, но всё равно занимают место в контексте. Представьте логи сборки с 500+ строками предупреждений, и каждая из них окажется в контексте вашего агента.

  • ANSI escape-символы, которые задают цвета в консоли или Unicode-символы, делающие вывод консоли красивым. Всё это раздувает контекст без добавления какой-либо пользы. Агентам всё равно на цвет текста, прогресс-бары или результаты в виде ASCII-таблиц.

К примеру, часть результатов вызова команды dotnet build окрашена в жёлтый и синий цвет, что не несёт никакой пользы для агента.

Console output with warnings

Почему это плохо для LLM?

Производительность LLM не равномерна при длинных контекстах. Есть такое явление под названием “lost-in-the-middle”. Его суть в том, что производительность LLM ухудшается, когда релевантная информация размещена в середине контекста. Иногда такой эффект ещё называют “гниением контекста” (context rot). Есть несколько статей на эту тему, например “Lost in the Middle: How Language Models Use Long Contexts”.

Lost in the middle phenomenon

Для агентов это явление часто приводит к следующим проблемам:

  • Агент тратит время на “размышления” о предупреждениях и что с ними делать, вместо решения задачи.

  • Длинный вывод консоли может вытеснить важную информацию из контекста, или информация может быть суммирована (summarization) таким образом, что часть важных деталей потеряется.

  • Суммирование также может занять от 1 до 2 минут в зависимости от модели, что дополнительно замедляет работу агента.

Решение

Если вы видите предупреждения компилятора или линтера, в идеале вам нужно их исправить. Однако это может занять приличное количество времени, особенно если вы работаете с каким-то легаси проектом.

Другой вариант — отключить их. Например, в dotnet можно использовать флаг --verbosity quiet В целом, я бы не рекомендовал это делать, но иногда можно, если нужно срочно выполнить задачу.

Если вы разрабатываете CLI утилиту, подумайте над созданием флага, который настраивает вывод специально для агентов. К примеру, разработчики Microsoft Dev Proxy недавно обсуждали добавление флага --log-for human|machine для более эффективного вывода для LLM.

Заключение

Если вы работаете с AI-агентами, то вывод в консоль перестаёт быть просто логами. Это уже часть промпта. Предупреждения, прогресс-бары и вывод результатов в виде таблиц, ANSI escape-символы занимают контекст LLM. Вывод CLI должен быть минимальным и структурированным, тогда результаты при работе с AI будут более надёжными.