Выпуск 14 · подкаст «Тысяча фичей»

#14: Используем технологии по назначению

24:27
↓ скачать mp3

Взгляд прагматичного инженера на GPT-хайп весны 2023-го: как Александр реально использует ChatGPT в ежедневной работе — пишет гуглдоки и джира-тикеты «потоком сознания» с нативной редактурой, почему Copilot в коде чаще мешает, чем помогает, но отлично пишет JavaDoc и подсказывает забытые тест-кейсы. Плюс Copilot CLI, плагины ChatGPT через OpenAPI-спеку и проверенная руками (и отложенная) идея пайплайна Whisper → ChatGPT → телеграм-посты из выпусков подкаста. Полезняшка — браузер Arc.

Главное

  • Смотрите на GPT-хайп как инженер: это генеративная лингвистическая модель — «генератор следующего слова», и именно из этого понимания рождаются рабочие юзкейсы.
  • Главный юзкейс — тексты: пишешь поток сознания на «своём» английском, ChatGPT с коротким контекст-промптом переписывает нативно; остаётся ~5% редактуры — так пишутся гуглдоки и джира-тикеты.
  • Copilot в коде чаще мешает: ложных срабатываний сильно больше полезных, проверка предложений съедает внимание, а сгенерированный код порой даже не компилируется — «сынок, хочешь помочь — не мешай».
  • Зато Copilot отлично пишет JavaDoc для публичного API (текст, а не код) и подсказывает забытые тест-кейсы — null, минус один и прочие краевые случаи.
  • Плагины ChatGPT интегрируются через OpenAPI-спецификацию — ещё одна причина писать спеки для своих сервисов.
  • Идею «Whisper → текст подкаста → ChatGPT → телеграм-посты» Александр проверил руками за полчаса вместо недель имплементации: модель не вытянула объём текста — идея спокойно отложена. Сначала проверка гипотезы, потом инженерия.
  • Ожидайте стабилизации и специализации инструментов — например, умный автокомплит в терминале, продолжающий команды «серым», как fish suggestions.
  • Бояться «потерять скилл» из-за инструментов — путь в никуда: пользуйтесь технологиями по назначению.
Расшифровка

[00:20] Здарова! Меня зовут Саша Пахомов, и я инженер, который любит своё дело. Это четырнадцатый выпуск подкаста «Тысяча фичей». Сегодня я расскажу, как использую ChatGPT в своей работе и не только. Поехали!

[00:32] Знаете, я никогда не любил следование трендам и хайпу со стороны блогеров — а сейчас все только и пишут о том, что GPT заменит программистов, джунов, мидлов, большинство профессий и так далее. Я считаю, паниковать не стоит. Я, как прагматичный инженер, смотрю на то, какие инструменты меня окружают и какие возможности открываются для решения задач и построения продуктов, — и на весь этот GPT-тренд я смотрю исключительно с этого ракурса. Давайте разберёмся, в чём эта технология уже сейчас может помочь и в чём конкретно её использую я — не выдуманные и не теоретические юзкейсы, а то, что я уже месяц применяю в своей day-to-day разработке и что, считаю, сильно мне помогает.

[01:36] Но прежде — попытаюсь своими словами объяснить, как я понимаю работу этой нейронной сети, и почему я не уделяю внимания статьям «заменит/не заменит» (для меня ответ очевиден: конечно, нет; технологический прогресс заменял и заменяет многие профессии — это не обсуждается; а про «интеллект погубит человечество» рассуждать вообще не хочу — это из области фантазий). GPT — третья, четвёртая, будущие пятые — это генеративные лингвистические модели. По сути, они генерируют текст: строят внутри себя представление, в котором после каждого слова с некоторой вероятностью следует следующее, и просто выбирают самые вероятные слова, исходя из инпута. По крайней мере, так их понимаю я — инженер: в университете и на Курсере смотрел, как работают NLP-системы, что-то обучал локально — базовое программистское представление есть, им и делюсь. Грубо говоря, это «генератор слов». Прошу прощения, если слишком упрощаю, — люди, которые действительно обучают такие модели, скажут, что я дилетант, и я соглашусь: я обычный инженер, не machine-learning-инженер, могу заблуждаться. Но исходя из этого представления я и придумываю юзкейсы: это система, которая хорошо справляется с генерацией текста. Факт. В каких случаях инженеру нужна генерация текста? Да во многих: документация к коду, документы, коммуникация с коллегами, джира-тикеты. В последнее время я пишу текстов в разы больше, чем кода, — и помощь в написании качественных текстов (говорю, естественно, про английский) как нельзя кстати.

