Изик вышел на рынок, агенты заскучали и стали просить меня о продолжении… Нет, конечно, они же железяки бездушные)) Это моё шило опять зашевелилось в известном месте и начало выковыривать старые идеи из самых неожиданных его уголков.
После двух приложений к этим идеям уже трудно было относиться как раньше: ну лежит себе в голове очередное «было бы прикольно», пусть лежит. Теперь я знал, что можно сесть, объяснить агенту, чего хочется и начать делать. Вопрос «а кто мне это напишет?» как-то незаметно перестал быть главным препятствием, зато вопросов «а что бы ещё написать?» становилось всё больше.
Одной из таких старых мыслей оказался дайвкомпьютер.
Я одно время увлекался дайвингом и меня довольно сильно раздражала необходимость таскать с собой отдельное устройство или каждый раз брать его в аренду. Хороший дайвкомп стоит денег, особенно если хочется, чтобы с ним ещё и на берегу можно было ходить, а у меня к гаджетам давно одно требование: устройства должны быть универсальными. Двадцать первый век на дворе, блин, ну почему для каждого отдельного занятия мне нужна отдельная электронная штука?
И тут Apple выпустила Watch Ultra. Часы в нормальном носимом форм-факторе, возможности для использования под водой — естественно, мимо меня такое пройти не могло. Купил, полез разбираться и обнаружил, что встроенная аппка под мои дайверские хотелки не очень подходит: по моим ощущениям, скорее поплавать-поснорклить, чем получить тот дайвкомпьютер, который мне нужен.
Ладно, есть же сторонние приложения. Скачиваем, смотрим — и знакомимся с подписками. В тех вариантах, которые я тогда пробовал, запомнилась примерно такая история: несколько бесплатных дней, а потом плати за месяц или за год. А если я ныряю от случая к случаю? Мне не нужно, чтобы дайвкомпьютер был готов к работе все оставшиеся дни, когда я сижу на берегу, мне бы оплатить то время, когда он действительно нужен.
Вот эта мысль и пролежала где-то в памяти пару-тройку лет, пока я не научился превращать своё недовольство чужими приложениями в работу над собственными))
Так появился WeekendDiver, причём здесь у меня впервые возникла задача, которой я до этого толком не занимался: изучить конкурентов. Про ManiTalk и EasyStayTH я тогда был уверен, что ничего подобного в сторах нет, а тут передо мной совершенно очевидно существовал рынок, на котором уже работали другие люди.
Мы с агентами полезли смотреть, что там вообще есть: приложения, подписки, цены, скриншоты, какие возможности предлагают, что выглядит удобно, а где сразу хочется переделать. Прежде чем садиться за своё, полезно ведь выяснить, не сделал ли уже кто-нибудь ровно то, что тебе надо. Может, велосипед давно стоит в соседнем магазине, а ты тут собрался изобретать ему колёса.
Даже вариант с короткими периодами оплаты нашёлся, но по результатам нашего тогдашнего исследования он выглядел ориентированным прежде всего на китайскую аудиторию, а мне хотелось сделать штуку для более широкого круга людей. Заодно я привлёк знакомую дайв-инструктора: она помогала с интерфейсом и некоторыми параметрами, рассказывала, с какими часами к ней приходят ученики. По её наблюдениям, Apple Watch Ultra встречались очень часто, и мне это добавило уверенности, что в принципе - ниша есть.
Мы начали делать приложение, используя существующие алгоритмы расчётов и довели его до полурабочего прототипа. Тут, правда, есть существенная разница между «что-то уже работает» и «можно отдавать людям»: ошибка в напоминалке и ошибка под водой могут закончиться очень по-разному. Готовый алгоритм ещё надо правильно реализовать, поэтому проверки, сравнение показаний со штатными дайвкомпьютерами и вся дальнейшая история испытаний у меня пока впереди. Выпускать такое просто потому, что агент радостно сообщил об успешной сборке, я точно не собираюсь.
Но вместе с новыми проектами появлялась и другая потребность: хотелось автоматизировать уже сам процесс разработки. Раз уж у меня есть штука, которая умеет писать код, почему я всё ещё трачу столько времени на то, чтобы объяснять ей, как именно надо работать?
В предыдущей статье я как раз остановился на том, что большую часть замысла продолжал носить в собственной голове. Документы уже появлялись, сведения по проектам мы собирали, какие-то предпочтения я записывал, но каждую новую сессию всё равно приходилось начинать со знакомства: вот это мы делаем, вот так оно должно работать, сюда пока не лезь, а вот это мы уже пробовали, спасибо, не надо ещё раз.
Мне, человеку, который любит автоматизацию, всё это довольно быстро начало действовать на нервы. И очень хотелось найти такую инструкцию, которую один раз дашь агенту, после чего он всё поймёт и будет делать как надо.
Волшебный промпт, короче.
Спойлер: его не существует))
Но это я сейчас такой умный, а тогда вполне добросовестно искал. Читал статьи, подписывался на людей, которые рассказывали про работу с ИИ, собирал чужие промпты, редактировал их под себя, добавлял какие-то свои требования. Всё это происходило постепенно, ещё с первых экспериментов, а по мере разработки хотелось собрать из находок что-нибудь наконец окончательное: вот теперь у меня правильная инструкция, можно работать. Ван-шот разработка - мечта идиота прям))
Материала вокруг было достаточно, недостатка в советах «как правильно разговаривать с нейросетью» я точно не испытывал. Скорее наоборот: пока найдёшь что-нибудь полезное, успеешь прочитать ещё несколько объяснений, почему предыдущий способ был неправильным и надо совсем по-другому. Тут мне уже сами ИИшки помогали перерабатывать статьи и вытаскивать из них то, что можно попробовать в работе, иначе на чтение можно было потратить всё время, которое собирался сэкономить.
Найденные промпты я правил, склеивал, засовывал в настройки агентов, в пользовательские системные инструкции. Логика казалась очевидной: чем подробнее объяснишь, каким разработчиком он должен быть, тем лучше он будет разрабатывать.
Ну, условно: "Ты - великий программист, архитектор невероятного уровня, твой код должны выставлять в Лувре, никаких ошибок не допускай, перед каждым действием хорошенько подумай, как закончишь - перепроверь себя 7 раз." И вот это всё ещё на несколько экранов, чтобы он уж точно проникся ответственностью))
DO NO MISTAKES!!!
Казалось бы, чего ещё человеку… простите, машине надо? Всё же объяснил, даже большими буквами местами.
Параллельно копились скиллы. Для тех, кто с ними ещё не сталкивался: в нашем разговоре это инструкции для агента о том, как выполнять определённые задачи, иногда с готовыми инструментами или скриптами. Такая памятка, которую можно подключить, чтобы он не начинал разбираться с конкретной операцией с нуля.
Памяток этих к тому времени развелось немало, целые библиотеки. Я находил новые, смотрел, что подходит, подключал, пробовал. Потом открывал следующую сессию и опять выбирал набор: сегодня нужны вот эти, завтра другие, а послезавтра надо вспомнить, где лежал тот полезный, который мы уже использовали.
Очень удобная автоматизация: чтобы меньше делать руками, сначала сделай руками ещё вот это всё))
Меня раздражало даже не само наличие миллиона инструкций, а необходимость постоянно их обслуживать. Я хотел заниматься приложением, а занимался подбором того, что надо дать агенту перед тем, как он начнёт заниматься приложением. И ведь каждый раз казалось, что ещё немножко, ещё одно самое правильное правило — и процесс наконец сложится.
И тут я стал замечать неприятную вещь: мой замечательный мегапромпт как будто довольно быстро терял своё волшебство. По ощущениям, иногда уже на третьем запросе Клод работал так, словно часть длинного вступления мы с ним вообще не обсуждали. Приходилось возвращать его к правилам, уточнять, напоминать — всё примерно то же самое, от чего я и пытался избавиться.
Тогда я объяснял это себе тем, что растущий контекст вытеснял первоначальную инструкцию: мы уже столько всего наговорили, что она где-то там потерялась. Куда именно и что физически исчезало из входа модели, я не измерял, а видел результат: агент переставал следовать написанному, а код при этом продолжал делать примерно так же, как и до этого.
И вот это было интересно. Я потратил время, чтобы объяснить ему, какой он невероятный специалист, а он и без моего объяснения вполне умел писать код, и лучше помнить мои решения от звания «гениальный архитектор» он тоже не начинал.
Постепенно до меня дошла довольно простая штука: Клоду не надо рассказывать, что он крутой разработчик - мне надо получить от него результат крутого разработчика, а для этого ему гораздо полезнее знать, какое приложение мы делаем, что уже решили и почему вот эту работающую часть не надо в очередной раз улучшать до полной неработоспособности.
Это очень разные сведения. «Не допускай ошибок» ничего не рассказывает о том, какую ошибку мы вчера уже три часа искали, как нашли и почему выбрали именно такое исправление. А мне бы хотелось, чтобы сегодняшний агент начал работу с этого места, а не отправился самостоятельно открывать вчерашний день.
С разовой задачей всё было понятнее. Хочешь картинку — объясняешь, что на ней должно быть, как выглядеть и что поправить. Есть конкретный запрос, есть результат, на который можно посмотреть. С приложением так не получалось: пока работаешь над одной частью, выясняется что-то про другую, меняется решение, появляются ограничения, а первоначальная идея продолжает обрастать подробностями.
Какой промпт я должен был написать в начале, чтобы он содержал всё, что я сам узнаю только через месяц разработки?
Поэтому поиски одной идеальной инструкции у меня постепенно сошли на нет. Вместо очередного почётного звания для агента становилось важнее записать то, что мы уже выяснили о проекте, а вместо надежды на правильную формулировку — самому понять, чего я хочу и как проверить результат. Это понимание сложилось не за один вечер, я ещё успел немало раз попробовать решить проблему дополнительным абзацем в инструкции.
Со скиллами история чуть сложнее: готовая инструкция по конкретной операции вполне может пригодиться и агенты у меня ими пользуются. Но коллекция чужих памяток сама по себе не знает моей идеи, не помнит наших решений и не замечает за меня, что пользоваться получившейся функцией неудобно.
Так что скиллы ИИ — штука спорная, а свои личные-человеческие оказались всё-таки важнее. Умение разобраться, объяснить, спросить «а зачем мы это делаем?» и посмотреть на результат пока приходилось развивать самому. Готового файла, после подключения которого у меня в голове появлялось бы понимание проекта, тоже почему-то никто не выложил. Вот это было бы полезно, я бы скачал))
А в голове тем временем продолжали появляться идеи. Часть можно было отложить, к части вернуться позже, только у этой очереди всегда существовал один способ совершенно внезапно поменять порядок.
WeekendDiver лёг на полку, потому что у А. снова появилась идея.
в следующих сериях: велосипедов-то много, но у одного рама кривая, а у второго - колеса проржавели или как мы выдумывали настоящий мессенджер. Не переключайтесь!
