День запуска ChatGPT: пишем Ansible-плейбуки и разбираем логи с GPT-3.5
30 ноября OpenAI открыла публичный доступ к ChatGPT. Пробуем на реальных задачах - Ansible, логи, разбор ошибок - и честно фиксируем где помогает, а где врёт.
OpenAI открыла публичный доступ к ChatGPT на базе GPT-3.5 через чат-интерфейс - первый массовый LLM-чатбот без порога входа
30 ноября OpenAI открыла регистрацию на chat.openai.com без очереди. Мы следили за анонсом с начала ноября и ждали именно этого момента - не пресс-релиза, а возможности самостоятельно потыкать в реальных задачах. Несколько человек из команды провели остаток дня за экспериментами, и вот что получилось.
Почему Ansible и логи
Выбор был намеренный: не «напиши мне функцию hello world», а задачи, с которыми работаем постоянно. Ansible-плейбуки - потому что мы активно используем IaC и у команды есть насмотренность, чтобы оценить качество вывода. Разбор логов - потому что это типичная «объяснительная» задача: есть стектрейс или длинный лог, надо быстро понять что случилось.
Ansible: где помогло
Попросили написать плейбук для стандартной задачи: установить nginx на группу хостов, разложить конфиг из шаблона, убедиться что сервис запущен и добавлен в автозагрузку. Результат вышел рабочим - структура корректная, модули правильные (ansible.builtin.template, ansible.builtin.systemd), handlers прописаны. Для junior-инженера, который ещё не набил руку, такой скаффолдинг реально экономит время: не надо держать в голове синтаксис, не надо лезть в документацию за именами параметров.
Хорошо сработало и на уточнениях. «Добавь проверку что порт 80 слушается после старта» - добавил wait_for. «Сделай идемпотентным для случая если конфиг уже существует» - правильно объяснил про creates и changed_when. Диалоговый режим здесь реально полезен: не надо переформулировать весь запрос, можно уточнять итерационно.
Сложнее пошло с нестандартными вещами. Попросили написать плейбук для регистрации хоста в FreeIPA с учётом особенностей нашей конфигурации - начал галлюцинировать параметры модуля freeipa.ansible_freeipa.ipahost, которых не существует. Уверенно, без оговорок. Если бы не знали модуль - могли бы потратить время на отладку несуществующих опций.
Логи: объяснитель работает
Скормили несколько реальных (предварительно обезличенных) стектрейсов из PostgreSQL и Python-сервиса. Здесь ChatGPT показал себя хорошо. Берёт ERROR: deadlock detected с контекстом из pg_log - объясняет механику, указывает на строки с конфликтующими блокировками, предлагает куда смотреть в запросах. Не всегда точно угадывает причину, но направление даёт верное.
Python-трейсбек с цепочкой исключений разобрал чисто: выделил корневое исключение, объяснил почему AttributeError мог возникнуть именно здесь, предложил три возможных причины в порядке вероятности. Это сэкономило минут десять в сравнении с самостоятельным разбором.
На больших логах (несколько сотен строк) столкнулись с ограничением контекстного окна - пришлось резать и подавать кусками, что неудобно. Не критично, но надо держать в голове.
Галлюцинации: паттерн понятен
По итогам дня вырисовался чёткий паттерн:
- Стандартные задачи с известными модулями - качество высокое, ошибки редкие и видны на прогоне.
- Специфические или менее распространённые инструменты - галлюцинирует уверенно. Параметры, которых нет. Флаги, которые не работают. Версии, которые не вышли.
- Объяснение и разбор - работает хорошо, потому что нет «правильного ответа» который можно проверить по документации. Модель хорошо умеет синтезировать объяснение.
Главная проблема не в том, что ChatGPT ошибается - это понятно и ожидаемо. Проблема в том, что ошибочный вывод выглядит точно так же как правильный. Никакого «я не уверен» или «проверьте документацию». Уверенный тон при неверном содержании - это профессиональная опасность для тех, кто не имеет экспертизы в теме и не может проверить вывод.
Как работать с этим прямо сейчас
Из сегодняшних экспериментов сформулировали для себя несколько правил:
- Верификация обязательна. Любой сгенерированный плейбук или скрипт - сначала в тестовую среду. Не потому что ChatGPT плохой, а потому что это неотъемлемая часть работы с инструментом.
- Хорошо для скаффолдинга, плохо для деталей. Структуру и типовые паттерны генерирует хорошо. Специфику конкретного модуля или нестандартный use-case - нужна документация.
- Объяснение и onboarding - сильная сторона. Для разбора ошибок, объяснения незнакомого кода, быстрого погружения в контекст - инструмент полезен уже сейчас.
- Никаких реальных данных. Обезличивать логи и конфиги перед отправкой - не обсуждается. Это и требование безопасности, и просто гигиена при работе с внешним сервисом.
Обсуждали внутри команды: стоит ли рекомендовать клиентам. Пока - нет, не как отдельный продукт. Как личный инструмент разработчика или инженера, аналог умного дополнения к IDE - почему нет, пусть пробуют. Главное донести: это ускоритель при наличии экспертизы, а не замена.
Продолжаем смотреть. Один рабочий день - это слишком мало для выводов, но достаточно чтобы понять: игнорировать точно не стоит.