[03:32] Мой первый юзкейс ChatGPT — написание гуглдоков. Даже не написание — редактирование. Как это работает: открываю сплит-вью на маке — слева гуглдок, справа ChatGPT. Описываю ему контекст: «я пишу документацию для своего сервиса, который делает то-то; хочу, чтобы конечный пользователь понял, как работает система; используй информативный чистый английский, имея в виду, что пользователи не знакомы с программированием». И говорю: я буду слать тебе куски потока своего сознания на английском, а ты переписывай с учётом сказанного. И всё — я спокойно пишу гуглдок, не задумываясь о формулировках: не делаю ли ошибку, не выглядит ли текст странно. Пишу так, как умею излагать мысли на английском, — а признаюсь честно: по сравнению с тем, как я изъясняюсь на русском, это рядом не стояло. Обычно я трачу кучу времени именно на формулировки: лезу смотреть словечко, думаю, поймут ли меня, не отобьёт ли нейтив себе лоб фейспалмом. Это, по сути, мешает работать — и, думаю, мешает многим ненативным спикерам. А так я освобождаю себя: пишу поток сознания, зная, что это драфт. Накидал страницу-две-три — и начинаю по несколько абзацев отсылать в созданный диалог. И почти моментально получаю свои мысли с тем же смыслом, но написанные так, будто я лет десять прожил в Штатах или Европе: нативно, легко читается. Читаемость текста повышается в разы — а это та самая подача, обёртка, в которой мы предоставляем результаты работы: чтобы люди читали и не спотыкались о «почему здесь так сложно написано». Я и сам, перечитывая свои английские тексты, понимаю: не хватает скилла выразить то, что хочу. А тут — процентов пять текста подредактировал, лишние фразы убрал — и получается документ сильно лучше написанный, чем сделал бы я. Гуглдоки я теперь пишу с ChatGPT.

[07:33] Следующий юзкейс — джира-тикеты. Опять же: генеративная модель хорошо пишет тексты, а тексты — это не только гуглдоки. В тикете иногда хочется дать много контекста и понятно донести мысль — на английском. Тем более я занимаюсь open-source-разработкой: тикеты могут читать люди, которые впервые видят баг-трекер и хотят что-то законтрибьютить. Я-то в контексте — могу быстро поправить класс; а человек со стороны не сможет. Поэтому полезно расписать: в чём концептуальная проблема, почему она у нас есть, как я вижу исправление. И вот этим описанием мне часто лень заниматься — а попросить ChatGPT нормально: у меня есть специальный промпт под это. Каждый раз, делая джира-тикет, я сначала накидываю всё грязно-грязно, потом прошу переписать — и получается в среднем лучше, чем сделал бы я. Это два моих базовых юзкейса, и они качественно повышают результаты работы.

[09:01] Дальше — генеративные модели это не только ChatGPT, но и всем известный Copilot, который уже давно можно попробовать в IDE и VS Code. Я пишу с Copilot месяца три-четыре. И вот что скажу. Вначале я действительно поражался: видел в своём коде автодополнение целых тестов, написанных так, как пишу их я — given, when, then; нейросетка быстро это выучила, и порой получались прикольные куски кода. Но со временем я думаю, что технология ещё не допилена до состояния, чтобы ею пользоваться — тем более платить. Что я имею в виду: ложных срабатываний — когда она подсказывает что-то нерелевантное — сильно, прямо сильно больше, чем тех, что реально помогают. А срабатывание — это не просто автодополнение метода, как в IDE: она подсказывает целые блоки кода, иногда целый класс нафигачит. И чтобы понять, подходит ли мне этот код, нужно сесть и секунд 10–20–30 разбирать, что она нагенерила, то ли это, что я ожидаю. На это уходит много ресурсов и энергии — и помощь перестаёт быть помощью. Моя мама любила говорить: «Сынок, если хочешь мне помочь — пожалуйста, не мешай». Это тот самый случай: иногда помощь во вред, и я просто всё стираю, отключаю Copilot и пишу так, как хочу. Базовый юзкейс «написание кода» лично для меня работает очень редко. Ещё момент: когда он дополняет программный код — не текст, а Java, — то, как правило, с ошибками компиляции: стопроцентно не хватит закрывающей скобки, точки с запятой, ещё чего-то. Я привык, что IDEA подсказывает и рефакторит отлично — её код хотя бы компилируется; Copilot же выдаёт код, который не компилируется, и это очень раздражает. Ещё один минус в копилку.

