Яндекс.Метрика
Назад к блогу
Продукт

Как мы сделали AI-агента, который живёт в корпоративном мессенджере

Почему мессенджер с тредами — идеальная среда для AI-агента и как устроен агент Пачки изнутри

Автор:Павел Любачев
Как мы сделали AI-агента, который живёт в корпоративном мессенджере

Мы встроили AI-агента в Пачку. Он живёт в тех же тредах, что и команда: читает контекст, создаёт задачи, анализирует код. В этой статье рассказываем, как он устроен изнутри.

Зачем агенту мессенджер

Большинство AI-агентов сегодня живут в отдельных интерфейсах. Чат-бот на сайте, отдельное приложение, вкладка в IDE. У каждого свой контекст, свои данные, своя история разговоров.

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

Это меняет сценарий использования. Раньше нужно было скопировать текст ошибки, вставить в отдельный AI-чат, дождаться ответа, вернуться в мессенджер и пересказать результат коллегам — пять шагов. Теперь достаточно упомянуть агента прямо в переписке. Он видит историю, понимает, о чём речь, и действует на месте.

Почему треды — это главное

Когда мы начали проектировать агента, стало ясно, что основной единицей работы должен быть не чат, а тред.

Изоляция контекста

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

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

Сквозные треды — суперсила

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

Для AI-агента это открывает мощный сценарий:

Тред

4 сообщения

Марина Соколова
Алексей Дмитриев
Марина Соколова
Марина Соколова12:34
@kai, посмотри, почему упали тесты в последнем PR
KaiБот12:34
Анализирую CI… Тесты упали из-за изменений в auth-модуле.
KaiБот12:35
@Алексей, похоже, это связано с твоим последним коммитом — можешь проверить?
Алексей Дмитриев
Алексей Дмитриев12:38
Да, вижу. Сейчас поправлю, спасибо за контекст!
1Менеджер пишет в чат команды
2Агент создаёт тред и анализирует CI
3Агент упоминает разработчика из другой команды
4Алексей заходит из уведомления и видит полный контекст

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

Как устроен агент изнутри

Архитектура получилась компактной. Вот основные компоненты.

Вебхук

Пачка отправляет событие при каждом сообщении

@упоминаниеОтвет в тред
Сервер агента
Промпт

Контекст собирается для каждого вызова модели

ИнструкцииИсторияНавыкиНастройки
Ядро агента

LLM решает, какие инструменты вызвать и в каком порядке

API мессенджераТрекер задачGitВеб-поиск
Ответ в тред

Агент сам отправляет сообщения через API

Новый тредОтвет в тредРеакции

Как агент получает сообщения

Пачка отправляет вебхук при каждом новом сообщении. Агент принимает его, проверяет подпись (HMAC-SHA256) и решает, нужно ли реагировать. Триггеров два: кто-то упомянул агента по имени или кто-то ответил на его сообщение в треде. Если ни то, ни другое не произошло, вебхук молча пропускается. Агент не читает все сообщения подряд, только те, где к нему обратились.

Промпт: контекст решает

Качество ответов агента на 80% определяется тем, что мы кладём в промпт. Он собирается из нескольких частей.

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

К ним добавляется история переписки: последние 20 сообщений из треда. Модель видит, кто что написал, в каком порядке, и может продолжить разговор естественно.

Если агент работает в треде, он также получает родительское сообщение, с которого тред начался. Тред на сообщении «Тесты упали» сразу задаёт контекст: разговор о тестах.

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

Мозг: языковая модель + инструменты

Ядро агента — это цикл вызовов языковой модели. Модель получает системный промпт с инструкциями и набор инструментов, которые может вызывать: API мессенджера (отправка сообщений, чтение истории, работа с тредами), API трекера задач (создание, обновление, поиск), API системы контроля версий (чтение файлов, коммиты, pull request'ы) и веб-поиск.

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

Как агент отвечает

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

Пока агент думает, он ставит на исходное сообщение реакцию-индикатор (анимированный эмодзи «думаю»). Когда закончил, снимает.

Безопасность и ограничения

AI-агент в рабочем мессенджере — это вопрос доверия. Вот как мы к нему подошли.

Агент видит только свой тред

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

Защита от зацикливания

Несколько механизмов не дают агенту «зависнуть»:

  • Кулдаун 5 секунд — агент не реагирует на повторные сообщения в том же треде, если предыдущий запуск был менее 5 секунд назад
  • Лимит в 15 шагов — если модель не справилась за 15 вызовов инструментов, агент останавливается и сообщает об ошибке
  • Таймаут 5 минут — жёсткий потолок на время работы
  • Запрет на «монолог» — агент не отправляет больше двух сообщений подряд без ответа пользователя

Мультитенантность

Один экземпляр агента может обслуживать несколько организаций. У каждого тенанта свой токен, своя подпись вебхуков, свой набор подключённых интеграций. Данные одной организации не пересекаются с другой.

Навыки: как научить агента новому

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

Навык — это Markdown-документ, который подставляется в системный промпт. Например, навык работы с трекером задач описывает доступные действия (создать задачу, обновить статус, найти по фильтру), обязательные поля, правила именования и примеры типичных запросов с ожидаемыми действиями.

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

Сценарии, которые уже работают

«Создай задачу из обсуждения»

Команда обсуждает в треде баг. Кто-то тегает агента: «@kai, заведи задачу». Агент читает историю треда, формулирует заголовок и описание, определяет приоритет и создаёт задачу в трекере. В описание автоматически добавляется ссылка на тред.

«Что происходит в CI?»

Разработчик спрашивает агента в треде PR: «Почему упал билд?». Агент запрашивает статус CI-проверок, находит упавший джоб, читает логи и отвечает с диагнозом. Если проблема очевидная — предлагает фикс.

«Прочитай и проанализируй файл»

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

«Исследуй компанию»

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

Что дальше

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

Мессенджер с хорошей моделью тредов — не просто «канал доставки» для AI. Это среда, в которой агент может полноценно работать бок о бок с командой. Сквозные треды превращают его из инструмента, которым пользуется один человек, в полноценного участника рабочего процесса, который может координировать действия между разными людьми и системами.

Читайте также