00:00:00Всем привет. Добро пожаловать на еженедельную прямую трансляцию сообщества Vercel. Я Эми, а это
00:00:26Джейкоб. Мы из команды по работе с сообществом здесь, в Vercel. Напоминаю, что мы транслируем
00:00:31это в X и YouTube, но если вы хотите, чтобы мы точно увидели ваши вопросы и комментарии
00:00:36в чате, перейдите в сообщество и войдите в систему. Адрес — [community.vercel.com/live](https://community.vercel.com/live), и вы
00:00:43увидите это как первое событие.
00:00:44Да, в конце сессии у нас будет немного времени для вопросов. Если вы
00:00:49собираетесь участвовать в чате во время просмотра сессии, просто не забудьте следовать
00:00:55нашему кодексу поведения. И да, вы можете задавать любые вопросы по ходу дела, и
00:00:59мы обязательно их озвучим. Я хотела бы представить нашего гостя. С нами Джон Линдквист, чтобы показать
00:01:05нам новый плагин Vercel для Cloud Code. Привет, Джон.
00:01:09Привет, Джейкоб. Привет, Эми. Спасибо, что пригласили. Хорошо, давайте сразу начнем
00:01:16демонстрацию моего экрана, чтобы мы могли показать, что здесь происходит. Итак, уже некоторое время
00:01:23навыки (skills) пользуются огромной популярностью, и все обсуждают, какие навыки использовать, чтобы улучшить свои проекты
00:01:29и дать вашим агентам возможности, которыми они обычно не обладают. И вот, вырастая из
00:01:37навыков, следующим этапом эволюции стало то, что мы называем плагинами. И это то,
00:01:43что только начинает входить в обиход. Плагинов пока немного, и люди все еще
00:01:48изучают, как именно их создавать. Я собрал первый черновик плагина Vercel, и
00:01:56я хотел бы поговорить о том, зачем создавать плагин, когда его стоит создавать, почему плагин
00:02:03вместо навыков, как они дополняют друг друга и обо всех подобных вопросах. Так что,
00:02:09если у вас есть вопросы о том, что это — я буду об этом рассказывать — но что плагин может
00:02:16вам дать, стоит ли вам создавать его для внутренних нужд или лично для себя, я бы с удовольствием это обсудил
00:02:22в ходе сегодняшней сессии. Во-первых, разработка плагинов была изначально
00:02:32запущена командами Cloud Code и Gemini, но они использовали очень разные подходы. И
00:02:39стандартизация плагинов — это непрерывный процесс. Надеемся, что скоро я смогу
00:02:44рассказать больше о том, как один плагин сможет работать во всех редакторах. Так что
00:02:49сейчас мы говорим о поддержке Cloud Code и Cursor. CodeX появится очень
00:02:54скоро, если уже не сегодня, как и многие другие. Ведется работа над
00:03:01стандартом плагинов. Так что можно ожидать, что плагины станут чем-то, что можно упаковать и использовать
00:03:08в любых инструментах, которые вы применяете. С учетом вышесказанного, вы, возможно, знакомы с навыками —
00:03:15это markdown-файлы, которые могут быть загружены вашим агентом, чтобы дать ему дополнительные инструкции.
00:03:23Либо вы вызываете их вручную, используя слеш, либо агент
00:03:29сам понимает по описанию, что навык нужно загрузить. То есть это либо ручной вызов,
00:03:36либо решение агента на основе условия в описании. Теперь же, следующий уровень плагина
00:03:44заключается в том, что у них есть так называемые хуки (hooks). И если вы думаете о плагине или
00:03:53сессии в Cloud Code или в любой другой среде для агентов, у них есть жизненные циклы.
00:03:59Сейчас я нахожусь в директории плагина Vercel. Я запущу здесь Cloud Code и
00:04:07спрошу его, какие хуки он использует. И он выведет список хуков,
00:04:18которые определяют жизненный цикл. А жизненный цикл — это когда ваша сессия начинается, когда инструменты,
00:04:27например, до вызова инструментов, после их вызова, когда пользователь вводит текст, и
00:04:33когда ваша сессия заканчивается. Там есть еще целая куча других хуков. Но для наших целей
00:04:39в плагине Vercel это те, которые мы сейчас используем, исходя из наших первоначальных целей.
00:04:44Чтобы было понятно, основной целью плагина Vercel было помочь людям запускать
00:04:51агентов на Vercel. Идея в том, как нам сделать агентов осведомленными об экосистеме Vercel,
00:05:02обо всем на платформе, что связано с AI SDK, шлюзом (gateway).
00:05:11Наши рабочие процессы (workflows) здесь почти готовы. Так что все, что касается рабочих процессов, и, по сути, Vercel CLI сильно обновился.
00:05:19И все эти вещи вокруг SDK агентов, или, извините, вокруг запуска
00:05:26агентов на Vercel. Все это было выпущено за последние дни, недели,
00:05:33месяцы. А у любых таких сред для агентов, как Cloud Code, знания ограничены
00:05:39временной отсечкой, вероятно, от шести месяцев до года назад. Это зависит от модели, зависит от
00:05:46множества переменных. Но суть в том, что все эти агенты не знают
00:05:52обо всех последних потрясающих вещах, которые мы выпустили. Поэтому цель плагина Vercel —
00:05:57не дать агенту писать устаревший код и использовать устаревшие практики, и подтянуть
00:06:06его до уровня самых свежих новинок платформы Vercel. В этом и заключается
00:06:11огромный плюс: модели умные, но они просто не в курсе всех этих обновлений.
00:06:19И вместо того чтобы просить их проводить исследование каждый раз или использовать огромный
00:06:25набор навыков для каждой мелочи... если мы найдем способ, по сути, заставить
00:06:32агента загружать лучшую информацию о платформе Vercel, то для нас это будет большой победой.
00:06:38Если вы посмотрите на эти хуки в жизненном цикле агента — и опять же, есть еще много
00:06:45других хуков, которые мы сможем задействовать в будущем или которые вы сможете использовать. Но основные
00:06:49на данный момент: начало сессии (session start), использование pre-tool, отправка пользовательского промпта,
00:06:56использование post-tool и окончание сессии. Начало и конец сессии — это, как вы понимаете, начало
00:07:03и конец разговора с агентом. И вы можете думать о файле agents.md или cloud.md
00:07:12как о вещи, которую вы обычно делаете при старте сессии. Так что мы можем сделать при старте сессии для
00:07:19платформы Vercel? Мы могли бы загрузить файл платформы Vercel, а это
00:07:27значит, что если мы посмотрим на — я просто скажу — опиши vercel.md. Этот файл мы можем включить
00:07:40в начало сессии вместе с cloud.md. По сути, у вас может быть плагин, который,
00:07:48если все, что вы хотите — это поделиться файлом cloud.md и дать кому-то простой способ его
00:07:52установить, вы могли бы создать плагин, который просто внедряет это. Это база знаний
00:07:59Vercel. И это то, что мы постоянно дорабатываем. Мы ищем
00:08:04способы сжать этот файл и сделать его как можно меньше, сохраняя при этом хорошую производительность
00:08:08и баланс того, что там должно быть, а чего нет. Очень сложно
00:08:15проводить оценку (evals) на всех различных моделях и во всех средах. Но мы постепенно
00:08:21разбираемся с этим. Внутри файла, по сути, описаны взаимосвязи в экосистеме Vercel
00:08:28вокруг ИИ: когда и какие продукты использовать, когда вызывать те или иные вещи,
00:08:35то есть структурированное понимание всей экосистемы Vercel. Сама концепция — мне нравится,
00:08:44как это называют "оглавлением". Это как начало книги, когда вы начинаете разговор.
00:08:50И то, как мы это структурировали и обдумывали: если вы представите, как мне
00:08:56общаться с агентом о вещах, то у меня есть определенный словарный запас, и у него тоже.
00:09:02И если вы сможете дать ему глоссарий терминов, сопоставить их с документацией,
00:09:07сопоставить с навыками, сопоставить с вещами, которые он должен загрузить... Как только вы это сделаете, вы сможете
00:09:12представить, что именно я собираюсь сказать и что агент
00:09:19должен загрузить и вызвать. Попробуйте заранее составить такую "карту мыслей", чтобы я мог просто
00:09:24естественно с ним разговаривать и не беспокоиться о том, чтобы вообще упоминать
00:09:30AI SDK или какие-либо функции. И если я смогу просто найти
00:09:38способ сказать: "просто создай мне это приложение и запусти его", и тогда все
00:09:45в плагине просто обработается само собой... Извините, все в плагине обрабатывается,
00:09:52так что прекрасное приложение запускается на Vercel, и дальше можно итерировать. Похоже на то, как
00:09:57работают v0 и некоторые другие наши проекты. Если мы сможем сделать так, чтобы у вас был отличный
00:10:02опыт, но вам не приходилось задумываться об экосистеме, это будет огромная победа. В этом
00:10:09есть смысл? Джейкоб, Эми, есть какие-нибудь первые вопросы или что-то в чате?
00:10:16Джейкоб, кажется, у тебя был вопрос для встречи. Прошу прощения, очень жаль. У меня был вопрос
00:10:24к тебе, Джон. Да. Раз этот плагин работает как оглавление, не поэтому ли
00:10:30плагину не нужно постоянно обновляться каждый раз, когда выходит новая документация?
00:10:38Потому что это, по сути, набор ссылок, по которым агенты могут перейти, чтобы найти
00:10:43актуальные документы? Или у плагина есть система мгновенного обновления? Как
00:10:49работает этот подход? Да. По сути, если вы думаете о базе знаний на входе,
00:10:58многое из того, что она может — это просто указывать на последние документы. Если вы
00:11:07задумаетесь, этот вопрос часто возникает в связи с навыками и тем, как мы управляем навыками для библиотек.
00:11:14Если у кого-то установлена пятая версия какого-то SDK, а у кого-то другого — шестая версия
00:11:18SDK, и вы пытаетесь влиять на них навыками из разных версий, которые
00:11:22противоречат друг другу — как это сделать? Во многом это зависит от того, что у человека
00:11:31установлено. Вы можете проверить его файл package.json, проверить версию. И на основе
00:11:36этого придумать умный способ определить, на какие URL-адреса документации ему стоит смотреть, и какие
00:11:44навыки должны загружаться, и все в таком духе. И это еще одна часть фазы
00:11:51предварительной загрузки при старте сессии — просто инспекция проекта пользователя.
00:11:58Опять же, это все локально. Он просто просматривает проект, видит, какие библиотеки
00:12:02вы используете, какие настройки, чтобы знать, в каком направлении вас направить.
00:12:07Одна из самых частых ошибок — попытка использовать, скажем, generate object в последней
00:12:12версии SDK, когда вы знаете, что API изменился. Так что плагины
00:12:21просто берут это на себя. Вам не нужно беспокоиться о том, используете ли вы это в старом
00:12:27проекте или в абсолютно новом проекте с чистого листа. Плагин должен
00:12:32уметь с этим справиться. Вам не нужно помнить номера версий, названия пакетов,
00:12:34вообще ни о чем не нужно беспокоиться, просто позвольте Vercel сделать это за вас. Верно.
00:12:41И мы постоянно работаем над этим, у нас
00:12:49полно идей, как сделать это лучше. Плагин будет продолжать обновляться и развиваться.
00:12:54Есть еще вопросы?
00:12:58Да, каков, скажем так, общий охват плагина? Он работает только с сервисами
00:13:04Vercel? Только с тем, что я могу найти в панели управления? Или он также охватывает open-source библиотеки,
00:13:11которые мы поддерживаем, такие как Next.js, AI SDK, Workflows и так далее?
00:13:16Да, первоначальный охват — то, что мы решили с самого начала — охватить как можно больше,
00:13:25чтобы в нем была каждая библиотека, все, что есть на платформе, вообще все.
00:13:32Посмотрим, что используется чаще всего. Внутри компании у всех включена телеметрия, и
00:13:36вы тоже можете согласиться делиться телеметрией. Мы увидим, какие навыки реально
00:13:40используются, а какие нет. Таким образом, мы сможем убрать то, по чему
00:13:48нам не нужно столько информации, или добавить больше там, где это востребовано. Очевидно,
00:13:53что Next.js, AI SDK и самые популярные скачиваемые вещи должны иметь максимум информации.
00:13:59Так что это баланс на старте. Мы намеренно сделали первый релиз
00:14:08довольно масштабным, и в будущем мы сократим его до чего-то более изящного (svelte), если можно так выразиться.
00:14:15Да.
00:14:16В этом есть большой смысл. Спасибо. Да. Хорошо. Итак, если вы
00:14:24создаете плагин... И одна из причин, почему я говорю об этом в таких общих
00:14:29чертах, заключается в том, что я очень увлекаюсь разработкой, управляемой агентами (agentic driven development).
00:14:36И вместо того чтобы показывать вам в деталях, как все работает, я думаю, гораздо важнее
00:14:40научиться говорить об этом и усвоить терминологию. Тогда вы сможете просто попросить своего ИИ-помощника
00:14:45сделать подобные вещи. Если вы скажете Cloud Code создать плагин для самого
00:14:52Cloud Code и дадите ему документацию — он сможет это сделать. Так что гораздо важнее
00:14:58обсуждать концепции и идеи, чем слишком сильно углубляться в код.
00:15:05С учетом сказанного, старт сессии — отличное место для внедрения чего-то вроде оглавления
00:15:11платформы. Мол, вот все вещи, которые устарели... точнее,
00:15:19важные для меня вещи, которые устарели в большинстве моделей. И именно
00:15:24это приводит все к виду "вот как Vercel выглядит сегодня". Так что,
00:15:31даже если это единственное, что происходит в плагине, он уже знает, что ему стоит
00:15:37проверять обновления в дальнейшем. Но что мы также можем сделать — и это просто
00:15:44примечание: каждая сессия в Cloud Code имеет свой уникальный ID, что позволяет
00:15:52вам по ходу сессии следить за тем, чтобы соблюдался бюджет навыков
00:16:01и учитывать навыки, которые уже были загружены, и все в таком роде. Таким образом,
00:16:07вы можете записывать данные в окружение сессии или в какое-то хранилище сессии,
00:16:15где на протяжении всей работы мы будем следить за тем, чтобы не
00:16:20загружать уже загруженное и не дублировать усилия, потому что мы можем
00:16:26отслеживать происходящее. Это еще одна отличная вещь. Огромный плюс
00:16:30сессии в том, что она дает шанс получить ID сессии, чтобы через любые
00:16:35будущие хуки, через все, что запускается внутри сессии, у вас был ID, за который можно зацепиться
00:16:40и сохранять данные о сессии для вашего конкретного плагина.
00:16:47Cloud Code тоже так делает, если вы заглянете в их директорию .cloud, там можно
00:16:50увидеть сессии и прочее. Так что вы можете использовать ту же концепцию для своих плагинов и инструментов.
00:16:56Итак, с учетом всего сказанного... что такое pre-tool use? Мы поговорим
00:17:05о pre-tool и post-tool одновременно. Эти хуки дают вам шанс
00:17:11видеть изменения файлов. В pre-tool вы можете получить содержимое файла, который
00:17:20вот-вот изменится. Это касается чтения файлов, записи файлов,
00:17:29точнее, чтения, редактирования и создания файлов. И pre-tool также охватывает многие другие
00:17:34инструменты, которые используются, например, выполнение команд в bash. Так что у вас есть шанс: до того,
00:17:40как что-то произойдет, хочу ли я что-то предпринять? Например, если мы видим, что кто-то
00:17:47пытается выполнить специфическую команду Vercel CLI, и мы замечаем, что сейчас
00:17:55в Vercel CLI есть способ лучше — например, в Vercel CLI теперь есть опция API, где
00:18:00мы можем делать гораздо более сложные запросы. Vercel CLI обновился.
00:18:05Если вы давно его не обновляли, там много новых отличных функций. Мы можем намекнуть на это
00:18:11и сказать, что вы пытаетесь сделать вот это, или даже проверить: не устарел ли ваш Vercel CLI?
00:18:17Было бы здорово его обновить. Это дает вам гораздо больше вариантов. То есть это шанс
00:18:21проверить, собирается ли он вызвать какой-то инструмент, будь то вызов CLI.
00:18:27Это суперважно для Sandbox CLI, для Workflow CLI, для всех этих совершенно новых
00:18:34интерфейсов командной строки, о которых модели еще ничего не знают, потому что они вышли
00:18:39после временной отсечки их знаний. Это позволяет убедиться, что они все делают правильно. Так что
00:18:47для вызовов инструментов, таких как bash, для редактирования файлов — это становится очень интересным.
00:18:52Мы сейчас активнее изучаем сравнение файлов (diffing): этот файл выглядел так,
00:18:59а агент пытается сделать его таким. Правильное ли это изменение,
00:19:06исходя из наших библиотек? Или там есть какой-то "запашок"? И тут мы возвращаемся
00:19:11к примеру: допустим, у вас установлена 6-я версия SDK, а агент пытается использовать generate
00:19:18object как API, что часто бывает. И если вы видите это в тот самый момент — мол, я вижу,
00:19:25что ты пытаешься использовать generate object — давайте остановимся и напомним им, как на самом деле
00:19:32устроен AI SDK. Чтобы еще до тестирования, деплоя или чего-либо еще вы поймали ошибку
00:19:36ровно в тот момент, когда агент пытался изменить файл. И это как раз
00:19:46одна из тех вещей, где... если вы пытаетесь полагаться на навыки, а навыки — это текстовые подсказки вроде:
00:19:54если вы когда-нибудь пытались написать в cloud.md или в навык что-то вроде "никогда не фиксируй
00:20:03такие-то файлы" или "никогда не делай пуш, если я не в ветке"... Вы наверняка
00:20:13сталкивались с тем, что это не всегда защищает. Использование Pre-tool дает
00:20:21вам шанс буквально... это может остановить такие вещи программным,
00:20:28инженерным способом. И вы можете дать агенту другие инструкции и другие
00:20:32примеры того, как это можно сделать. В этом и заключается огромная разница между навыками,
00:20:41между вашими файлами cloud.md или agents.md — вы реально можете контролировать, что меняется,
00:20:47происходит ли это, и хотите ли вы этих изменений. Именно в этот момент — это просто супер.
00:20:51И отсюда вы получаете похожие возможности в post-tool. Это шанс проверить, что именно изменилось
00:21:01после того, как была выполнена команда в bash, что теперь стало иначе
00:21:07после вызова инструмента? Это не позволяет вам предотвратить что-то,
00:21:13но позволяет увидеть результат того, что произошло. И если
00:21:19оно что-то изменило или сделало что-то неожиданное, это еще один шанс получить
00:21:25diff и сказать: "это выглядит как-то странно". Давайте скажем агенту, что нам это не нравится.
00:21:31Так что это два важнейших хука жизненного цикла, о которых нужно знать при разработке. И для нас
00:21:38это опять же во многом борьба с той самой временной отсечкой знаний. Это то,
00:21:43с чем Vercel приходится бороться, потому что мы выпускаем продукты быстро, часто и
00:21:49просто продвигаем все эти новые технологии с невероятной скоростью. Это потрясающие вещи,
00:21:55и мы просто внедряем все эти новые технологии так быстро. И это просто потрясающие вещи,
00:22:00которые мы хотим представить людям. И именно здесь плагин может быть очень, очень кстати.
00:22:09Есть вопросы по этому поводу?
00:22:11Да. Если он использует пути к файлам, чтобы решить, какие навыки внедрять, значит ли это, что мы
00:22:21можем много выиграть от сужения области файлов в наших проектах до более узкоспециализированных,
00:22:27чтобы он мог точнее определить, какие навыки ему нужны,
00:22:34какие навыки ему нужно добавить. Например, если у меня большой файл и, возможно, он использует пять или шесть наших
00:22:39библиотек, а теперь он может добавить только три, до трех навыков там, или он может не знать,
00:22:47основываясь на пути к файлу. Так что, как вы думаете, стоит ли учитывать это сейчас,
00:22:51при создании программного обеспечения с помощью этих инструментов?
00:22:54Я бы сказал, что вам не стоит беспокоиться о коде, который пишет агент, и что это
00:23:02задача авторов плагинов. Это задача авторов среды выполнения — сделать так, чтобы эти вещи работали
00:23:12хорошо. Тех людей, которые на самом деле проводят оценки и смотрят,
00:23:17есть ли разница или нет. В то время как, я думаю, очень легко снова войти в режим инженера
00:23:27и подумать: «Я решу это, потому что так поступил бы человек». И это определенно
00:23:33то, чего хотел бы агент. Это один из величайших соблазнов разработчиков прямо сейчас —
00:23:39решать проблемы, находить проблемы там, где их нет. Потому что, да, если,
00:23:50если вы пытаетесь что-то исправить и не знаете, как это протестировать, то есть если
00:23:53вы знаете, как протестировать это на агенте, тогда вперед. Если у вас нет
00:24:00желания этого делать, тогда просто позвольте людям, которые создают плагины и среды выполнения,
00:24:05позаботиться об этом, потому что тестирование и оценки — это дорого. Запуск всех этих моделей
00:24:12с учетом этих изменений стоит больших денег. Это занимает много времени и это большая головная боль. Так что
00:24:17это одна из тех вещей. Я надеюсь, что никому не придется об этом заботиться.
00:24:23И я бы потратил свои усилия на другие вещи на данный момент. Да.
00:24:33Я понимаю, понятно. То есть нет смысла менять способ разработки,
00:24:40если следующая версия модели будет построена таким образом, что сделает все эти изменения
00:24:47по сути ненужными.
00:24:48Да. И я думаю, конечная цель для всех сред выполнения и для Vercel в том,
00:24:56чтобы вам действительно не приходилось так много думать или смотреть на код. Я не говорю,
00:25:01что это так прямо сейчас. Я говорю, что это конечная цель. Это то,
00:25:07к чему мы стремимся: чтобы вы создавали прекрасное ПО. Чтобы вы могли
00:25:11свободно выражать идеи, получать варианты и видеть, какие из них действительно находят отклик
00:25:19у вас, а затем отсекать лишнее до чего-то прекрасного для вас, вашей
00:25:25семьи или клиентов. Мы просто хотим создать прекрасный опыт, в котором
00:25:33вы не думаете слишком много о том, насколько велики ваши файлы. Пишете ли вы,
00:25:39ну, правильные ли паттерны проектирования, какие библиотеки выбираете. И я полностью согласен.
00:25:48Этот соблазн сказать: «Давайте использовать все эти паттерны, потому что агенты
00:25:53лучше с ними справляются. Давайте сделаем все это». И мы определенно
00:25:58экспериментируем с плагином и тестируем. Но опять же, если вы не можете это протестировать, то
00:26:07очень заманчиво сказать: «Я внес это изменение, и теперь оно явно работает лучше».
00:26:18И это одна из тех ловушек, когда, ну, теперь, когда вы внесли это изменение, вы
00:26:23не смотрите на то, как это работало раньше и как это влияет на другие места. И да,
00:26:28может быть, это хорошо сработало для одной сессии, и... в общем, инженерия теперь другая. Извините,
00:26:35я, кажется, ударился в философию. Да. Думаю, мы понимаем. Да. Хорошо.
00:26:44Итак, еще один хук — user prompt submit (отправка запроса пользователя). Это очень важный хук, так как он
00:26:50позволяет взять текст того, что напечатал пользователь. И если он упоминает библиотеку,
00:26:55концепцию или, например, слово «расписание» (schedule), давайте
00:27:00подключим навык cron. Это очень похоже на то, как работают навыки: если пользователь или
00:27:07если в разговоре обнаружено что-то, что соответствует описанию, но это на самом деле
00:27:12дает вам возможность запустить регулярное выражение (regex) для пользовательского запроса. И если вы обнаружите определенные ключевые слова
00:27:20или паттерны, загрузите эти навыки, сделайте эти вещи, дайте подсказку агенту,
00:27:26например, «может быть, тебе стоит задать больше уточняющих вопросов». Это интерактивная часть,
00:27:33ваш шанс сказать: «Пользователь сказал это, возможно, нам стоит получить больше разъяснений»
00:27:38или «мы должны просто загрузить все это и двигаться вперед». Можно делать
00:27:44очень забавные вещи с user prompt submit, например, если вы хотите иметь
00:27:48свой собственный кастомный глоссарий или язык команд для себя, и вы хотите
00:27:56добавлять префиксы со знаком доллара. И если что-то начинается со знака доллара, тогда делай это. Или
00:28:00если в чем-то есть... это что-то вроде написания маленьких bash-скриптов
00:28:07внутри user prompt submit: если вы обнаружите это, то можете сразу запустить инструмент, и
00:28:13он... вы можете запустить любые bash-скрипты, node-скрипты,
00:28:20что угодно внутри этого хука, что находится вне контекста сессии. Так что вы можете делать
00:28:28там всякие безумные быстрые вещи. Если вы хотите, например, обнаружить слово «commit»
00:28:37и избежать того, чтобы агент делал несколько шагов для коммита чего-либо. Вместо этого
00:28:47у вас просто есть скрипт, который делает коммит на основе того, что он может. Сразу после промпта
00:28:53с коммитом вы можете сказать агенту: «Я запустил этот коммит, тебе не нужно об этом
00:28:59беспокоиться». И вы можете сэкономить агенту несколько ходов. Есть
00:29:03несколько действительно интересных трюков, которые можно там провернуть, чтобы реально ускориться, если
00:29:09есть много повторяющихся действий, вместо того чтобы просить об этом агента каждый раз. Это
00:29:15своего рода забавный проект, если вы хотите создать небольшой user prompt submit для себя и
00:29:19придумать свой собственный язык общения с агентом. Но для нас
00:29:25это больше похоже на: «Если они сказали это, упомянули этот концепт, что это значит в
00:29:30терминологии Vercel?» — сопоставление слов, например, конкретно
00:29:37«планирование» (scheduling) — это crons и workflows. И, вы знаете, такие слова, как «параллельный» или «производительность»,
00:29:45вы можете найти и направить агента к конкретным вещам, которые вы знаете о Vercel. Очень, очень
00:29:53весело поиграть с user prompt submit, если у вас есть свободные выходные.
00:29:58И опять же, я повторю, здесь вполне можно сказать: «Помоги мне
00:30:03создать плагин для Claude code с user prompt submit, который будет обнаруживать знаки доллара»,
00:30:09и если появляется знак доллара, тогда запусти commit внутри user prompt submit, чтобы я...
00:30:14с этим промптом я мог бы это создать, так что не беспокойтесь слишком сильно о
00:30:19коде, вы можете просто начать играть с этим. Итак, когда у вас все это
00:30:26подготовлено, session end (конец сессии) — это шанс очистить любые файлы или что угодно, что вы написали
00:30:32во время сессии. Если вы начали собирать информацию о том, какие навыки были запущены,
00:30:39если вы начали собирать информацию о результатах работы инструментов, которые вызывались, или о каком-то
00:30:48бюджете или вещах, которые вы отслеживали на протяжении сессии, это шанс зайти туда и
00:30:51все очистить. Есть некоторые удивительные вещи, которые можно делать в session end. Потому что он запускается
00:30:57по сути по Ctrl+C, при выходе из сессии. Вы можете запустить других агентов,
00:31:05чтобы сказать: «Окей, посмотри на все файлы, которые изменились за сессию. Соответствуют ли они
00:31:09всему тому...» Мы этого не делаем. Просто это действительно интересные вещи, которые можно
00:31:13делать в session end, когда сессия окончена. Отражает ли эта сессия прогресс в этом
00:31:20проекте? Отражает ли она мусор? Например, просмотрите все файлы, которые были изменены.
00:31:26Не дублируют ли они то, что уже есть в проекте? И если да, то
00:31:30пройдитесь и очистите, и предупредите пользователя каким-то образом, через системное уведомление
00:31:37или другим способом, так как ваша сессия уже закрыта. Но действительно интересные
00:31:43вещи можно там делать. Итак, сказав все это, я просто
00:31:50напишу здесь небольшое демо. Я запущу версию Claude code с
00:31:56плагином Vercel против версии без плагина Vercel. Я буду использовать флаг
00:32:04«Claude dangerously skip permissions», оставлю отладку (debug) включенной, я покажу это через секунду.
00:32:08И эта модель будет установлена на Haiku. Это самая быстрая и простая модель
00:32:13в Claude code. И я скажу: «Просто напиши туториал по AI SDK».
00:32:26И мы просто посмотрим, что произойдет. И я собираюсь сравнить их
00:32:30бок о бок. Вы уже видите, что навык начинает загружаться. И здесь загружен плагин.
00:32:37Если я хочу начать сессию без каких-либо загруженных плагинов, есть флаг «setting sources»,
00:32:46который дает возможность отключить пользовательские настройки или
00:32:53настройки уровня проекта, по сути, просто игнорировать любые настройки. Таким образом, я могу загрузить его без
00:32:59плагинов. Параметр «no flicker» — ой. Этот «no flicker» появился только вчера, это отличный способ
00:33:05сделать плавную прокрутку внутри Claude code. Так что я включаю и его. И затем я
00:33:12собираюсь установить модель Opus, так как это самая умная модель. И если я просто введу тот же промпт
00:33:20про туториал по SDK. Это будет ванильная версия. И мы
00:33:28сравним результаты. Ой, мне нужно... я не удалил предыдущий. Давайте
00:33:36начнем заново. Позвольте мне запустить это. Я запускал это сегодня утром
00:33:50и не очистил перед началом. Так что позвольте мне просто запустить это снова.
00:33:56Просто для сравнения. Да.
00:34:01Итак.
00:34:04Огромная разница здесь в том, что это Haiku 4.5 против Opus 4.6, верно? Самая... эта
00:34:15в миллион раз дешевле и намного, намного быстрее. И в нее просто загружено гораздо больше
00:34:22информации о Vercel. Так что даже если вы сравните стоимость дополнительных токенов,
00:34:32которые мы включаем, против, знаете, Haiku против Opus. Пока это продолжается,
00:34:38мне следовало сказать «просто создай markdown-файл». Кажется, она перешла к написанию кода,
00:34:45но это будет достаточно интересно. Посмотрим. Итак, одна вещь, которую стоит отметить об одном
00:34:59из подходов, который мы применяем для многих наших навыков: как упоминалось ранее,
00:35:05из-за номера версии, из-за того, что разные навыки могут меняться, мы фиксируем версию
00:35:13навыков. Позвольте мне перефразировать. Разным версиям наших библиотек требуются
00:35:21разные навыки. Многие наши навыки говорят: «Пожалуйста, посмотри в node modules», где мы бандлим
00:35:28много документации, чтобы она тоже была привязана к версии. Так что, глядя сюда,
00:35:34вы видите, что она на самом деле читала локальную документацию. И она проходит через это
00:35:40и составляет этот туториал. Хорошо. Теперь давайте посмотрим на это. Это на самом деле
00:35:53не проводило никакого исследования вообще. Так что это будет интересно. В прошлый раз было гораздо больше исследований. И я
00:36:01уже вижу, что используется устаревшая модель Sonnet 4 вместо,
00:36:07скажем, 4.6. Используется устаревшее... Упоминается generate object, а это не то, что мы хотим использовать. Мы
00:36:15используем V6. И здесь уже куча вещей, которые просто устарели. Я бы не сказал, что они
00:36:23неправильные, но они очень, очень устарели, если вам нужна лучшая производительность
00:36:28и лучшие практики SDK. Итак. Заметило ли это что-то
00:36:37здесь? Да, похоже... Да, навык SDK заметил... Похоже, сначала был написан туториал
00:36:51здесь. И затем навык заметил, что он не обновлен до V6, при этом я
00:36:58вообще ничего не говорил. И теперь он идет и обновляет. Он перешел от generate object к generate text.
00:37:03И он обновляет все, чтобы убедиться, что используются последние версии. Хорошо,
00:37:10я могу сравнить эти два варианта. Я просто начну новую сессию. Давайте перейдем сюда и сравним
00:37:23туториалы без плагина против туториала с плагином Vercel на предмет точности. И это
00:37:44будет интересно увидеть, так как каждый раз, когда я запускал это раньше, Opus писал markdown-файл," : "будет интересно увидеть, так как каждый раз, когда я запускал это раньше, Opus писал markdown-файл,
00:37:48а в этот раз он сделал фрагменты кода. Будет забавно увидеть разницу.
00:37:54Когда вы это делаете, особенно если у вас есть другие навыки, работающие параллельно
00:38:03с этим плагином, есть ли риск конфликта между ними, в результате чего будет предпочтено
00:38:10что-то устаревшее, или плагин будет иметь более высокий приоритет?
00:38:16Плагин будет, по сути, я бы сказал, принудительно внедрять навыки на основе своих паттернов. Так что
00:38:27всегда есть такой риск, это ведь все просто контекст —
00:38:34все это просто текстовые файлы, которые запихиваются в сессию. Поэтому я бы всегда советовал
00:38:41использовать только то, что вам нужно для текущего проекта, так как очень редко
00:38:49стоит устанавливать навык на уровне пользователя, если только вы не уверены, что он нужен вам в каждом проекте.
00:38:58И даже для плагина Vercel мы работаем над тем, чтобы найти лучшие способы,
00:39:06чтобы загружать только то, что нужно для проекта, в котором вы находитесь. У нас много идей по
00:39:11этому поводу. Но одна из самых, пожалуй, спорных идей — это когда,
00:39:23например, пользователь говорит, что он установил плагин Vercel. Какое предположение можно из этого сделать?
00:39:30Если они установили плагин Vercel, но находятся на платформе конкурента и открывают
00:39:35проект на платформе конкурента, должны ли мы рассказывать им о наших вещах? Это,
00:39:42знаете ли, очень спорный момент, верно? И если один человек увидит это
00:39:47и он не хотел этого и на самом деле не заинтересован в миграции на Vercel,
00:39:53он очень расстроится. Если другой человек заинтересован, он будет очень рад. Так что
00:39:59здесь есть действительно любопытные вещи. Если вы придерживаетесь теории, что все
00:40:05просто будут взаимодействовать с агентами... Каков этикет плагина в плане информирования
00:40:15агентов о новых крутых вещах на вашей платформе, не
00:40:24наступая при этом на пятки другим платформам? Здесь много нюансов. Это очень актуально для того,
00:40:31что я делаю прямо сейчас: мы скоро выходим в GA с workflow. И я пишу
00:40:37руководства по миграции. Если кто-то хочет мигрировать от одного из конкурентов workflow, то,
00:40:43знаете, можно было бы напрямую использовать навык, чтобы сказать: «Мигрируй отсюда на workflow». Вот как,
00:40:49вот как это делается. Если вы хотите это сделать, в какой момент в агенте мне стоит проинформировать
00:40:55кого-то об этом? И эти вопросы мне очень, очень интересны. Особенно это
00:41:00постоянно крутится в голове, так как это то, над чем я работаю прямо сейчас. Но да, конфликты
00:41:07контекста... это будет проблемой в будущем. Я не знаю... попытки
00:41:14предугадать, чего хочет пользователь, основываясь на контексте его проекта и того, что он спрашивал ранее.
00:41:19Это было бы здорово. Мы могли бы технически посмотреть прошлые разговоры и увидеть, что они
00:41:27делали. Мы могли бы посмотреть историю коммитов. Мы могли бы сказать GitHub CLI: «Пойди посмотри
00:41:35на что угодно в проекте». Есть много вещей, которые можно сделать для сбора контекста,
00:41:40но это также переход определенных границ, например, вызов инструментов, о которых они не просили.
00:41:46Много, много действительно интересных вещей. Намного проще делать все
00:41:53в Vercel и просто иметь... вместо того чтобы... предоставлять одного агента с определенным набором
00:42:00правил и плагином, который просто красиво все доставляет туда, и не
00:42:05беспокоиться обо всех этих конфликтах. В любом случае. Надеюсь, я упомянул, да.
00:42:14В контексте плагинов: в какой момент этого процесса обычно находятся навыки,
00:42:19например, если бы у меня был навык миграции с Create React App на Next.js, и он
00:42:26просто лежал в моей папке навыков, велика ли вероятность, что он автоматически вызовется в любой момент,
00:42:32когда я нахожусь в проекте Create React App? По сравнению, скажем, с плагином Vercel здесь я могу
00:42:39решить, когда он будет вызван, и, если я создал ту же миграцию как плагин,
00:42:47я могу сделать так, чтобы это происходило только тогда, когда пользователь явно этого запрашивает. Это верная
00:42:52ментальная модель? Думаю, да. Мы обсуждали
00:42:59концепцию разовых навыков или навыков для одноразового использования, которые больше похожи на: «Я хочу
00:43:06сделать что-то вроде миграции», то есть это задача, которая у вас есть, или
00:43:12навык, связанный с задачей, который вы не хотите загружать в любое другое время, кроме этой задачи.
00:43:17Вы хотите, чтобы он был ограничен задачей. Вы не хотите, чтобы он был ограничен проектом.
00:43:22Вы не хотите, чтобы он был ограничен пользователем, вы хотите, чтобы он был ограничен задачей. И это те обсуждения,
00:43:27которые мы ведем. И я думаю, что у меня нет отличного ответа, потому что прямо сейчас, если у вас
00:43:33загружен такой навык, он будет влиять на среду выполнения в моделях в зависимости
00:43:41от модели и от других навыков. Трудно сказать, не зная точно,
00:43:47что еще есть в проекте. Но да, это тоже важный вопрос —
00:43:55навыки, ограниченные областью задачи. Еще один вопрос, который меня занимает: насколько
00:44:04эта архитектура плагинов специфична для Claude code? Если я захочу получить похожее поведение
00:44:12в Cursor или Codex или в любых других, есть ли у них свой формат плагинов? Нужен ли мне
00:44:18плагин для каждого из них? Как это работает? Да. Скоро у нас должны быть анонсы
00:44:25относительно спецификации плагинов и того, что все договариваются о том, чтобы наконец иметь
00:44:33плагины, которые будут работать универсально и обладать кросс-совместимостью. Почти все
00:44:39согласны с этим. Я бы не сказал «прямо сегодня», но если вы создадите плагин в формате Claude code,
00:44:45можно ожидать, что он заработает с другими инструментами в самое ближайшее время.
00:44:54Но да, это потрясающе. И так уже слишком много папок со «скиллами». Я очень рад, что мы наконец
00:45:00начинаем приходить здесь к какому-то стандарту. Да. Сама идея... мне очень понравилось,
00:45:07когда я обсуждал плагины с Anthropic, почему они выбрали слово «плагин», а не
00:45:13«расширение» — потому что плагин подразумевает, что его можно как подключить, так и
00:45:18отключить. То есть, если вы создаете плагин с набором навыков и хотите использовать его
00:45:24только для одной конкретной задачи, это должно быть вполне осуществимо.
00:45:33Если я работаю над проектом как дизайнер, я не хочу, чтобы все мои дизайнерские навыки
00:45:40мешали навыкам разработчика или чему-то еще. Нужно иметь возможность подключать
00:45:46только нужные части. И я полностью согласен с концепцией, что
00:45:52у каждого человека будут свои индивидуальные задачи, роли и проекты. И
00:45:59им будут нужны скорее плагины, чем просто навыки, потому что они смогут
00:46:05курировать свои собственные плагины: собирать свой набор навыков и хуков,
00:46:10полностью адаптированных под их стиль работы.
00:46:16Означает ли это, что мне стоит подумать об отключении плагина Vercel,
00:46:21если я работаю над проектом, не связанным с Vercel?
00:46:25Я бы сказал, что на сегодняшний день — да, потому что он ведет себя
00:46:34очень агрессивно. Надеюсь, мне не влетит за такие слова. Но
00:46:39основная задумка плагина Vercel в том, что вы загружаете своего
00:46:46агента и говорите: «Собери мне вот это». И затем эта вещь почти магическим образом
00:46:53появляется на Vercel. Это была первоначальная цель. Мы смотрим, как это работает, и на
00:46:59основе отзывов мы немного откатываемся назад, понимая, что нам определенно
00:47:04нужно лучше определять содержимое проекта, чтобы вовремя отключаться и прочее.
00:47:09Это будет реализовано очень, очень скоро. Так что, наверное, лучше
00:47:15оставить его установленным и включенным, потому что мы активно работаем
00:47:18над этим — мы как раз обсуждали это сегодня утром.
00:47:23Понятно. То есть это своего рода компромисс: возможно, в будущем он будет лучше понимать,
00:47:29когда ему стоит активироваться. Но сейчас пользователь сам контролирует,
00:47:36вызывается плагин или нет, подключая или отключая его для конкретной сессии.
00:47:42Да. И прямо сейчас, если вы введете команду /plugin, вы сможете перейти к установленным плагинам,
00:47:48просто переключив вкладку, выбрать любой нужный плагин и отключить его. Или обновить,
00:47:54или удалить — что угодно. Так что его можно отключить таким способом. Есть и
00:48:03другие, более продвинутые трюки, вроде настройки кастомных функций ZSH,
00:48:10которые загружают специфические настройки для пользователя. Все это пока довольно необычно —
00:48:17сама концепция профиля человека, который садится за компьютер.
00:48:23Какие плагины ему нужны в зависимости от того, на что он смотрит? Идеального
00:48:29решения пока нет. Но мы надеемся его найти.
00:48:34Это как когда подъезжает Waymo и подстраивает все сиденья под тебя,
00:48:39как только ты заходишь внутрь.
00:48:40Да, именно. И я думаю, что в какой-то момент агенты станут
00:48:49чаще расспрашивать вас о вас самих. Мне кажется, это очень важно — концепция профиля, личности, роли,
00:48:57которой сейчас будто не хватает. Если только не предполагать, что каждый теперь —
00:49:05менеджер всего проекта целиком. Я не думаю, что мы к этому придем в ближайшее время.
00:49:12Просто у некоторых людей идеи в определенных областях лучше, чем у других.
00:49:19Так что...
00:49:20Да, давайте взглянем на это. Посмотрим, что тут интересного. Да,
00:49:33любопытно: я заставляю Opus проверять Opus, и он все равно ошибается, так? Он
00:49:37по-прежнему рекомендует generate object и v6. Давайте проверим по документации. Он пытается
00:49:50проверить и говорит, что вариант, который я написал, неверен. Но он
00:49:56все еще считается рабочим, хоть и устаревшим. При этом Haiku рекомендовала самые свежие модели,
00:50:05и для меня это суперважно. Не знаю, сколько раз вы пытались
00:50:08использовать агента для написания кода с ИИ, и он такой: «Давай используем GPT-4». А ты:
00:50:14«Нет, это уже старье, и качество совсем не то, что нам нужно».
00:50:20Это как раз одна из тех вещей, которые можно отловить и сказать: «Проверь последние модели
00:50:25в AI-шлюзе». Можно было бы определять новинки, спрашивать пользователя, какие
00:50:31он хочет, описывать каждую модель и все такое. А сейчас
00:50:36эти агенты всегда предлагают GPT-4. Было интересно заметить,
00:50:43как в последнее время Claude Code все чаще рекомендует SDK от Anthropic,
00:50:49хотя раньше этого не делал. И ты думаешь: «Кажется, кто-то подкручивает системные промпты
00:50:55за кулисами, чтобы рекомендовать свой собственный SDK». Что ж, это бизнес, верно?
00:51:03Да, generate object все еще там. Так что это было полезно. После проверки
00:51:13документации туториал стал точнее. Некоторые вещи, которые, как я думал, выдумал Fab, на самом деле существуют.
00:51:19Так что вот: Opus осознает, что это реальные вещи. Это Haiku
00:51:25с плагином. А Opus, когда писал туториал и пытался его проверить... мне
00:51:32пришлось прямо ткнуть его носом в документацию, чтобы он нашел то, что Haiku
00:51:39с плагином выдала с первой попытки. И если вы знаете разницу между Opus
00:51:44и Haiku, то понимаете, что это серьезно. Вот сравнение того, что он правильно определил
00:51:53в плане правок. В общем, надеюсь, это наглядно демонстрирует
00:52:04один из сценариев. С AI SDK возможностей гораздо больше. Для таких вещей, как Workflow
00:52:15и Sandbox с новейшими технологиями Vercel — они невероятны, но их
00:52:21нет в обучающих данных моделей. И эта разница становится еще заметнее, так как модели о них просто не знают.
00:52:28Для этого и нужен плагин Vercel. Если у кого-то есть
00:52:35вопросы, пишите мне в X или где угодно. Я обожаю это обсуждать,
00:52:41буду рад ответить на любые замечания. Это определенно проект в процессе разработки,
00:52:48и мы будем его постоянно улучшать, пока он не станет по-настоящему магическим.
00:52:52Надеюсь, сегодня вы увидели первые ростки этого. Если есть
00:52:59вопросы — я готов ответить. Если есть идеи для плагинов для мозгового штурма —
00:53:04я тоже открыт к общению. Так что, если никто не хочет,
00:53:14чтобы я углубился во что-то еще, на сегодня это все.
00:53:20Очень признателен, что уделил время. Информации много, это большой сдвиг.
00:53:25Мы так быстро движемся со всеми этими ИИ-инструментами.
00:53:28Да, и замедляться мы, к сожалению, не собираемся.
00:53:33У меня такой вопрос: если люди захотят помочь или найдут баг
00:53:38и захотят о нем сообщить, как лучше всего с вами связаться?
00:53:41О, да, репозиторий проекта. Vercel/vercel-plugin или Vercel/
00:53:49vercel-plugin?
00:53:51Да, Vercel/vercel/vercel-plugin.
00:53:58Отлично. Я скину ссылку в чат, чтобы она была у людей.
00:54:03Спасибо. Создавать тикеты (issues) там — отличный вариант. Все быстро меняется.
00:54:10Я как раз одобрил большой PR прямо перед этим звонком.
00:54:14Круто. Ладно, Джейкоб, есть еще вопросы?
00:54:20Нет, думаю, мы обсудили на стриме всё, что хотели. Спасибо за
00:54:24такой детальный и классный демо-показ. Чувствую, что теперь готов собирать свои плагины
00:54:30для Claude. И вместо того, чтобы просто орать на агента, когда он решает сделать
00:54:37форс-пуш в ветку main, я теперь знаю, какие хуки использовать,
00:54:42чтобы этого больше не повторялось. Это очень выручает.
00:54:45Пре-тулзы — ваши друзья и лучшая защита от того, чего вы не хотите.
00:54:51Здорово. Большое спасибо, Джон. Не за что. Всем спасибо.
00:54:56И спасибо всем, кто присоединился к нам. Анонсы следующих сессий ищите на [community.vercel.com/events](https://community.vercel.com/events).
00:55:01Увидимся в следующий раз.
00:55:05Да-да. Увидимся в сообществе. Всем отличного дня!