Обучение · Агенты и вайб-кодинг
Глава 41. Агент в групповом чате
Личный агент отвечает одному человеку. Групповой оказывается совсем другой историей, и эта глава написана по одному из самых поучительных экспериментов в корпусе: человек завёл своего агента в живой чат на несколько часов и огрёб готовый список проблем.
Права и настройки платформы Первое, обо что спотыкаются все.
Без административных прав бот не читает сообщения группы ни хуя. Личные слышит всегда. Это очевидно и написано в документации.
А вот что неочевидно ни хуя: после снятия прав бот продолжал преспокойно читать всю переписку, потому что была отключена отдельная настройка приватности. Настройка платформы оказалась важнее любой интуиции про роли.
ГЛАВНОЕ ПРО ПРАВА В ГРУППОВОМ АГЕНТЕ Проверяй фактическое поведение, а не свои представления о правах. Схема прав в мессенджерах складывалась годами и содержит слои, которые к одной модели не сводятся. Единственный надёжный способ узнать, что видит твой бот, это спросить у него самого в живом чате.
Асимметрия включения и выключения Мелочь, которая вылезла в самый неподходящий момент.
Инструмент, чтобы завести агента в группу, был написан. Инструмент, чтобы вывести, не был.
Общий класс ошибок: механизм включения пишут первым, потому что он нужен для запуска, а механизм выключения потом, потому что он нужен только когда всё пошло по пизде. То есть ровно тогда, когда его нет.
Адресация Проблема, которую видно только на живом чате.
В группе люди отвечают друг другу. Агент видит поток сообщений и хуй понимает, кто кому отвечает, если ему это явно не сказать.
Диагностика и починка заняли одно сообщение: в объекте, который уходил модели, просто не было поля с идентификатором цитируемого сообщения. Как только его добавили, агент прозрел и начал понимать контекст разговора. Хуйня вопрос, а мучились долго.
Агент в групповом чате
ЧТО УХОДИЛО МОДЕЛИ ЧТО ДОЛЖНО УХОДИТЬ
отправитель, имя, текст отправитель, имя, идентификатор сообщения, на которое отвечают, текст
Агент гадает по истории, на что человек отве- Агент видит связь и отвечает по существу чает, и часто гадает неправильно. нужной реплики.
Дедупликация контекста Вторая техническая находка, и она экономит деньги.
Наивная схема: класть в контекст последние пятьдесят сообщений. Беда в том, что на каждом обращении эти пятьдесят летят заново, и большая часть уже была в прошлом обращении. Платишь дважды за одно и то же.
Решение, к которому пришли: бэкенд читает чат непрерывно и ставит маркеры между вызовами агента. В контекст попадает только дельта от прошлого маркера до текущего.
Звучит просто, и автор сам отметил, что сообразил не сразу.
КАК СОБИРАЕТСЯ КОНТЕКСТ ГРУППОВОГО АГЕНТА
Дельта с прошлого Непрерывное чтение Маркер при вызове Плюс память маркера
всё в базу точка отсечения только новое по вектору вопроса
Реакция вместо ответа Самый практичный приём главы.
Проблема формулируется так. Ты пишешь в инструкции: если сообщение не требует ответа или тебя упомянули косвенно, не отвечай вообще. Модели так не умеют, хоть ты тресни. Они всё равно напишут: понял, больше не буду.
Решение: захуячить отдельный инструмент простановки реакций. Внутри список доступных реакций и описание, когда какую использовать. Послали нахуй, значит одна. Просто упомянули в разговоре, значит другая. Похвалили, значит третья.
Ответ модели при этом в чат не летит. Она вызывает инструмент и ставит реакцию.
ГЛАВНОЕ ПРО МОЛЧАНИЕ Модель не умеет промолчать, потому что молчание это не действие. Дай ей инструмент, который превращает молчание в действие. Тогда она сможет его выбрать.
Агент в групповом чате
Условия вызова считаются кодом Отдельно и важно: решение о том, будить ли модель, принимается до модели.
Три условия, которые использовали:
Прямое упоминание имени бота.
Ответ на его сообщение.
Простое совпадение по строке с вариантами написания имени.
Всё это проверяется обычным кодом. Совпало, вызывается модель, и дальше она уже решает, ответить сообщением или реакцией.
Альтернатива, которую применял другой участник: трёхуровневое ранжирование, где до модели долетает только то, что прошло все три уровня, с коэффициентами, которые надо подбирать.
СХЕМА ОТСЕЧЕНИЯ ДЛЯ ГРУППОВОГО АГЕНТА 1. Уровень нулевой, код: упоминание, ответ, совпадение по имени. Не совпало, модель не вызывается. 2. Уровень первый, дешёвая модель: относится ли это к темам, которые агент ведёт. 3. Уровень второй, основная модель: отвечать сообщением, реакцией или молчать. 4. Логировать все три уровня. Настройка возможна только по логам.
Поведение под атакой Участники немедленно принялись пробовать агента на прочность, и это лучшая проверка, какую можно придумать.
Что пробовали: выпросить список внутренних инструментов, в том числе через кодирование запроса; узнать название модели и адрес интерфейса; снять снимок чужого экрана; получить досье на конкретных участников; заставить игнорировать конкретного человека; подсунуть файл с инструкциями, снимающими ограничения; сгенерировать бесконечный текст.
Всё отбито подчистую, и главный урок в том, почему: доступов физически не было ни хуя. В публичном режиме у агента не было ни оболочки, ни браузера, только ограниченный набор инструментов, часть скиллов и память.
Отдельно интересен эпизод с досье. Агент отказывался собирать портрет человека, но соглашался пересказать, о чём человек говорил, когда тот просил про себя сам. Граница, которую он сформулировал, оказалась разумной: суммирование по теме это работа с перепиской, агрегация по человеку это другое, даже если все куски человек выложил сам.
Отказ скилла выглядит как глупость модели Последняя находка эксперимента, полезная всем.
Агент в групповом чате
Скилл не загружался, и со стороны это выглядело так, будто модель тупит и ни хуя не понимает задачу. Реальная причина оказалась инфраструктурной: банально не хватало прав на чтение из песочницы.
Общий вывод: когда агент ведёт себя необъяснимо, проверяй инфраструктуру раньше формулировок. Права, пути, доступность файлов, лимиты. Формулировки правь, когда инфраструктура заведомо исправна.
Что запомнить Проверяй фактическое поведение прав, а не свои представления о них.
Пиши механизм выключения одновременно с механизмом включения.
Передавай модели, на какое сообщение отвечает человек. Догадываться она будет неправильно.
В контекст клади дельту с прошлого вызова, а не последние N сообщений.
Дай инструмент реакции: молчание должно быть действием, которое агент умеет выбрать.
Условия вызова считай кодом до модели.
Защита это отсутствие доступа, а не крепкий промпт.
И когда поведение необъяснимо, проверяй инфраструктуру раньше формулировок.
← Личный агент · оглавление · Документы, дизайн, интерфейсы →
Спросить книгу может любой, кто вошёл в Neuraldeep Hub: агент ищет ответ по тексту и приводит цитату со ссылкой на главу.