Менеджмент

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

Главный принцип — управление по исключениям: пока всё в порядке, пульт почти пуст и молчит. Как только агенту нужно ваше решение или что-то пошло не так, это всплывает наверх — с коротким объяснением, чем агент занят и что от вас нужно. Состояния не выдуманы: каждое подтверждается проверяемым сигналом (состояние контейнера, связь с агентом, живой поток событий), и если доказательств нет, так и написано — «неизвестно», а не подставлено что-то похожее на правду.

Зачем нужен пульт

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

Пульт решает три задачи. Первая — показать с одного взгляда, всё ли в порядке. Вторая — собрать в одно место всё, что ждёт человека, и не дать этому потеряться. Третья — объяснить, куда уходят деньги и время, и не дать расходам вырасти незаметно.

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


Карта экранов

Раздел состоит из десяти экранов: корневой «Флот» и девять пунктов его списка — «Флоты», «Реестр», «Чаты», «Решения», «Стоимость», «Токены», «Готовность», «Политики» и «Аналитика» последней. С любого на любой можно перейти за пару шагов, а командная палитра ищет по всем сразу.

  • «Флот» — корень раздела. Отвечает на главный вопрос: есть ли что-то, требующее внимания. Показывает состояние всех агентов, несколько ключевых чисел (сколько чатов выполняется сейчас, сколько решений ждёт, ошибки за сутки, расход за сутки), зону внимания с верхушкой очереди решений и последние события. Каждое число стоит рядом со своей нормой, чтобы было понятно, много это или мало; у каждого показателя есть собственный «предел спокойствия», и при его нарушении значение подсвечивается — значком и словом, а не только цветом;
  • «Флоты» — именованные группы агентов, которые работают вместе. Участники одного флота могут стоять на разных серверах. Флот можно создать, изменить и удалить, имя должно быть уникальным. На карточке флота участники сгруппированы по серверам, и каждая группа серверов по умолчанию свёрнута: видно имя сервера и число участников, а сами участники раскрываются кликом по строке. Метка сервера ведёт на его страницу, имя участника — на карточку агента. Пустой флот не соответствует ни одному агенту, пока в него не добавят участников;
  • «Реестр» — таблица всех агентов: состояние, чем занят, сколько простаивает, расходы за сегодня, класс риска и оставшееся время на ответ. Есть быстрые фильтры («требуют решения», «ошибки», «застряли >15 мин», «дорогие», «карантин», «теневые», «офлайн»), группировка по серверу, владельцу, меткам и состоянию, именованные представления и три уровня плотности строки. Здесь же — доска с колонками «В очереди», «В работе», «Заблокировано», «На проверке» и «Готово»: карточки можно перетаскивать, и это настоящее изменение очерёдности, а не перестановка на экране;
  • «Чаты» — история чатов всех агентов: статус, длительность, стоимость, токены. Строки листаются нумерованными страницами по десять штук, и у списка есть точное общее число. Колонки «Сервер» и «Агент» — отдельные и кликабельные: сервер ведёт на свою страницу, агент — на свою. По любому чату открывается пошаговый разбор: что делал агент, сколько занял каждый шаг, где потерялось время, что вызвало ошибку. Разбор — это запись реального хода работы, а не повторный прогон;
  • «Решения» — всё, что ждёт человека: вопросы агентов, проверки завершённых работ и просто сообщения. Подробно — ниже;
  • «Стоимость» — во сколько обходится один успешный чат (а не отдельно расход токенов), с размером выборки. Здесь же расходы за сегодня, неделю и месяц, прогноз до конца месяца, потолки трат и разбивка по агентам, владельцам, серверам, меткам, типам задач и моделям;
  • «Токены» — сколько токенов всего и куда они уходят. Одно число на сущность: вход, выход, чтение и запись временного хранилища складываются вместе и нигде не разбиваются по видам. Плюс токенов на успешный чат, окна за сегодня, неделю и месяц, прогноз до конца месяца, спокойные графики и та же разбивка, что на «Стоимости»;
  • «Готовность» — оценка состояния инфраструктуры от 0 до 100: найденные слабые места (сломанные доступы, агенты без владельца, простаивающие контейнеры, лицензии на исходе, рост расходов против привычного), наблюдения за поведением, кто больше всех создаёт ошибок и расходов, и режим инцидента;
  • «Политики» — правила автономности: что агент может делать сам, что обязан спросить, какие инструменты запрещены, сколько он может потратить и какие пороги уверенности включают очередь;
  • «Аналитика» — графики по флоту с именованными фильтрами: есть «Все», сохранённые фильтры и «Новый фильтр», а внутри фильтра — вкладки «Флоты», «Серверы» и «Агенты».

В таблицах и на графиках агент подписан коротким именем, пока это имя в списке одно. Если имена совпадают, к имени добавляется сервер — «сервер/агент»: две строки с одинаковым именем никогда не выглядят одинаково. В тех местах, где сервер уже показан отдельной колонкой или заголовком группы, имя остаётся коротким.

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