[10:56] Но это не значит, что Copilot нужно зарыть. Иногда он действительно полезен — когда нужно сгенерировать текст. А что такое текст в программе? JavaDoc. Я пишу на Java — и JavaDoc он пишет хорошо: лучше меня и быстрее. Я пишу open source, и на публичный API нужно писать JavaDoc — это часть продукта: из него генерируется сайт, он индексируется и гуглится, так что доки должны быть хотя бы чуть-чуть вменяемыми. Приходится писать — и вот тут Copilot справляется великолепно: я сначала пишу код, а перед коммитом ставлю слэш-звёздочку, где нужно, и смотрю, что он предлагает. Как правило, предложения адекватные — потому что это текст, его компилировать не надо. И второй кейс — тесты. Я пишу юнит-тест: инфраструктуру, DSL, setup и teardown, первый тест-кейс в своём стиле, негативный, пару позитивных… И думаю: какой бы ещё тест написать — все ли классы эквивалентности входных данных я перебрал? Делаю Enter и жду, какой следующий тест предложит Copilot. Тесты обычно простые, с говорящими названиями — такое автоподставление не напрягает мозг. И иногда действительно: «а, точно, забыл проверить на null», «а, на минус один». Краевые случаи он подставляет полезно. Но в среднем, когда я пишу продакшн-код, автоподставление Copilot я использую реально редко. Личный опыт.

[13:52] Что ещё приносят эти технологии. Буквально сегодня GitHub анонсировал Copilot CLI — command-line-утилиту, в которой можно спросить: «как мне сделать push с форсом вот в этот апстрим?» Вместо гугления и пары ошибок пишешь git ? и дальше текстом, что хочешь, — получаешь команду. UX этого CLI такой себе — думаю, можно придумать лучше (правда, я только сегодня прочитал и пока идеи не имею). В целом такое можно написать и самому: command-line-утилита принимает текст, отправляет его промптом в ChatGPT с просьбой сгенерировать команду и предлагает результат пользователю — кстати, идея для пэт-проекта; Copilot CLI плюс-минус так и работает. Я уже подался в waitlist — надеюсь скоро получить доступ. Мне особенно интересно, как использовать эту технологию в терминале: как вы знаете, я пишу довольно сложные user-facing command-line-приложения и тоже думал, как интегрировать Copilot или ChatGPT именно с терминалом. Это одна из первых проб — посмотрим, что выйдет. Ещё из интересного — система плагинов в ChatGPT, которую недавно заанонсили ребята из OpenAI. Что такое плагины: просишь ChatGPT «собери мне самые горячие новости за последние два года» — и если существует плагин типа «новости», она может сходить в него, спросить get all news, отфильтровать по дате, взять результат как input — и на output сгенерировать текст. То есть можно интегрировать код. А как он интегрируется? Через OpenAPI-спеку. Если у вашего сервиса есть достаточно хорошо описанная OpenAPI-спецификация, вы просто указываете URL до неё в системе плагинов — и дальше система сама понимает, что делать. Не нужно генерировать клиентов, писать Python-скрипты, вебхуки, коллбэки — она сама по вашему описанию пойдёт и подёргает ваши ручки, когда это понадобится пользователю. Единственная точка интеграции — можно зараутить промпт на плагин («на этот запрос иди вот сюда»), но в целом она и сама должна это делать. Так что пишите OpenAPI-спецификации для своих сервисов — возможно, в какой-то момент они станут хорошим плагином для ChatGPT. Прикольная идея.

