Обучение · Агенты и вайб-кодинг

Глава 41. Агент в групповом чате

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

Права и настройки платформы Первое, обо что спотыкаются все.

Без административных прав бот не читает сообщения группы ни хуя. Личные слышит всегда. Это очевидно и написано в документации.

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

ГЛАВНОЕ ПРО ПРАВА В ГРУППОВОМ АГЕНТЕ Проверяй фактическое поведение, а не свои представления о правах. Схема прав в мессенджерах складывалась годами и содержит слои, которые к одной модели не сводятся. Единственный надёжный способ узнать, что видит твой бот, это спросить у него самого в живом чате.

Асимметрия включения и выключения Мелочь, которая вылезла в самый неподходящий момент.

Инструмент, чтобы завести агента в группу, был написан. Инструмент, чтобы вывести, не был.

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

Адресация Проблема, которую видно только на живом чате.

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

Диагностика и починка заняли одно сообщение: в объекте, который уходил модели, просто не было поля с идентификатором цитируемого сообщения. Как только его добавили, агент прозрел и начал понимать контекст разговора. Хуйня вопрос, а мучились долго.

Агент в групповом чате

ЧТО УХОДИЛО МОДЕЛИ ЧТО ДОЛЖНО УХОДИТЬ

отправитель, имя, текст отправитель, имя, идентификатор сообщения, на которое отвечают, текст

Агент гадает по истории, на что человек отве- Агент видит связь и отвечает по существу чает, и часто гадает неправильно. нужной реплики.

Дедупликация контекста Вторая техническая находка, и она экономит деньги.

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

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

Звучит просто, и автор сам отметил, что сообразил не сразу.

КАК СОБИРАЕТСЯ КОНТЕКСТ ГРУППОВОГО АГЕНТА

Дельта с прошлого Непрерывное чтение Маркер при вызове Плюс память маркера

всё в базу точка отсечения только новое по вектору вопроса

Реакция вместо ответа Самый практичный приём главы.

Проблема формулируется так. Ты пишешь в инструкции: если сообщение не требует ответа или тебя упомянули косвенно, не отвечай вообще. Модели так не умеют, хоть ты тресни. Они всё равно напишут: понял, больше не буду.

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

Ответ модели при этом в чат не летит. Она вызывает инструмент и ставит реакцию.

ГЛАВНОЕ ПРО МОЛЧАНИЕ Модель не умеет промолчать, потому что молчание это не действие. Дай ей инструмент, который превращает молчание в действие. Тогда она сможет его выбрать.

Агент в групповом чате

Условия вызова считаются кодом Отдельно и важно: решение о том, будить ли модель, принимается до модели.

Три условия, которые использовали:

Прямое упоминание имени бота.

Ответ на его сообщение.

Простое совпадение по строке с вариантами написания имени.

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

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

СХЕМА ОТСЕЧЕНИЯ ДЛЯ ГРУППОВОГО АГЕНТА 1. Уровень нулевой, код: упоминание, ответ, совпадение по имени. Не совпало, модель не вызывается. 2. Уровень первый, дешёвая модель: относится ли это к темам, которые агент ведёт. 3. Уровень второй, основная модель: отвечать сообщением, реакцией или молчать. 4. Логировать все три уровня. Настройка возможна только по логам.

Поведение под атакой Участники немедленно принялись пробовать агента на прочность, и это лучшая проверка, какую можно придумать.

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

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

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

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

Агент в групповом чате

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

Общий вывод: когда агент ведёт себя необъяснимо, проверяй инфраструктуру раньше формулировок. Права, пути, доступность файлов, лимиты. Формулировки правь, когда инфраструктура заведомо исправна.

Что запомнить Проверяй фактическое поведение прав, а не свои представления о них.

Пиши механизм выключения одновременно с механизмом включения.

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

В контекст клади дельту с прошлого вызова, а не последние N сообщений.

Дай инструмент реакции: молчание должно быть действием, которое агент умеет выбрать.

Условия вызова считай кодом до модели.

Защита это отсутствие доступа, а не крепкий промпт.

И когда поведение необъяснимо, проверяй инфраструктуру раньше формулировок.

← Личный агент · оглавление · Документы, дизайн, интерфейсы →

Спросить книгу может любой, кто вошёл в Neuraldeep Hub: агент ищет ответ по тексту и приводит цитату со ссылкой на главу.