Мой блог
Вайбкодинг и DevOps: учим искусственный интеллект расследовать сбои
Подробности изложены в материале первоисточника. Когда инфраструктура начинает сбоить, многие инженеры совершают классическую ошибку: показывают искусственному интеллекту одну строку ошибки и просят просто всё исправить. Нейросеть выдает десяток правдоподобных, но случайных советов, сервис случайно начинает работать, а истинная причина поломки остается скрытой. Я подготовил для читателей сайта Sergey Bagrov разбор того, как перестать играть в техническую рулетку и научить языковые модели проводить глубокие, системные расследования инцидентов вместо генерации слепых исправлений.
В материале на эту тему подробно разбирается порочная практика, когда в production-окружении приживаются случайные костыли и магические строки конфигурации. Никто уже не помнит, почему они появились, но трогать их боятся. AI в таком сценарии крайне опасен: он мгновенно находит правдоподобные объяснения при дефиците контекста, подменяя ими строгие доказательства. В результате формируется порочный круг случайных перезапусков и ложных гипотез.
Базовая терминология для работы с инцидентами
Прежде чем привлекать нейросеть к диагностике, я рекомендую четко разделить понятия, которые в обычной речи часто сваливают в одну кучу. Слово «ошибка» обычно используют сразу для пяти совершенно разных сущностей, из-за чего страдает вся логика устранения неполадок.
Симптомы, свидетельства и гипотезы
Симптом — это то, что фиксирует человек или система мониторинга: страница перестает загружаться, команда завершается с кодом сбоя или нужный файл не появляется в директории. Симптом указывает на то, где болит, но редко объясняет корневую причину. Свидетельство представляет собой наблюдаемый факт: точный таймстамп, конкретную команду, код возврата, строку лога или снимок состояния процесса. Свидетельство можно проверить повторно.
Гипотеза является возможным объяснением собранных свидетельств. Например, предположение «имя не резолвится из-за отсутствия DNS-записи» обретает ценность только тогда, когда для него предусмотрена проверка, способная эту гипотезу опровергнуть.
Причины и защитные механизмы
Непосредственная причина — это конкретное условие, из-за которого операция сорвалась прямо сейчас. В свою очередь, системная причина объясняет, почему некорректное условие вообще смогло пройти через все этапы проверки незамеченным. Устранение только непосредственной причины сохраняет фабрику будущих инцидентов.
Обычное исправление (fix) лишь восстанавливает корректное поведение системы. Предохранитель же (guardrail) меняет код или рабочий процесс так, чтобы аналогичный класс ошибок больше никогда не проходил бесшумно. Искусственный интеллект должен работать строго в рамках этой цепочки, а не перескакивать от симптома к случайному исправлению.
Анализ локальной механики и подготовка к проверке
Для отработки навыков расследования я предлагаю рассмотреть минимальный ручной этап — так называемый stage-zero bootstrap. Представим характерный черновик предстартовой проверки, который часто предлагают модели:
#!/usr/bin/env bash
MANAGEMENT_HOST="${MANAGEMENT_HOST:-control.example.invalid}"
echo "Checking management endpoint..."
curl -s "https://${MANAGEMENT_HOST}/health" || true
echo "Stage-zero preflight completed successfully"
Специальный домен .invalid зарезервирован исключительно под примеры и не должен разрешаться в реальные адреса. Если запустить данный скрипт без предварительной настройки окружения, мы получим нулевой код возврата и победный отчет об успешном завершении, хотя реальной проверки точки подключения не произошло вовсе.
Опасность ложноположительных результатов
Утилита curl выполнялась в тихом режиме, а конструкция с логическим оператором превратила любой исход в успех. Такой скрипт имитирует бурную деятельность, но скрывает реальную проблему. Это сродни изоленте, которой заклеивают индикатор аварии на приборной панели автомобиля: лампа не горит, водитель спокоен, но двигатель уже близок к перегреву.
Правильная постановка задач для AI
Вместо того чтобы судорожно править код, я настраиваю новую сессию диалога с нейросетью строго по протоколу. Сначала я восстанавливаю базовую память проекта, а затем назначаю модели специализированную роль исследователя с правами только на чтение (read-only). Агент не должен редактировать файлы или выполнять команды на этом этапе.
Протокол общения с исследователем
Я не использую маркетинговые формулировки вроде «ты опытный Senior SRE с уникальным кругозором», поскольку ролевые игры не заменяют жестких регламентов. Вместо этого я даю четкую инструкцию проанализировать документацию, логи и вывод скрипта, составить хронологию и отделить проверенные факты от догадок.
Грамотный ИИ-агент на старте не станет советовать прописать запись в hosts. Он задаст точные встречные вопросы: запрашиваемый скрипт без секретов, способ запуска, код возврата, а также ожидаемое поведение системы при отсутствии обязательных переменных окружения.
Сбор пакета свидетельств и хронологический анализ
Для полноценного расследования я формирую компактный пакет свидетельств. Не следует сбрасывать нейросети весь контент системных логов или домашней директории: избыток мусорного шума заставит модель тратить фокус внимания на устаревшие ошибки.
Формирование контекста по причинной связи
Пакет для текущего сбоя должен содержать лишь ожидания, фактическое поведение, команду запуска, переменные окружения и релевантный фрагмент исходного кода. Прежде чем выдвигать гипотезы, я рекомендую выстроить строгую хронологию событий на базе фактов, а не человеческих рассказов, где причина и следствие часто перепутаны местами. Такой подход позволяет превратить хаотичное исправление багов в инженерную дисциплину.