[17:06] Ещё по теме. Недавно у меня была мысль сделать собственный пэт-проект. Я хотел запроцессить все свои выпуски подкаста — их уже тринадцать, этот четырнадцатый: сделать speech-to-text нейронкой от OpenAI под названием Whisper, получить текст, отдать его в ChatGPT и сказать: смотри, в этих текстах есть хот-тейки — прикольные темы, по которым можно написать короткие цепляющие телеграм-посты, которые хорошо разлетятся. Ну, типа: первый выпуск был про слепую печать — можно горячий пост в духе «без этого навыка ты вообще не программист», как-то так завернуть, чтобы не токсично, но бурление вызывало. В каждом выпуске есть два-три-четыре тейка — генерировать из них посты, редактировать и выкладывать на ежедневной основе в отдельный канал. Идея пайплайна. И вначале я, как инженер, сразу: всё, пошёл — на питоне вызову Whisper, получу текст, распаршу, абзацы передам в ChatGPT по API, результат отправлю в сервис, который будет за бота отвечать, там у меня будет админка… Короче, придумал себе инженерное решение — стандартная ошибка инженеров, и моя в том числе. Слава богу, у меня уже есть опыт имплементации проектов, которые не полетели, — и я вспомнил, что сначала нужно понять, нужно ли это кому-то и будет ли оно работать, а потом имплементировать. Решил сначала проверить руками, рабочая ли схема. С Whisper я разобрался буквально за полчаса: отдал ему выпуск подкаста у себя на компе, заинференсил, получил текст. Распознал он достаточно хорошо — за исключением пары моментов: моё «здарова» он понял как «как здорово». Дальше — это русский текст, стоит понимать — я скопировал его в ChatGPT: «выдай мне самые горячие темы из текста». И она упала: «сорян, слишком много текста». Я такой: блин, выпуск подкаста просто так в ChatGPT не засунуть. Начал выделять руками абзацы по темам — тоже не получается: буквально пары тысяч символов на русском он уже не переваривает. Расстроился — всё, идея не взлетит. Потом думаю: а если на английском? Переводить сам не хочу — у меня же пайплайн в голове. Воспользовался сервисом DeepL — отличный переводчик: весь текст он тоже не запроцессил, но половину перевёл. Эту переведённую половину я вставил в ChatGPT — и на английском тот же объём он смог! Выдал пять хот-тейков — но такие… продажные, будто продают тебе технологию: промпт я недонастроил. В целом я решил, что пока не готов тратить силы на имплементацию ради такого результата: нужно поиграться с промптом, по-другому сформулировать задачу — а может, подождать GPT-5, которая сможет. Идею отложил. Но что мне понравилось в подходе: я не начал сразу имплементировать питоновские скрипты, сервисы и деплой — я проверил руками и понял, что возможностей нейросети (и моих) пока не хватает для нужного результата. И спокойно отложил, не думая, что упустил возможность: проверил — не моё — пошёл дальше. Подход прикольный, теперь буду использовать всегда.

[21:36] Давайте к выводам по этому — достаточно дилетантскому — потоку сознания про нейросети. Во-первых: не париться по поводу «кто кого захватит» и судьбы профессий — если голова на плечах, не пропадём. Чего бы я ожидал — стабилизации инструментов и поиска новых ниш для технологий. Copilot лично мне пока не подходит, чтобы писать за меня код, — он помощник, но код я пока пишу немного получше, чем он, слава богу (а вот английский текст — уже хуже). Ожидайте стабилизации и «хардened»-инструментов: специализированный помощник по написанию кода на Java или Bash, редакторы, помощники для command-line-утилит. Я вот сейчас думаю: можно было бы написать CLI с умным автокомплитом — кто знает, как работают fish suggestions: пишешь команду, а продолжение появляется «сереньким», не выпадающим списком, а как Copilot в IDE. Вот этим сереньким продолжать команды пользователя — идея, кстати, может быть, реализовать. Все эти инструменты будут становиться удобнее и практичнее, и мы будем их использовать. А кричать «не хочу пользоваться ChatGPT, потому что теряю скилл написания текстов»… блин, если так бояться за свои скиллы и не пользоваться инструментами, которые делают это лучше, — ничего хорошего у меня для этих людей нет. Давайте пользоваться — и пользоваться по назначению.

[23:31] В конце с меня, как обычно, полезняшка. На этот раз это целый браузер — под названием Arc. Наверное, многие про него слышали. Я пользуюсь им уже две недели, и пока мне очень нравится: обожаю продукты, создатели которых ставят UX приоритетом номер один. Ссылку оставлю в описании — присоединяйтесь и пишите свои мысли по поводу этого браузера. Не забывайте делиться подкастом с друзьями и коллегами. Давайте прокачивать себя и людей вокруг. Ну а на этом всё. Услышимся!