Строка состояния в шапке

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

  • Метка о проблемах — пока флот спокоен, её нет вовсе. Красной она становится, когда есть беда: «Агентов недоступно: N» или «Агентов застряло: N». Жёлтой — когда ждут решения: «N решений ожидают». Клик по красной открывает «Флот», клик по жёлтой — очередь решений;
  • Метка о работе — есть всегда, зелёная, с числом «Чатов выполняется: N». Она считает именно чаты, а не занятых агентов: агент, который ведёт три чата сразу, даёт три, а не один. Клик открывает «Чаты» с фильтром «выполняется» — ровно те строки, что посчитаны.

Число в заголовке вкладки браузера — «(N)» — остаётся, пока очередь не пуста, и гаснет вместе с ней. А сам значок сайта на вкладке всегда один и тот же и не меняется ни по каким событиям: по нему нельзя понять, случилось ли что-то, — для этого есть метки в шапке.


Состояния агента

У каждого развёрнутого агента ровно одно состояние, и оно всегда подтверждено сигналом:

  • занят — обрабатывает чат, то есть сейчас работает;
  • думает — работа идёт, но последнее живое событие — рассуждение или шаг, который ещё выполняется;
  • свободен — контейнер запущен, но ничего не обрабатывается;
  • ждёт решения — в чате висит вопрос к человеку, и причина названа словами: нужен человек, ждём ответа от поставщика модели, внешнюю систему или инструмент;
  • застрял — работа числится идущей, вопроса нет, но живых сигналов нет дольше порога тишины (по умолчанию 10 минут; для отдельного агента порог можно задать свой);
  • офлайн — только по доказательству: связь с агентом не отвечает или проверка контейнера увидела, что он остановлен;
  • неизвестно — доказательств нет ни за, ни против. Так бывает сразу после перезапуска Мультиагента или пока не отвечает связь с сервером. Такие агенты не считаются ни доступными, ни недоступными: они не попадают в числа «недоступно» и не окрашивают значки.

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

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

Смена состояния доходит до всех окон сразу, но повтор того же состояния не создаёт ни события, ни уведомления. Состояние видно не только цветом: у каждого есть значок и слово, поэтому даже в чёрно-белом виде всё различимо. Если данных нет вовсе, показывается знак вопроса и слово «Неизвестно», а не ноль и не догадка.


Очередь решений

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

  • Вопрос — агент спрашивает и без ответа стоит на месте;
  • Проверка — работа закончена, её нужно принять или отправить на доработку. Так приходят, например, ночные задания, которые выполнились без человека: утром вы видите, что получилось и сколько это стоило;
  • Сообщение — просто уведомление. Оно никогда не прерывает, не имеет срока и не увеличивает счётчик на значке;

У каждой записи есть класс риска, и от него зависит, сколько времени есть на ответ:

  • T1 — обратимое и дешёвое (например, небольшая сумма, которую легко вернуть). Такое решается само и в очередь вообще не попадает: остаётся только запись в журнале;
  • T2 — обычное. На ответ отведено 60 минут;
  • T3 — блокирующее: необратимое действие или крупная сумма. На ответ 15 минут, и если время вышло, работа агента приостанавливается, чтобы он не висел вечно в ожидании человека;

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

Строка ведёт туда, где решение принимается: клик по ней (или Enter) открывает чат, в котором агент ждёт ответа; у записи без чата — например, предложения поменять правила — открывается карточка с планом и кнопками. Для вопроса ответ даётся в чате: у такой строки есть только «Скрыть» и «Открыть», кнопок «Одобрить» и «Отклонить» на ней нет. Действие «Скрыть» убирает запись из очереди, ничего не решая: это не одобрение и не отказ, и в обучение правилам оно не идёт. А если на вопрос ответили прямо в чате и ярлык «вопрос» с него снят, запись закрывается сама с причиной «Отвечено в чате» — ждать, пока вы придёте в очередь, не нужно. Состояние меняется сразу, без перезагрузки страницы.

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

Над списком виден «бюджет» очереди: сколько решений принято сегодня, сколько на это уходит времени и сколько записей висит дольше суток. Ориентир — 40–60 решений в день; это предел, а не цель: если очередь просит больше, значит, агентам не хватает самостоятельности, и настраивать надо правила, а не ускоряться.

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


Инцидент, заморозка и остановка

Когда случается крупная неприятность, пульт переходит в режим инцидента. Это единственное исключение из правила «молчащего экрана»: поверх всего приложения появляется полоса с причиной и длительностью инцидента, а раздел показывает максимум подробностей. Режим включают вручную (причина обязательна и попадает в журнал) или автоматически — если разом пропало много агентов либо посыпались ошибки. При выходе из режима собирается черновик разбора: что случилось, что делали, что решили.

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

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


Горячие клавиши и поиск действий

