Когда резиновая уточка возражает

автор red


Мне нужно было реорганизовать логику разбивки на страницы в плагине Mastodon для Steampipe. После пары безуспешных попыток на этой неделе я снова попробовал это сделать с помощью помощников по кодированию последнего поколения на базе LLM.

Вот в чем была проблема. Предварительная версия плагина объединила пагинацию для многих таблиц в одном месте. Это было хорошо, но недостатком было то, что был только один стол Steampipe, который представлял собой то, что должно было быть много. Таким образом, вы могли бы сказать select * from mastodon_timeline но тогда у вас была квалификация с where timeline="home" или where timeline="local" и так далее. Для пользователя плагина это было неудобно, лучше сказать select * from mastodon_timeline_home или select * from mastodon_timeline_localи зарезервировать where пункт для более конкретных целей.

Плагин v1 создал отдельные таблицы, но дублировал логику разбиения на страницы для каждой таблицы. Он работал и был достаточно хорош, чтобы вовремя отправить плагин для демонстрации на FediForum, но он явно нуждался в доработке.

ChatGPT-4 и Sourcegraph Коди

С тех пор Sourcegraph выпустила своего нового помощника по кодированию Cody, который вы можете запустить как расширение VS Code или на sourcegraph.com. Это создало возможность для интересного сравнения. ChatGPT-4 основан на LLM OpenAI; Коди из Sourcegraph, с другой стороны, использует Клода из Anthropic.

Еще одно ключевое отличие состоит в том, что ChatGPT имеет только тот контекст, который вы вставляете в него. Коди, сидящий внутри VS Code, может видеть ваш репозиторий и имеет весь этот контекст. И если вы проиндексируете свой репозиторий, что Sourcegraph готов сделать для пользователей бета-версии по запросу, тогда Коди получит доступ к так называемым вложениям, которые различными способами представляют структуру вашего кода. Эти вложения, согласно Sourcegraph, могут значительно улучшить ваши подсказки LLM.

Даже без встраивания Cody предлагает широкий спектр помощи, от общего обзора того, что делает ваш репозиторий, до улучшения на уровне строк. Все это упаковано в расширение в виде набора рецептов за кнопками с именами вроде Объяснить выбранный код, Улучшить имена переменныхи Код запаха. Однако я еще недостаточно использовал эти рецепты, чтобы составить твердое мнение. В этом упражнении я использовал Cody в основном в разговорной манере, похожей на ChatGPT. В этом режиме замечательно иметь возможность выбрать код, о котором вы хотите поговорить, вместо того, чтобы вставлять его в чат.

В обоих случаях, что неудивительно, было недостаточно просто попросить инструменты консолидировать логику разбиения на страницы. Они были совершенно счастливы предлагать решения, которые никогда не могли работать и могли даже не скомпилироваться. Поэтому я начал с более простой версии задачи. Mastodon использует один и тот же механизм разбивки на страницы для API, которые возвращают массивы результатов разного типа: статусы (toots), учетные записи и уведомления. Сосредоточив внимание на них по отдельности, я сократил дублирование разбивки на страницы с 13 до трех. Затем, в отдельном проходе, я придумал, как свернуть их в один paginate функция, которая принимала один из трех параметров функции выборки данных.

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

Ключевое понимание

Вот это было озарение. Когда я строил переходный paginateStatus функция, первая попытка вернула результаты вызывающему коду в каждой таблице List функция, которая отвечала за потоковую передачу данных в Steampipe. Это привело к ряду обходных путей, чтобы обойти проблему, заключающуюся в том, что возвращаемые данные могут быть довольно большими и занимать много памяти. Это, вероятно, можно было бы решить с помощью горутины, которая будет передавать результаты обратно вызывающей стороне, а не возвращать их в виде пакета. Я пытался подтолкнуть обоих LLM к такому решению, в обоих случаях мне не повезло с несколькими попытками, но затем пришло озарение. Вспомогательные функции могут передавать результаты прямо в Steampipe и просто возвращать nil или err к призванию List функция.

С таким драматическим упрощением я смог завершить рефакторинг фазы 1, который дал три функции разбиения на страницы: paginateStatus, paginateAccountи paginateNotification. Фаза 2, которая объединила их в единую paginate функция, была немного более прозаичной. Мне нужна была помощь в понимании того, как необходимо switch операторы могут включать типы временной шкалы, переданные в paginate функция. Оба ассистента видели множество примеров этого паттерна, и оба услужливо пополнили мои несовершенные знания идиом голанга.

Партнерство с машинным интеллектом

Я ушел с глубоким чувством, что реальная ценность этих помощников заключается не в каком-то конкретном фрагменте кода, который они понимают «правильно» или «неправильно», а скорее в процессе совместной работы с ними. Когда вы работаете в одиночестве, вы ведете непрерывный разговор с самим собой, обычно в своей голове. Смысл разговора с резиновой уткой состоит в том, чтобы озвучить этот разговор, чтобы вы могли более эффективно рассуждать о нем.

Экстернализация вашего мышления таким образом внутренне ценна. Но когда резиновая уточка возражает, это совершенно новая игра. Как сказал Гарри Каспаров:

Выяснилось, что победителем стал не гроссмейстер с ультрасовременным компьютером, а пара американских шахматистов-любителей, использующих три компьютера одновременно. Их умение манипулировать компьютерами и обучать их очень глубокому изучению позиций эффективно противодействовало превосходному пониманию шахмат их соперниками-гроссмейстерами и большей вычислительной мощности других участников. Слабый человек + машина + лучший процесс превосходил один только сильный компьютер и, что более примечательно, превосходил сильного человека + машину + низший процесс.

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

Эта серия:

  1. Автономность, размер пакета, трение, разветвление и скорость
  2. Mastodon, Steampipe и RSS
  3. Просмотр федиверса
  4. Терминал Bloomberg для Mastodon
  5. Создайте свой собственный Mastodon UX
  6. Списки и люди на Mastodon
  7. Сколько людей в моей ленте Mastodon также написали сегодня в Твиттере?
  8. URL-адреса Mastodon с указанием экземпляра
  9. Графики взаимоотношений мастодонтов
  10. Работа со списками мастодонтов
  11. Изображения считаются вредными (иногда)
  12. Картирование более широкой федеральной сети
  13. Протоколы, API и соглашения
  14. Новости в федерации
  15. Сопоставление людей и тегов в Mastodon
  16. Визуализация модерации сервера Mastodon
  17. Сроки Mastodon для команд
  18. Плагин Mastodon теперь доступен на Steampipe Hub.
  19. Перенос списков Mastodon
  20. Когда резиновая уточка возражает

Related Posts

Оставить комментарий