Технологии

Что такое ИИ-агент и почему это не чат

Агент отличается от чата тремя проверяемыми признаками: цикл, инструменты, состояние. Разбираем каждый и показываем, как отсеять продукты, которые называют себя агентами зря.

Слово «агент» за последние два года прилипло почти ко всему. Агентом называют чат-бота с кнопкой «поиск в интернете», надстройку над таблицей, скрипт с одним HTTP-запросом и полноценную систему, которая сама открывает браузер и правит файлы. В результате читатель, который выбирает инструмент, не может сравнить два продукта: у обоих на лендинге написано «AI agent», а внутри разные вещи.

Это не филологическая придирка. От того, агент перед вами или нет, зависят три практических вещи: сколько денег вы потратите на токены за один запрос, что произойдёт при ошибке модели и кому вы отдаёте право на действие. Чат, который ошибся, выдал плохой текст. Агент, который ошибся, удалил папку.

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

#Определение через три признака

Система является агентом, если выполнены одновременно все три условия:

  1. Цикл. Модель вызывается не один раз, а в петле: вывод очередного шага становится входом следующего. Петлю замыкает программа, а не человек.
  2. Инструменты. У модели есть способ повлиять на мир за пределами своего текста: прочитать файл, сходить в сеть, записать строку в базу. Результат инструмента возвращается в контекст.
  3. Состояние. Между шагами что-то сохраняется: список наблюдений, план, промежуточные результаты. Без состояния каждый шаг начинается с нуля, и цикл не сходится.

Три признака — это чек-лист. Возьмите любой продукт и задайте три вопроса:

  • Может ли он сделать несколько шагов подряд, пока я не нажимаю ничего?
  • Есть ли у него хоть один инструмент, меняющий что-то вне чата?
  • Помнит ли он результат шага 2 на шаге 5?

Три «да» — агент. Два «да» — чат с инструментами, полезная и часто более разумная штука, но не агент. Одно «да» — просто чат.

Граница между «чат с инструментами» и «агент» проходит по тому, кто замыкает петлю; подробный разбор этой промежуточной ступени — в материале о том, где проходит граница между агентом и чат-ботом.

#Как выглядит цикл изнутри

Базовая петля почти во всех реализациях одна и та же и известна как ReAct — reasoning + acting. Схематично один проход:

запрос пользователя
      │
      ▼
┌─────────────────────────────────────┐
│ 1. МЫСЛЬ    модель решает, что      │
│             делать дальше           │
│ 2. ДЕЙСТВИЕ модель печатает вызов   │
│             инструмента             │
│ 3. ВЫПОЛНЕНИЕ  ваш код исполняет    │
│                вызов                │
│ 4. НАБЛЮДЕНИЕ  результат дописан    │
│                в контекст           │
└─────────────────────────────────────┘
      │
      ├── условие остановки не выполнено ──▶ назад к шагу 1
      │
      ▼
ответ пользователю

Ключевой и постоянно упускаемый пункт — третий. Модель ничего не выполняет. Она выдаёт текст, который ваш код распознаёт как просьбу вызвать инструмент, и решение выполнять или нет принимает код. Это не деталь реализации, а место, где живёт вся безопасность системы; разбор этого механизма — в статье про function calling и точку ответственности.

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

#Инструменты: что агент реально умеет

Инструмент — это функция вашей программы с описанием, которое видит модель. Описание попадает в системный промпт: имя, назначение, список параметров. Модель, увидев его, может напечатать вызов в оговорённом синтаксисе.

Инструменты принято делить по тому, что они могут испортить. Это деление не косметическое: оно определяет, какие вызовы допустимы без человека.

Класс Что делает Пример Можно ли без подтверждения
Чтение Не меняет ничего список файлов, поиск в сети Да
Сетевой риск Ходит по произвольным адресам открыть страницу в браузере Нет, нужна проверка адреса
Изменение Пишет локально, обратимо создать файл, поставить напоминание По ситуации
Выполнение Запускает код команда в терминале Нет
Разрушение Необратимо удаляет удалить папку Нет

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

Отдельная сложность — откуда инструменты берутся. Раньше каждый клиент интегрировал каждый инструмент отдельно, и число связок росло как произведение. Ответ индустрии — единый протокол подключения, MCP, который превращает произведение в сумму.

#Типовые режимы отказа

У агента отказы устроены иначе, чем у чата. Чат либо ответил плохо, либо не ответил. Агент может отработать «успешно» и оставить после себя мусор. Пять режимов, которые встречаются чаще остальных:

Режим отказа Как выглядит снаружи Где ловится
Сломан синтаксис вызова Агент «рассказывает», что сделал, ничего не сделав Парсер вызова не нашёл ни одного вызова
Неверное наблюдение Уверенный неправильный ответ Первый вызов инструмента в трассировке
Блуждание Много шагов, нет прогресса Повторяющиеся аргументы у одного инструмента
Упёрся в лимит Обрыв на середине Счётчик шагов достиг предела
Частичное действие Файл создан, но не дописан Сравнение состояния диска с намерением

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

