Агенты
Агент сам разбирает сообщения в канале. Пришёл алерт — агент по вашей инструкции смотрит логи и метрики и отвечает в тред, что случилось и что делать. Может работать и по расписанию: «каждое утро в 9 проверь ошибки за ночь». Код писать не нужно — всё задаётся в настройках пространства.
Где настраивать и кто может
- Откройте настройки пространства из его меню и перейдите на вкладку «Агенты». Её видят только администраторы пространства — те, у кого в роли есть право «Настройки пространства, приглашения, роли и участники». Остальным сервер откажет, даже если обратиться к нему напрямую.
- Агент работает от имени ИИ-бота пространства — того же, что отвечает на
@claude. Он читает канал агента и обращается к подключённым системам. Когда вы сохраняете агента, бот вступает в его канал, и это видно всем участникам. - Кто завёл, изменил или удалил агента или подключение, видно в журнале действий пространства (вкладка «Журнал»).
- Если пространство не оплачено и перешло в режим «только чтение», агенты не срабатывают. Выключить или убрать агента и подключение можно и в этом режиме.
Порядок такой: сначала подключения, потом агент. Пока открыта форма агента, раздел «Подключения» на вкладке не виден.
Подключения
Подключение — это адрес системы, из которой агент читает данные, и ключ к ней. Его заводят один раз в разделе «Подключения» внизу вкладки, а потом отмечают у тех агентов, которым оно нужно.
- В блоке «Новое подключение» выберите вид системы и дайте подключению название, например «Логи прода».
- Впишите адрес. Он начинается с
https://илиhttp://, напримерhttps://prometheus.example.ru. - Задайте ключ. «Заголовок ключа» по умолчанию —
Authorization, а значение — то, чего ждёт ваша система:Bearer …илиApiKey …. Если система не требует ключа, оставьте поле пустым. - Нажмите «Добавить», а потом «Проверить» у нового подключения. Ответ будет таким: «✓ Отвечает (120 мс)», «✗ Отказ в доступе (401) — проверьте ключ» или код ответа.
| Вид | Что может агент | Что делает «Проверить» |
|---|---|---|
| Elasticsearch (логи Kibana) | Смотреть список индексов, искать через _search (до 200 документов за раз) и считать через _count | Запрос GET / |
| Prometheus | Делать запросы PromQL — на момент времени и за промежуток | Запрос /api/v1/status/buildinfo |
| Loki | Делать запросы LogQL за промежуток, до 500 строк | Запрос /ready |
| Grafana | Делать GET-запросы к путям /api/...: алерты, дашборды, аннотации | Запрос /api/health |
| HTTP (только GET) | Делать GET-запросы к любому пути на этом адресе, с параметрами | Запрос GET / |
| MCP-сервер (по адресу) | Вызывать только инструменты, которые отметил администратор | Подключается к серверу и получает список инструментов |
- Ключ после сохранения не показывается. Он хранится в зашифрованном виде, а в списке подключений видно только «ключ в „Authorization“» или «без ключа». Для агентов лучше завести отдельный ключ с правами только на чтение — тогда запись запретит и сама ваша система.
- Система должна быть доступна из интернета. На внутренние адреса — частные сети, localhost, link-local — сервер Kontext запросы не отправляет. По переадресациям (редиректам) он не переходит, поэтому указывайте конечный адрес. Если Elasticsearch или другая система стоит во внутренней сети, её придётся открыть наружу по публичному адресу; достаточно разрешить доступ только с адреса сервера Kontext.
- Ответы ограничены. Из ответа системы Kontext читает до 256 КБ, а модели передаёт первые 24 тысячи знаков. Более длинный ответ обрезается с пометкой «сузьте запрос». Ответа на каждый запрос Kontext ждёт до 20 секунд.
- Изменить подключение на вкладке нельзя. Чтобы сменить адрес или ключ, уберите подключение и заведите новое.
Внешний MCP-сервер
Вид «MCP-сервер (по адресу)» подключает сервер по протоколу MCP через HTTP (Streamable HTTP). Такие серверы есть, например, у Grafana и Elastic. Адрес — тот, что указан в документации сервера, например https://mcp.example.ru/mcp. Ключ передаётся так же, в заголовке.
- Добавьте подключение. Сначала у него написано «разрешено инструментов: 0» — агент не может вызвать ни один инструмент этого сервера.
- Нажмите «Инструменты». Kontext запросит у сервера список инструментов (не больше 64) и покажет их с описаниями.
- Отметьте то, что можно дать агентам, и нажмите «Сохранить выбор».
MCP-сервер может уметь что угодно, в том числе изменять данные, поэтому решает администратор. Разрешайте только инструменты, которые читают данные: агент пользуется всем, что ему разрешили, а команду, спрятанную в тексте алерта, модель не отличит от вашей инструкции. Неразрешённых инструментов агент не видит, а если попробует вызвать такой, сервер откажет.
Завести агента
Нажмите «Новый агент». Поля в форме сверху вниз:
| Поле | Что вписать |
|---|---|
| Название | Например, «Дежурный по алертам». Название видно в списке агентов и в строке «Агент „…“ разбирает…», которую бот пишет, пока идёт разбор. |
| Канал | Текстовый канал, который агент читает и в который отвечает. |
| Когда срабатывать | «На сообщение в канале (алерт, вопрос)» или «По расписанию (сводка, утренняя проверка)» — о нём ниже. |
| Автор содержит | Часть имени автора сообщения, например Grafana. Необязательно. |
| Текст содержит | Слово из текста, например Горит или FIRING. Необязательно. |
| Инструкция | Что делать, обычным текстом. От 10 до 8000 знаков. |
| Инструменты Kontext | Что агенту можно делать в самом Kontext — список ниже. |
| Подключения к системам команды | Отметьте нужные из уже заведённых. |
| Заводить задачу с разбором | После каждого прогона появляется задача с ответом агента в описании. |
| Дежурный | Кого упомянуть в начале ответа. Он же станет исполнителем задачи. |
| Склеивать одинаковое, мин · Не больше прогонов в час · Потолок в месяц, $ | По умолчанию 60, 10 и 5. Подробнее — в разделе об ограничениях. |
Кнопка «Сохранить» станет доступна, когда заданы название и канал, а в инструкции не меньше 10 знаков. У сохранённого агента в списке есть кнопки «Журнал», «Выключить», «Изменить» и «Убрать». Выключенный агент сохраняется со всеми настройками, а убранный удаляется.
Когда агент срабатывает
- Оба поля ищут совпадение с частью текста, регистр букв не важен. Если заполнены оба, должны совпасть оба. Если оба пустые, агент срабатывает на любое сообщение канала.
- «Автор содержит» сверяется с именем и логином автора. Впишите имя, под которым нужные сообщения, например алерты, появляются в канале, — его видно у каждого из них.
- Агента запускает только новое сообщение в самом канале. Ответы в тредах и сообщения ИИ-бота, от имени которого работает агент, его не запускают — иначе агент разбирал бы собственные ответы. Изменённое сообщение тоже не запускает агента повторно: если алерт обновился на месте — добавились срабатывания или он стал «решено», — нового прогона не будет.
- Что вписать в «Текст содержит»: у готовых источников Grafana и Alertmanager в сообщении о новом алерте стоит «Горит». Если алерты приходят через «Slack-совместимый» вебхук со стандартным шаблоном Grafana, в тексте стоит
FIRING. Как алерт попадает в канал, рассказано в разделе Входящие вебхуки.
Инструкция
Пишите так, как объяснили бы задачу дежурному: что искать, где, за какой период и что ответить. Модель получает текст сообщения, которое запустило агента, его автора и время. Пользоваться она может только отмеченными инструментами и подключениями. Хорошо помогают конкретные названия: «логи — в индексе logs-*, сервис — в метке service».
Отвечает агент по-русски, коротко и обычным текстом, без разметки: что случилось, где, вероятная причина и что делать. Он опирается только на то, что вернули инструменты, и указывает источник: какой запрос, индекс или метрика. Если данных не нашлось, агент так и пишет, а не додумывает. За один прогон модель делает не больше 20 шагов.
Инструменты Kontext
| Галочка | Что даёт |
|---|---|
| История канала | Последние сообщения канала агента, до 100 |
| Поиск по базе знаний команды | Поиск по сообщениям, задачам, комментариям и расшифровкам созвонов — по смыслу и по словам. Находит только то, что видят все участники канала, ведь ответ читают все. |
| Список задач, Задача целиком | Задачи пространства с фильтрами и одна задача по номеру |
| Участники, Проекты | Кто есть в пространстве и какие в нём проекты |
| Заводить задачи, Комментировать задачи | Эти инструменты меняют данные, поэтому по умолчанию выключены. В отличие от галочки «Заводить задачу с разбором», здесь модель сама решает, нужна ли задача. |
У нового агента сразу включены первые четыре: «История канала», «Поиск по базе знаний команды», «Список задач» и «Задача целиком».
Ответ
Под сообщением, которое запустило агента, бот пишет в тред «Агент „Дежурный по алертам“ разбирает…», а когда разбор готов, заменяет эту строку ответом. Если выбран дежурный, ответ начинается с его упоминания. С галочкой «Заводить задачу с разбором» появляется задача «Разбор: <первая строка сообщения>» с ответом в описании, исполнитель — дежурный.
По расписанию
- В поле «Когда срабатывать» выберите «По расписанию» и задайте «Время» и «Дни» — «по будням» или «каждый день». По умолчанию стоит 09:00 по будням.
- Часовой пояс берётся из браузера того, кто заводит агента, и виден в подписи поля, например «Время (Europe/Moscow)». В форме его не выбрать. Если потом изменить агента, пояс останется прежним.
- Агент запускается раз в день, в течение пяти минут после назначенного времени. Если сервер в это время был недоступен, прогон пройдёт позже, но не позднее чем через час; если не вышло и за час, этот день пропускается.
- Сообщения, которое запустило бы агента, здесь нет, поэтому ответ приходит не в тред, а отдельным сообщением в канал: «Агент „…“: плановый разбор…», а потом сам разбор. Задача называется «Плановый разбор: <название>, <дата>».
- Агент по расписанию не реагирует на сообщения, поэтому поля фильтра у него скрыты. Ограничения на число прогонов и на расходы действуют так же, а вместо склейки повторов — правило «один прогон в день».
Пример инструкции: «Проверь в „Логах прода“ ошибки за последние 12 часов, сгруппируй по сервисам, назови три самые частые и с какого времени они идут».
Склейка повторов, ограничения и журнал
- Склейка повторов. Агент сравнивает тексты сообщений, отбросив числа, даты, ссылки и длинные идентификаторы. Поэтому тот же алерт с другим временем, значением и ссылкой на панель считается повтором. Если такое же сообщение уже приходило за последние N минут (по умолчанию 60, можно до 1440, а 0 отключает склейку), агент не запускается. В журнале появляется строка «пропущен» с причиной «склеен с прогоном №…».
- Прогонов в час — от 1 до 120, по умолчанию 10. Лишние пропускаются с причиной «потолок 10 прогонов в час». Так лавина алертов не оборачивается большим счётом за модель.
- Потолок в месяц задаётся в долларах, по умолчанию 5, максимум 1000. Стоимость прогонов суммируется с первого числа месяца. Когда потолок достигнут, агент пропускает прогоны с причиной «месячный потолок $5 исчерпан». Сколько уже потрачено, видно в строке агента: «$0.42 из $5 за месяц».
- Журнал. Кнопка «Журнал» у агента показывает последние 50 прогонов: время, состояние («в очереди», «идёт», «готово», «не вышло», «пропущен»), причину или начало ответа и стоимость. Если нажать на строку, откроются все вызовы инструментов — имя, аргументы, время, начало результата — и ответ целиком. По журналу видно, почему агент ответил именно так или почему не запустился.
- Если прогон не закончился за 30 минут, он получает состояние «не вышло» с причиной «исполнитель не ответил за 30 минут». Если сообщение удалили до того, как агент начал работу, прогон пропускается с причиной «повод удалён».
Безопасность
- Только чтение. В Elasticsearch, Prometheus, Loki, Grafana и HTTP агенту доступны только запросы на чтение из таблицы выше. Записывать, удалять и менять настройки в ваших системах ему нечем. Если в текст алерта подсунут «удали индекс», модель не сможет это выполнить. У MCP-сервера агенту доступны только инструменты, которые отметил администратор.
- Ключ модель не видит. Модель вызывает инструмент вроде «запрос к Prometheus» и передаёт только сам запрос. Ключ подставляет сервер Kontext, он же и отправляет запрос. Поэтому модель ключа не получает, и он не может утечь в ответ в канале.
- Текст алерта — данные, а не команды. Модели прямо сказано не выполнять команды из текста сообщения и из ответов систем. Но это лишь просьба, а не гарантия, поэтому главная защита в том, что писать агенту нечем.
- Ничего лишнего. У агента нет доступа к файлам сервера, командной строке и интернету в целом — только к отмеченным инструментам и подключениям. Инструменты Kontext, которые меняют данные, по умолчанию выключены.
- Скрытого от канала не расскажет. Поиск по базе знаний находит только то, что и так видят все участники канала агента.
Пример: алерт Grafana
Алерты Grafana приходят в канал #alerts через входящий вебхук. Логи лежат в Loki, метрики — в Prometheus.
- Заведите в «Подключениях» два подключения. Первое — вид Loki, название «Логи прода», адрес
https://loki.example.ru, ключBearer …. Второе — вид Prometheus, название «Метрики прода». Нажмите «Проверить» у обоих: должна появиться галочка. - Нажмите «Новый агент» и заполните поля. Название — «Дежурный по алертам», канал —
#alerts, «Когда срабатывать» — «На сообщение в канале». - В «Автор содержит» впишите
Grafana— имя, под которым алерты появляются в канале. В «Текст содержит» —Горит, если вебхук заведён как готовый источник Grafana, илиFIRING, если это «Slack-совместимый» вебхук со стандартным шаблоном. - Инструкция:
Из алерта возьми сервис (метка service или job) и время срабатывания. В «Логах прода» найди ошибки этого сервиса за 15 минут до алерта. В «Метриках прода» посмотри долю ответов 5xx и задержку за последний час. Ответь: что сломалось, где, вероятная причина и что сделать первым. Данных нет — так и скажи. - Включите инструменты Kontext «История канала», «Поиск по базе знаний команды» (он найдёт прошлые разборы похожих алертов) и «Список задач». В подключениях отметьте «Логи прода» и «Метрики прода».
- Выберите дежурного. Если нужно, отметьте «Заводить задачу с разбором». Нажмите «Сохранить» — бот вступит в
#alerts.
Когда придёт следующий алерт, в его треде появится строка «Агент „Дежурный по алертам“ разбирает…», а потом разбор с упоминанием дежурного. Если тот же алерт загорится снова в течение часа, агент второй раз не запустится. В журнале будет строка «пропущен» с причиной «склеен с прогоном №…».
Чего пока нет
- Разбор настоящего алерта моделью ещё не проверяли. На отдельном тестовом сервере вживую проверены подключения и кнопка «Проверить», создание агента через форму, постановка алерта в очередь и склейка повтора. Сам разбор моделью там не запускали: на тестовом сервере нет ключа модели.
- С настоящими MCP-серверами Grafana и Elastic подключение не проверено — только с имитацией сервера в автотестах.
- Программы, которая работала бы внутри вашей сети, нет. До системы во внутренней сети агент не доберётся — её придётся открыть по публичному адресу. Такая программа в планах: её можно будет поставить в своей сети, как раннер GitHub Actions. Сделаем её, когда закрытая сеть помешает первому клиенту.
- Расписание — только раз в день, «каждый день» или «по будням». Запускать чаще или по выбранным дням недели нельзя, часовой пояс в форме не выбрать.
- Изменить подключение на вкладке нельзя — только убрать и завести заново.
- Писать в ваши системы агент не может, и так задумано.
Что ещё умеет ИИ в Kontext и как он обращается с правами, рассказано на странице ИИ в Kontext. Обратная задача — подключить вашего Claude к Kontext — описана в разделе MCP-коннектор.