Всё, что можно сделать на пульте, доступно и с клавиатуры — это заметно ускоряет работу, когда решений много подряд. Командная палитра (⌘K или Ctrl+K) открывается с любого экрана и ищет по разделам, агентам, живым записям очереди и действиям. Клавиша ? открывает шпаргалку со всеми сочетаниями. Опасные действия всегда сначала спрашивают подтверждение, а необратимые требуют ввести имя.

  • Переходы: 1–8 — по восьми экранам раздела, i — очередь решений, / — фильтр списка, r — обновить данные;
  • По списку: g/G — в начало и в конец, j/k — вниз и вверх;
  • По строке: Space — быстрый просмотр, Enter — открыть, P — приостановить обработку, S — остановить, R — перезапустить, E — эскалировать, H — передача смены, A — одобрить, X — отклонить (нужна причина), D — отложить, Shift+S — скрыть, не принимая решения, T — разбор чата, Q — карантин;
  • Отмена: ⌘Z возвращает последнее обратимое действие (например, снимает паузу и освобождает ровно те запросы, которые были придержаны), Esc закрывает окно.

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


Оповещения

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

Дойти уведомление может разными путями — и по каждому видно, что именно он несёт:

  • Очередь решений — для того, что ждёт человека. О ней напоминают значок в списке разделов, «(N)» в заголовке вкладки браузера, метки в шапке и зона внимания на «Флоте»;
  • Центр уведомлений (значок в шапке) — общий журнал произошедшего с одним действием «Открыть». Прочитанное в одном окне гаснет во всех остальных;
  • Всплывающее сообщение и звук — только для блокирующих решений и пропущенных сроков, и только когда вкладка не на виду;
  • Мессенджер — на внешний адрес вашей системы уходит короткое сообщение со ссылками. Одобрить можно только в интерфейсе: ссылка открывает карточку решения внутри приложения, где видно детали и кому вы отвечаете. Из мессенджера решение не принимается — это осознанное ограничение ради безопасности;
  • Ежедневная сводка — что сделано, сколько потрачено, какие решения приняты и что осталось.

Есть тихие часы (по умолчанию с 23:00 до 08:00 по времени сервера): обычные уведомления копятся и приходят одной порцией после окончания окна. Блокирующие решения, сообщения о безопасности квот и оплаты и автоматически начавшиеся инциденты тихие часы обходят — о них узнаёте сразу. Общая громкость настраивается тремя уровнями: спокойный, обычный, продвинутый. Отдельные типы можно вовсе убрать в сводку или отключить прямо из строки уведомления, но у самых важных классов переключателя нет — вместо него написано, почему их нельзя отключить.


Агент сам просит решение

Агент может не просто ждать ответа в чате, а поставить вопрос прямо в очередь решений — тем же ключом доступа, которым пользуется программный Agent API. Так запрос попадает туда, где его точно заметят, и не теряется в переписке.

curl -X POST <адрес>/api/agent/inbox -H "X-API-Key: $MULTIAGENT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"review","title":"Развернуть в продуктиве?","dedupKey":"deploy:prod",
       "riskHints":{"costEstimate":6000,"reversible":false},"agentChatId":42}'

Класс риска агент задаёт подсказками: обратимо ли действие и сколько примерно стоит. Дальше система решает честно: обратимое и дешёвое одобряется сразу (и остаётся только запись в журнале), дорогое или необратимое становится блокирующим с коротким сроком, остальное — обычным. Если отправлять одинаковый dedupKey, повторы не создадут новых записей, а увеличат счётчик у уже стоящей. Команда GET /api/agent/inbox показывает агенту его собственные активные запросы.


Что важно знать

Пульт не приукрашивает: где данных нет, там так и написано. Полезно заранее знать о границах:

  • Карантин и запрет инструментов — это пометки уровня управления, а не ограничения внутри самого агента. Реально останавливают агента пауза, остановка и эскалация; запрет инструмента помечает его как нежелательный и показывает это в интерфейсе;
  • Учёт «мыслей» — общий. Потолок ограничивает все токены запуска разом (и запрос, и ответ) и честно об этом говорит — отдельного учёта «мыслей» не ведётся;
  • Часть чисел — последние известные. Расходы подтягиваются по мере обновления данных о чатах, то есть раз в несколько минут, а не в ту же секунду. Расход чата относится ко дню его последней активности и там и остаётся — перезапуск Мультиагента картину не сбрасывает и ничего заново не начинает;
  • Списки листаются страницами. У каждого списка есть точное общее число и нумерованные страницы по десять строк — строки за пределами открытой страницы не теряются. Счётчики в шапке описывают последние несколько сотен строк и всегда называют, по какому объёму посчитаны;
  • Разбор чата — это запись. Пошаговый просмотр и «проигрывание» показывают то, как всё было, и ничего не запускают заново;
  • Дежурств и часовых поясов нет. Расписание смены — это сохранённая подпись для ожиданий команды, а не календарь. Если второго дежурного не настроили, система прямо скажет, что уведомление повторное, а не назовёт несуществующего дежурного;
  • Разбивка расходов по аккаунтам недоступна, а разбивка по моделям — оценочная (данные о чатах не хранят отдельной истории по моделям). Об этом написано прямо на экране «Стоимость».

О том, как устроены сами агенты и их чаты, — на страницах Агенты и Чаты; о готовых наборах переменных для агентов и серверов — на странице Окружения.

← Оглавление документации