Первые четыре режима видны в трассировке, и почти всегда — раньше, чем в финальном ответе. Поэтому логи вызовов включаются до того, как включается первый пишущий инструмент, а не после первого неприятного случая.

#Состояние: чем агент отличается от последовательности запросов

Можно вызвать модель пять раз подряд и не получить агента. Пять независимых запросов — это пять чатов. Агентом система становится, когда пятый шаг знает, что произошло на втором.

Состояние в агенте бывает трёх сортов, и их постоянно смешивают:

  • Контекст хода — то, что физически лежит в промпте прямо сейчас: цель, наблюдения, промежуточные выводы. Живёт до конца задачи, ограничен окном модели.
  • Память — факты, которые переживают задачу: предпочтения, имена, проекты. Это отдельное хранилище, а не длинный промпт.
  • Навык — записанная процедура: «когда просят собрать отчёт, делай так-то». Тоже переживает задачу, но описывает не факт, а способ действия.

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

#Планирование: почему цикла мало

Голая петля «мысль — действие — наблюдение» хорошо работает на задачах в три-четыре шага. Дальше она начинает бродить: модель делает разумный локальный выбор, но теряет общую цель.

Ответ — план. Практика показала, что план, составленный один раз в начале, тоже почти всегда ломается: он строился на предположениях о мире, а первое же наблюдение эти предположения опровергает. Работает перепланирование — короткий план, который пересматривается после значимых наблюдений. Сравнение обоих подходов на одном примере — в разборе того, как агент разбивает задачу на шаги.

#Когда агент — неправильный инструмент

Это самый важный раздел статьи, и в большинстве материалов про агентов его нет.

Задача решается одним запросом. Если ответ — это текст, который модель может выдать сразу, петля добавляет только стоимость и задержку. Перевести абзац, переформулировать письмо, объяснить термин — здесь агент вреден.

Задача решается детерминированным кодом. Переименовать файлы по маске, разложить строки по столбцам, посчитать сумму — всё это делает скрипт: быстрее, дешевле, воспроизводимо и без риска, что модель «поймёт по-своему». Модель уместна там, где нужна интерпретация неструктурированного текста, а не там, где правило можно записать.

Цена ошибки высока, а проверить результат дорого. Агент, который делает бухгалтерскую проводку или пишет в продовую базу, экономит минуты и создаёт риск на порядки больше. Если проверка результата занимает столько же времени, сколько сама работа, автономность не даёт выигрыша.

Модель маленькая, а шагов много. Компактные локальные модели удовлетворительно делают один-два вызова инструмента и начинают путать формат на третьем-четвёртом. Это не настройка, а свойство размера. Подробнее — ниже и в отдельном разборе.

Нет способа посмотреть, что агент делал. Без трассировки агент — чёрный ящик, который иногда прав. Отладка такой системы состоит из угадывания.

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

#Мифы и заблуждения

«Агент — это автономный ИИ, который сам решает, что делать». Агент решает, какой из заранее данных ему инструментов вызвать. Список инструментов, границы каталогов, лимит шагов и права задаёт человек в коде. Автономность агента ровно такова, какой её сделали, и ни на грамм больше.

«Модель сама выполняет команды». Нет. Модель печатает текст. Например, в Persona это буквально текстовый маркер вида <tool>list_dir({"path": "."})</tool>, который разбирается регулярным выражением в app/mcp/builtin_tools.py, и только потом соответствующая функция запускается кодом. Ни один провайдер модели ничего на вашей машине не запускает.

«Больше агентов — лучше результат». Для личных задач чаще наоборот: каждый дополнительный агент — это дополнительные вызовы модели, дополнительная точка потери контекста и дополнительный способ ошибиться. Мультиагентные схемы оправданы в узком наборе случаев, и «сложная задача» в него не входит.

«Агент запомнит всё, что происходило». Контекст хода — не память. По завершении задачи он исчезает, если его специально не сохранили в отдельное хранилище. Это разные подсистемы, и вторая обычно делается отдельно и позже.

«Локальная модель справится, надо только промпт получше». Соблюдение синтаксиса вызова инструментов у компактных моделей заметно хуже, чем у крупных, и промпт это не лечит. Он снижает частоту сбоев, но не убирает их.

«Если агент ошибся, значит модель плохая». В подавляющем большинстве разобранных случаев ошибка видна раньше — на первом неверном наблюдении: инструмент вернул не то, что решил, что вернул, автор. Модель после этого рассуждала правильно на неверных данных.

#Как начать: агент за один вечер, без ущерба

Порядок, который снижает шанс потерять данные на первой неделе:

  1. Выберите ровно одну задачу, где шагов больше двух и результат легко проверить глазами. Например: «найди в моих заметках все упоминания проекта X и собери их в один файл».
  2. Дайте один инструмент на чтение. Список файлов или поиск. Ничего пишущего.
  3. Поставьте жёсткий лимит шагов. Пять — нормальное начальное значение. Цикл, который упёрся в лимит, должен отдавать частичный результат, а не молчать.
  4. Включите запись трассировки. Каждый вызов: имя, аргументы, результат, время. Без этого следующий пункт невозможен.
  5. Прогоните двадцать запусков и прочитайте логи, а не только ответы. Вы увидите реальную частоту сбоев формата и типичные места блуждания.
  6. Добавьте первый пишущий инструмент только после этого — и сразу с белым списком каталогов.
  7. Выполнение команд оставьте на конец или не включайте вовсе: у этого инструмента нет проверяемых параметров, поэтому ограничить его по смыслу невозможно.

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

#Что из этого следует для личного ассистента

Личный агент отличается от корпоративного не техникой, а ценой ошибки и составом данных. У корпоративного агента данные принадлежат компании и есть служба, которая чинит последствия. У личного — ваши письма, ваши файлы, ваш календарь и никакой службы.

Отсюда три требования, которые в личном сценарии не обсуждаются:

  • Права по умолчанию — минимальные. Не «включим всё, потом ограничим».
  • Все действия видны. Список вызовов с аргументами и результатами доступен вам, а не только в отладочном логе.
  • Всё, что необратимо, проходит через подтверждение. Именно так это устроено в Persona: класс инструмента определяется в app/mcp/tool_policy.py, автономно модели отдаются только инструменты чтения, а исполняющие и разрушающие вызовы из Telegram паркуются за одноразовой кнопкой подтверждения и читают свои аргументы из записи в базе, а не из нажатия.

Если вы собираете личного агента — начните с чтения, лимита шагов и логов; всё остальное добавляется потом и по одной штуке за раз. Persona устроена по этому же порядку, и именно поэтому многие агентные функции в ней по умолчанию выключены.

#Частые вопросы

#Чем ИИ-агент отличается от чат-бота?

Чат-бот отвечает текстом на реплику: один запрос — один ответ. Агент выполняет несколько шагов подряд, вызывая инструменты и используя результат предыдущего шага как вход следующего, причём петлю замыкает программа, а не нажатие человека. Промежуточный случай — чат с инструментами, где вызов происходит, но следующий шаг инициирует человек: это ещё не агент.

#Может ли ИИ-агент работать на локальной модели?

Может, с оговорками. Компактные модели удовлетворительно делают один-два вызова инструмента и заметно чаще ломают синтаксис вызова на третьем-четвёртом шаге. Практический подход — дробить задачу на короткие цепочки по два-три шага, давать минимум инструментов с очень явными описаниями и не рассчитывать на длинные автономные прогоны.

#Насколько ИИ-агент автономен на самом деле?

Ровно настолько, насколько ему разрешили. Модель выбирает из списка инструментов, который дал разработчик, в пределах лимита шагов, который тоже задан кодом. «Агент сам решил» всегда означает «агент выбрал из того, что мы ему дали». Если инструмента удаления в списке нет, никакая формулировка запроса его не создаст.

#Сколько стоит один запуск агента?

Больше, чем один запрос к модели, обычно в несколько раз: каждый шаг — это отдельный вызов, и контекст на каждом шаге длиннее предыдущего. Точной цифры без вашей задачи и вашей модели не существует. Если считаете бюджет — умножайте цену одного вызова на ожидаемое число шагов и добавляйте рост контекста; в локальном режиме вместо денег платится время процессора.

#Может ли агент удалить мои файлы?

Может, если вы дали ему инструмент удаления и не поставили ограничений. Именно поэтому разумная конфигурация не включает разрушающие инструменты по умолчанию, ограничивает работу белым списком каталогов и требует подтверждения на всё необратимое. В Persona удаление отнесено к отдельному классу риска, а границы рабочего каталога проверяются на каждом обращении.

#Что делать, если агент зациклился?

Сначала посмотреть трассировку и найти, на каком шаге он начал повторяться: механизмов зацикливания несколько, и предохранители у них разные. Общий лимит шагов спасает от бесконечного прогона, но не устраняет причину. Разбор по механизмам — в отдельном материале про зацикливание.

#Нужен ли мне вообще агент?

Если ваши задачи решаются одним запросом к модели или обычным скриптом — нет, и агент только добавит стоимость и риск. Агент оправдан, когда шагов заведомо больше двух, каждый следующий зависит от результата предыдущего, и заранее нельзя сказать, каким этот результат будет.

#Вывод

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

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт