Transcription
Добро пожаловать обратно всем на подкаст VS Code Insiders, ваш универсальный магазин для всего, что связано с VS Code, вашим любимым редактором кода во всем мире. Я Джеймс Монте Магно, и со мной, снова, в 18-й раз, я не знаю, в 20-й раз. У нас всего около 20 эпизодов подкаста, так что это не может быть так много. Вот Брайан, как дела, приятель? Все отлично. Я собираюсь поместить твое лицо прямо в мой телесуфлер, так что теперь это просто типа, вау, я могу смотреть прямо в твою душу. Мне нравится. Мне нравится. Я здесь в гараже, а ты здесь в какой-то новой обстановке. Что происходит? Ты как будто Да, я наконец-то переехал в настоящий офис после всего этого времени. Я выбрался из своего подвала, так что, эм, я подумал, что пора обновиться в 2026 году. Ты такой взрослый, мне нравится. Очень хорошо. Выглядит хорошо. Эм, выглядит хорошо. Эм, сегодня, так что мы как бы строим на основе множества захватывающих улучшений, которые действительно появились за последние несколько месяцев, эм, в том, как разработчики работают с агентами, на самом деле, как агенты работают сами с собой и с другими вещами. У нас был Гарольд некоторое время назад, который рассказывал о под-агентах, и мы в итоге углубились даже в пользовательские агенты и оркестрацию, и я думаю, что это действительно крутой, продвинутый сценарий. Однако, что я заметил, это то, что кажется, я отправляю запрос, и по сути, кажется, происходит этот цикл, который крутится, и в конце цикла приходит ответ, и этот цикл драматически изменился за последние, знаете ли, 6, 7, 8 месяцев, поскольку развитие агентных систем развивалось, и этот агентный цикл, если можно так назвать, действительно развивался, и я думаю, мы получаем тонны вопросов в Твиттере и на Реддите о том, что это такое, что это такое, что это такое? О, это модель? Я не выбирал эту модель. Что это за модель? И что насчет моего контекстного окна? И что происходит здесь, верно? И я думаю, что поскольку вещи развиваются так быстро, и мы получаем обновления каждый день или каждую неделю, по крайней мере для меня, это просто происходит, верно? И я могу углубиться в документацию, чтобы понять, что происходит, но тогда у меня возникают такие вопросы, как: что на самом деле делает под-агент, и как он на самом деле работает, и стоит ли мне вообще беспокоиться? Например, я хочу углубиться в агентный цикл, и, возможно, ты сможешь раскрыть слои того, что я только что сказал, как агентный цикл, возможно, начался, как он развивался, и где он находится сегодня, и куда он движется. Да. Я имею в виду, это такая большая тема. Буквально, забавно, что это была тема дня, потому что я только что вернулся с визита к клиенту, и я провел 6-часовую презентацию. Так что мы постараемся не проводить 6-часовой подкаст, потому что здесь есть много чего, куда можно углубиться. Эм, но да, ты прав, мы говорим об этом агентном цикле. Итак, что это такое? Итак, я буду использовать некоторые приближения, они могут быть не совсем точными, эм, но я думаю, они полезны для ментального понимания того, как это работает. Эм, так что представьте, что у вас есть просто гигантский цикл while, верно? Эм, и этот цикл while начинается, когда вы нажимаете Enter на своем первом запросе. Эм, и, по сути, что происходит в этом цикле, это множество, множество взаимодействий с моделью, верно? Эм, и в каждом взаимодействии вы, по сути, эм, это просто API-запрос к модели, верно? Эм, и внутри этого API-запроса есть несколько компонентов. Эм, так что у вас есть эм, системный запрос. Это [хмыкает] на самом деле динамически создается для каждой комбинации вещей, которые вы выбираете в селекторе. Так что, если вы выбираете другую модель, другую семью, это дает вам другой набор запросов, на самом деле. Эм, так что нет единого запроса для Copilot. Есть некоторые базовые эм, запросы безопасности ответственного ИИ, которые есть в каждом эм, запросе Copilot, но помимо этого, эм, он динамически создается и оптимизируется специально для этой модели. Так что мы много работаем с поставщиками моделей заранее, прежде чем выпустить модель, чтобы действительно настроить запросы для наилучших возможных результатов. Эм, так что существует огромный цикл обратной связи, который происходит до запуска, а затем также огромный цикл обратной связи, который происходит после запуска. Так что мы делаем такие вещи, как A/B-тестирование, тестируем альтернативные запросы на основе наших гипотез, и существует огромный цикл оптимизации до запуска с офлайн-оценками, а затем эм, цикл улучшения после запуска с онлайн-оценками. Так что у вас есть системный запрос, верно? Затем, эм, мы добавляем к нему другие вещи. Так что явный контекст, вещи, которые вы упомянули, например, вы говорите, что находитесь в hello.tsx, это упомянуто. Мы включаем неявный контекст. Так что, если у вас открыт редактор, эм, файл в редакторе, и вы начинаете сессию агента, мы считаем, что это довольно сильный сигнал, что ваша вещь может относиться к эм, редактору, который у вас открыт, верно? Так что мы это прикрепляем. Эм, если у вас есть запущенные терминалы, такие вещи, как даты, верно? Информация о вашей среде, ваша, знаете ли, конфигурация терминала, такие вещи автоматически прикрепляются. Эм, затем у вас есть инструменты, верно? Так что это действительно основа агентного цикла. Когда вы думаете о, например, чате, эм, чат был таким, что вы отправляете запрос да модели, так что с этой точки зрения это похоже на то, что у нас есть сегодня, но затем модель может просто отправить мне текстовый ответ. А теперь, на самом деле, происходит то, что существует набор встроенных инструментов, эм, а также эм, инструменты, которые вы можете добавить для таких вещей, как NCP и других. Эм, и, по сути, вы можете сказать модели, вы можете выбрать один из этих инструментов, или вы можете дать мне текстовый ответ. Так что, например, это может быть поиск, это может быть эм, создание файла, это может быть редактирование файла, верно? Эм, это может быть вызов сервера GitHub NCP, и каждый из этих инструментов имеет схему и описание. Так что говорится, вот что делает этот инструмент, эм, вот параметры, верно? Так что затем модель, если она говорит: "Хорошо, первое, что мне нужно сделать, это поиск". Хорошо, ну, мы используем инструмент поиска, и затем модель заполнит эти параметры, а затем вернет их нам, и мы выполним инструмент. Так что затем у вас есть инструменты, верно? И затем у нас есть ваш пользовательский запрос, верно? И это отправляется модели. Эм, так что это, это, как бы, основная основа. И затем, что происходит в агентном цикле, это то, что он просто постоянно продолжается, верно? Так что модели предоставляются результаты предыдущего действия, и она может итерировать по ним. Так что, хорошо, мы делаем поиск. Хорошо, теперь у нас есть список файлов, которые мы потенциально можем прочитать. Хорошо, теперь агент может вызвать инструмент для чтения некоторых из этих файлов. Хорошо, теперь у нас есть правильный контекст. Хорошо, теперь я думаю, что у меня есть информация, которая мне нужна, чтобы я мог перейти и внести изменения в файл. Хорошо, я вызову инструмент редактирования, верно? Хорошо, теперь я думаю, что я закончил, так что я отвечу некоторым текстом пользователю, обобщающим, что произошло. Эм, а затем агент, по сути, вернет сообщение об остановке и скажет: "Эй, я закончил". И тогда разговор в VS Code завершится, и вы сможете отправить его из запроса. Так что это, это, как бы, основная основа агентного цикла. Имеет большой смысл. На самом деле происходит много вещей до, знаете ли, до фактического пользовательского запроса, верно? И я думаю, что кажется, что, знаете ли, набор инструментов и опций вырос, верно? Потому что у вас есть не только обход, у вас есть режим автопилота, у вас есть обычный режим взаимодействия, у вас есть режим планирования, у вас есть пользовательские агенты, у вас есть режим запроса, у вас есть эти обычные интерактивные режимы агента, верно? И затем, внутри этого, у вас есть все модели и уровни рассуждений и все эти разные вещи. Так что это увлекательно узнавать об этом, а также, как вы сказали, обо всех доступных инструментах. Я заметил много, что эти агенты уходят, и происходит много, знаете ли, исследований и расследований, верно? И это всегда происходит. Например, хорошо, мне нужно выяснить, как добавить эту кнопку куда-нибудь. Ну, куда я ее поставлю? В каком файле она находится? Он ищет и читает вокруг и читает файлы, эм, в целом, но я думаю, что в этом цикле, о котором вы говорите, кажется, что все ли это происходит в одном единственном агенте, одной единственной вещи? Потому что я чувствую, что есть ветвления, которые происходят, которые я вижу, потому что я большой, знаете ли, читатель, верно? Например, я люблю читать, что происходит в чате. Например, о, и выпадающие списки, они сворачиваются, и здесь есть небольшой вывод, и он делает это, он делает то. Так кто, кто вызывает что в этом агентном цикле? Кто решает, что будет вызвано? Модель решает на основе предоставленного ей контекста. И она просто итерирует по предыдущему выводу и добавляет его к сообщению. Эм, так что, я думаю, основы, которые мы только что сказали, очень важны. Есть гораздо более продвинутые методы, о которых мы можем говорить сейчас, например, хорошо, когда вы начинаете думать о под-агентах и оркестрации и всех этих вещах, как на самом деле работают эти вещи? Как работают все эти настройки? Когда у меня есть навык против инструкции против эм, файла запроса, эм, реальность такова, что все эти вещи просто изменяют эту базовую конструкцию по-разному, верно? Так что, эм, давайте подумаем о чем-то базовом, как инструкция. Это текст, который добавляется к вашему запросу. Если это глобальная инструкция, она всегда добавляется. Если это эм, файл инструкции, где у вас есть шаблон glob, он выборочно добавляется, верно? Эм, если у вас есть навык, верно? По сути, в запросе, эм, модели предоставляется список навыков, точно так же, как ей предоставляется список инструментов. Она может выбрать прочитать этот навык. И затем, что происходит? Это просто добавление текста, верно? И это больше контекста для модели, чтобы принять решение, верно? Эм, что происходит, когда у вас есть серверы NCP? Ну, это просто добавление списка встроенных инструментов, верно? Который вы видите, эм, в агентном цикле. Так что теперь вы дали модели больше инструментов. И я думаю, когда мы думаем о, например, использовании и всех решениях, которые нам нужно принять, есть на самом деле огромное количество компромиссов, которые мы должны сделать как продуктовая команда, чтобы решить, какие разные стратегии мы хотим использовать, верно? Так что, эм, конечно, мы можем добавить миллион вещей в запрос, верно? Но это заполняет контекст, верно? Конечно, мы можем добавить, я вижу, как некоторые люди говорят: "Я хочу иметь тысячу инструментов, инструмент для всего". Хорошо, ну, возвращаясь к основам того, как работают эти модели, модель должна сделать выбор, верно? Она должна решить между всеми этими вариантами, которые вы даете, какой из них наиболее оптимален. И точно так же, как и человек, когда вы даете людям больше выбора, их способность выбрать правильный выбор снижается, верно? Эм, и поэтому существует огромное количество оптимизации с нашей стороны, которую вы на самом деле не видите, и мы на самом деле не говорим об этом, мы должны говорить об этом, эм, но мы не говорим об этом очень много о, например, оптимизации инструментов, например, какие правильные инструменты, сколько инструментов у нас должно быть? У нас есть пользовательские модели, которые, по сути, берут список инструментов, если у вас было 1000 инструментов, и, по сути, сокращают его до, эм, это инструменты, которые мы на самом деле считаем важными для этой сессии, основываясь на том, что говорит модель. Некоторые из этих инструментов также имеют свои собственные, например, пользовательские модели, которые мы создали за кулисами. Так что, как вы упомянули сбор контекста. Верно? У нас есть пользовательская модель для получения кода агента. Потому что, как оказалось, если у вас нет правильного контекста, вы не знаете, куда внести изменения, что довольно важно для агентного цикла, верно? >> Да. Да. Есть много, как бы, микро-решений, которые вы принимаете с этими вещами, и затем, как человек, который задает запросы, это, это, как бы, полезно знать, когда вы делаете определенные вещи, что это значит? Так что, если вы говорите модели сделать что-то, а затем вы говорите: "Ни за что, сделай что-нибудь другое". Верно? Возвращаясь к этим первым принципам, верно? Каждое из этих сообщений просто добавляется в конец как текст, верно? Так что возможно, что модель достаточно умна, чтобы сказать: "Эй, я понимаю, последнее сообщение, которое пользователь отправил мне, исправляет предыдущую вещь". Мы также можем понять, как теперь в этой истории текста модель в одном и том же API-запросе имеет две разные инструкции, верно? Это, как правило, хорошо, что агент строит на основе последнего действия, которое он сделал, верно? Я хотел построить на основе, я хотел внести изменения на основе собранного нами контекста, верно? >> Точно, да. Это также может привести к плохому поведению, верно? Эм, так что вот почему важно его остановить, вернуться и понять, почему вы думаете, что он идет по этому пути, потому что предыдущий токен, который получает модель, информирует следующий токен, верно? Эм, так что да, там есть целый ряд действительно интересных вещей с точки зрения того, как этот агентный цикл оптимизирован и все решения, которые мы принимаем. Я думаю, что в команде VS Code у нас есть, знаете ли, 15-20 человек, вероятно, которые работают исключительно над этой проблемой, верно? Эм, создание лучшей системы, которую мы можем, чтобы вы получали действительно, действительно хорошие результаты качества кода от этой вещи. С Opus 4 6, Джеймс, я думаю, мы получаем 90% кода Opus 4 6 в нашей системе, которая зафиксирована. Это, это довольно удивительно. GPT-4 1, когда я впервые начал работать в этой команде, мы были 52-53%. Так что это улучшение, которое мы видим за 1 год. Эм, так что существует огромное количество работы, которая идет не только на партнерство с нашими друзьями-моделями, но и на оптимизацию этих запросов, а также инструментов, чтобы мы предоставляли вам лучшие результаты. Да, я думаю, что этот цикл, и это то, что увлекательно, и почему это так важно, потому что то, что люди, возможно, не знают, это то, что эта работа в системе действительно специально адаптирована не только к инструментам, но и к модели, и это развивается со временем, верно? Эти, эти оценки, эти запросы, о которых мы говорили раньше в подкасте, но в целом, когда вы думаете об этом, например, сегодня день запуска, Opus 4 7 вышел, когда мы записываем этот подкаст. Да. >> чтобы сказать, что сегодня, как бы, худший день для использования этой модели, потому что это совершенно новая модель. Например, все будут пытаться ее использовать, потому что она так загружена, а затем >> Да. системный запрос, он свежий. Это, это, это новорожденный. Это, это младенческое состояние, верно? И еще не было времени, чтобы поработать и отточить его, но вы действительно видите в течение нескольких недель, даже в течение первой недели, знаете ли, системный запрос, как вещи работают, да, как он работает с инструментами, как вещи работают с разными моделями, даже инкрементально от, например, 4 5 до 4 6 до 4 7, верно? Знаете, в, в, в, в 5 3 до 5 3 Codex, все думают немного по-другому. Но затем он быстро развивается со временем. Да, определенно. Эм, конечно, мы стараемся изо всех сил до запуска. Мы, мы обычно получаем доступ к модели за несколько недель, если не эм, за несколько месяцев до этого. Эм, а затем мы работаем с людьми из Anthropic, Gemini, OpenAI, xAI и т. д., чтобы действительно настроить эти запросы на основе того, что мы видим, по сути, в нашей системе. Так что мы запускаем тонну, у нас есть свой эквивалент VS SWE-bench, называемый VS SWE-bench. Он построен на пользовательских проблемах. Он не имеет всех проблем с загрязнением, которые есть у SWE-bench сейчас. Я даже не думаю, что лаборатории на самом деле используют SWE-bench больше из-за всего загрязнения, которое мы видим в обучающих данных для этого бенчмарка. Так что мы создали свой собственный. Эм, а затем, по сути, у нас есть тонна различных случаев, и мы запускаем много, много запусков, не только один, но много, много запусков, чтобы уменьшить дисперсию, и вы замечаете закономерности. Вы смотрите на то, что мы называем траекторией агента. Эм, так что это, по сути, путь, по которому агент идет, чтобы решить вашу проблему. Верно? Так что это даже не просто, решили ли мы вашу проблему, да или нет. Это очень упрощенный способ взглянуть на что-то вроде скорости разрешения в бенчмарке. Нет, мы на самом деле идем и говорим, например: "Какой путь выбрала модель, и был ли это оптимальный путь? Как мы можем повлиять на путь, который выбирает модель? Как мы можем привести вас к этой действительно хорошей скорости разрешения за меньшее количество шагов, верно? Эм, так что вы получаете действительно высококачественные результаты, но вместо того, чтобы ждать 1 час, верно? Вы ждете, знаете ли, 1 минуту, верно? И поэтому это те вещи, которые мы делаем, и каждая проблема приносит что-то свое. Так что мы делаем много оптимизации там. И затем, как вы говорите, эм, мы делаем все возможное, но офлайн-оценки всегда ошибочны, верно? Это очень малая подвыборка данных, как бы мы ни старались улучшить, эм, случаи, которые у нас есть. Эм, так что после запуска, как вы говорите, эм, есть проблемы с мощностью, такие как как с нашей стороны, так и со стороны вышестоящих поставщиков, верно? Эм, и нам приходится выяснять, как выглядит спрос. Он отличается для каждой модели. Трудно предсказать спрос в агентном мире, где люди теперь запускают 10 агентов одновременно, верно? Эм, и все больше и больше людей используют агентов каждый день. Так что прогнозирование спроса очень сложно. Эм, а затем также, как вы сказали, когда он доступен, мы можем делать такие вещи, как запускать A/B-тесты и, по сути, действительно знать в реальном мире, что лучше, верно? Не гипотетически в наших, в наших случаях офлайн-оценки, а действительно знать, что лучше. Эм, и, конечно, поставщики моделей также вносят свои собственные обновления в модели, и поэтому они видят вещи и улучшают такое. Эм, так что да, как бы, это все часть непрерывного цикла, который происходит. Так что есть, как бы, непрерывная работа над моделями, которые мы уже выпустили, чтобы оптимизировать их. Есть новые модели в очереди, над которыми мы работаем над оптимизацией. Есть общие, как бы, оптимизации запросов и инструментов, которые постоянно происходят. И затем для многих из этих вещей есть также пользовательские, знаете ли, специально созданные модели, которые фактически создаются нашей командой по работе с данными, чтобы идти и фактически решать действительно сложные проблемы там. Да, это безумие. Есть, есть много мелких вещей, которые происходят, о которых, я думаю, люди на самом деле даже не подозревают. Например, когда вы начинаете чат, он обновляет название чата. Это, это довольно точно, это пользовательский. Верно? Да, мы передаем историю разговора в, эм, дешевую модель, надо признать, потому что нет смысла использовать Opus для этого. Нам нужно получить, нам нужно получить заголовок очень быстро, и это нормально, если это не совсем идеальный заголовок. Эм, >> Но да, это вызов LLM, верно? Так что есть, есть много других вещей, которые всегда происходят в продукте, которые, возможно, вы, как бы, не цените. Да. Есть, как бы, случайное условие, например, эм, которое сгенерировало заголовок таким образом на основе этой эвристики. Это на самом деле обращается к модели, верно? Так что, да. Это, и некоторые вещи, которые становятся, как бы, второй натурой для меня, например, о, я просто, знаете ли, нажимаю кнопку, чтобы, например, сгенерировать сообщение коммита, сгенерировать PR, нажимаю маленькую кнопку. И все это вещи, которые происходят, и они также являются вещами, которые настраиваются. Они, они, они имеют свой собственный маленький крошечный агентный цикл вещей, которые происходят также, верно? Да. И это, и это просто прозрачно для вас, эти AI-редактирования, и на самом деле есть, как бы, редактирование кода и изменение кода вручную, верно? Есть тонны вещей, которые происходят в следующих правках и предложениях. Я думаю, самый большой вопрос, который мы получаем, часть этого агентного цикла, который является более продвинутым сценарием, который мы видели снова и снова, поэтому я действительно хотел поговорить об агентном цикле, это часть того, когда агент выясняет, должен ли он что-то делать или должен ли он делегировать работу. И когда я говорю делегировать работу, я имею в виду под-агентам. Да. >> Теперь мы получили этот вопрос недавно в Твиттере. Я забыл, от кого именно. У нас был большой разговор. И я просматривал документы от OpenAI, нашу документацию, документы кода Claude, все разные документы, верно? И понимал, вот как работают эти модели, как работают эти системы. Когда я говорю система, как бы, опишите систему. Это, как бы, грубое определение, но это все вещи, которые объединяются, чтобы, по сути, сделать этот агентный цикл. Так что, как бы, запросы, которые у нас есть, контекст, который он может собрать, эм, инструменты, которые мы ему предоставляем, как бы, пользовательские модели за кулисами. Это вся, эм, магия, которая на самом деле дает хорошие результаты. Да. Так что CLI имеет систему, VS Code имеет систему, VS имеет систему, другие кодовые агенты имеют системы, системы в целом. И поэтому вы получаете разное поведение между разными вещами, потому что есть разные системы, разные запросы. Так что вопрос, который мы получили, был: "Эй, я выбрал, эм, я думаю, Opus 4 6 или, может быть, 5 или, или OpenAI, знаете ли, GPT-5 4 или Codex, и я вижу много работы, я вижу этот цикл, а затем я вижу много под-агентов, исследующих, захватывающих код, делающих вещи, Да, но он использует другую модель. Он использует Haiku или, например, мини-модель. И вопрос, который я получил, был: "Как это на самом деле работает? Почему он использует разные модели? И является ли команда VS Code обманывает меня?" Вот как это читалось. На самом деле это не так, как было написано, но это была моя интерпретация. Например, "Эй, вы меня обманываете здесь, потому что вы меня обманываете? Я думал, я 3x здесь, а теперь вы 0.33 здесь. Что происходит? И в чем преимущество?" Я думаю, в конечном итоге, да, мы можем говорить о решении, но на самом деле говорить о проблеме, почему это более важно, чем то, как это на самом деле работает. Да, это правильно. Эм, во-первых, эм, все наши стимулы в командах VS Code и GitHub Copilot — это создание наилучшего возможного опыта для вас, верно? Так что, так что это наша главная цель, и мы будем, мы не будем вас обманывать, потому что это не то, для чего мы как команда мотивированы, верно? Я не хочу этого делать, верно? Это всегда было частью нашей культуры в GitHub или VS Code. Эм, да, так что, возвращаясь к базовым примитивам, верно? Давайте просто поговорим о под-агентах, а затем перейдем к конкретному случаю этого под-агента, верно? Эм, так что, например, эм, возвращаясь к базовому механизму для агентного цикла. Так что под-агент — это, по сути, как этот главный агент может решить: "Я хочу, эм, по сути, выполнить этот рабочий процесс, снова запустить этот агентный цикл со свежим контекстом. Я хочу сказать ему, что делать в качестве цели". Так что главный агент, по сути, запрашивает другого агента, чтобы он сделал что-то со свежим контекстом. Агент запустит свой собственный цикл, как и главный. Эм, а затем он, как функция, имеет результат и вернет его обратно в основной поток, верно? Эм, так что это, по сути, то, что такое под-агент. Так как это работает? Как он решает, когда вызывать под-агент? Ну, давайте вернемся к базовым механизмам. Под-агент — это просто инструмент, который модель может выбрать для использования. Так что модель может выборочно сказать: "Я хочу использовать инструмент запуска под-агента", верно? Она может выбрать, чтобы выбрать это в волшебном агентном цикле, верно? И это будет возвращено обратно в VS Code в данном случае. И тогда VS Code запустит под-агент, верно? На основе входных параметров, которые были заполнены моделью, верно? Так что это просто, по сути, вызов инструмента, верно? Что интересно. Вот почему так интересно понимать базовые механизмы. Так как же на самом деле заставить его вызвать под-агент? Так что это, это, как бы, базовое промптинг, верно? Например, вы можете быть очень явными в своем пользовательском запросе, что вы хотите, чтобы под-агенты использовались для определенных вещей. У нас могут быть вещи в наших запросах, которые довольно явны об использовании под-агентов. Это также возможность, верно? Так что, как бы, системный запрос может быть очень агрессивным в отношении того, что мы хотим использовать под-агентов для этих видов вещей. И некоторые функции делают это, верно? Например, если вы когда-либо использовали внутри Copilot CLI или исследования или подобные вещи. Опять же, тот же базовый механизм. Он просто агрессивно запрашивается, чтобы действительно полагаться на стратегию под-агента, верно? Что действительно позволяет вам поддерживать основной агентный цикл супер свежим, потому что помните, мы просто добавляем результат всех разговоров в основной цикл. Ну, если вы делаете все это в основном процессе, верно? Ваш основной процесс становится очень запутанным. Агент запутается. Вам придется сжать разговор, чего вы обычно хотите попытаться избежать, потому что вы потеряете некоторую точность. Так что под-агенты — это действительно стратегия. Так что, хорошо, теперь возвращаясь к первоначальному вопросу. Исследуйте под-агент. Так что я упомянул, что мы проводим много, как бы, исследований этих траекторий, верно? Какой путь выбирает агент? Вы много это инспектируете и думаете, как мы можем сделать это лучше? И лучше имеет разные характеристики, верно? Это может быть более высокое качество вывода, верно? Мы можем увеличить все, знаете ли, мыслительные усилия во всех моделях до максимума. Мы можем заставить его запускать 100 под-агентов, самостоятельно проверять всю свою работу, верно? Существует компромисс, который вы принимаете как продуктовая команда, потому что это было бы, как бы, ужасным клиентским опытом для синхронного партнерства, верно? И поэтому идея заключается в том, как мы можем достичь максимально возможной скорости разрешения, сохраняя при этом, чтобы опыт казался несколько интерактивным, верно? Вы знаете, что происходит с этим агентом. Например, вы захотите предоставить обратную связь в нужные моменты, верно? Вы не хотите, чтобы он был чрезмерно болтливым. Вы также не хотите, чтобы он был слишком кратким, потому что вы понятия не имеете, что происходит. И поэтому существует целый ряд ручек, которые на самом деле являются продуктовыми решениями, которые вы принимаете в запросах и инструментах, верно? Чтобы сделать это. Так что для Так что вы упомянули, что в начале каждого хода, да, мы ищем вещи. Вам нужен контекст. Так что, думая больше об этой проблеме, что на самом деле происходит там, верно? Ну, как вы говорите, это в основном выбор между выполнением, выполнением в терминале и grep, верно? Или использование одного из наших инструментов поиска и сбор контекста таким образом. Или это обращение к нашему конечной точке семантического поиска и выполнение получения кода агента, верно? Но это очень упрощенная вещь, верно? Это просто, хорошо, мне нужно запустить grep. Мне нужно собрать контекст. И что-то вроде Opus — это очень мощная модель рассуждений. Она очень мощная, но она также довольно медленная, верно? И поэтому, по сути, мы обнаружили, что, ну, учитывая, на самом деле, когда вы думаете о ходе агента, качество результатов, да, оно зависит от контекста в разумных пределах, но оно гораздо больше определяется тем, что происходит после этого. Например, как модель работает с собранным контекстом. Так что в случае с агентом исследования мы решили использовать Haiku, потому что характеристики производительности были намного лучше с точки зрения времени до первого токена и того, насколько быстро он смог выполнить такие вещи, как поиск grep, верно? И поэтому он может работать очень, очень быстро. И, по сути, мы обнаружили, что это на самом деле не ухудшило качество, когда мы использовали эту модель получения общего разрешения, возвращаясь к тем офлайн-письмам. Так что вы можете, по сути, ускорить ход агента, создав под-агент, сохранив весь грязный контекст сбора вещей в этом под-агенте, верно? Делая это с Haiku, который чрезвычайно быстр. Он просто выполняет тонну grep. Возвращает это, а затем Opus на самом деле может использовать свой большой мозг и как бы рассуждать над всем собранным нами контекстом. Так что, по сути, это одна из тех, как бы, волшебных вещей, где мы, по сути, смогли ускорить весь ход, не жертвуя качеством вообще. Это, это на самом деле, как бы, золотая жила, верно? И поэтому мы действительно глубоко смотрим на все эти траектории в поисках таких возможностей для оптимизации. Так что это на самом деле то, что там происходит. Это как, да, мы могли бы использовать Opus, но, как бы, это, возможно, сделало бы ваш ход на 30% медленнее, на 40% медленнее. И мы можем дать вам такое же разрешение с моделью, которая намного быстрее, и дать вам более быстрые ходы. Так что это те виды вещей, которые мы исследуем за кулисами. Я определенно думаю, что мы можем лучше объяснить нашу логику для таких вещей. Это совершенно справедливая обратная связь. Нам нужно убедиться, что в UX довольно ясно, когда эти вещи происходят. Это совершенно справедливая обратная связь. Но это, как бы, как мы туда добрались и, как бы, оправдание для, как бы, таких вещей, как эти специальные под-агенты, которые мы начали встраивать в наш агентный цикл. Это имеет большой смысл, потому что даже я, когда пишу запросы для выполнения конкретных задач на работе, я специально в заголовке своего запроса указываю, например, модель Haiku или GPT mini, потому что они очень быстрые, и я не делаю в них ничего слишком сложного, верно? Мне не нужны эти большие рассуждения. Я думаю об этом как, знаете ли, мне нужно съесть хлопья, верно? И у меня есть миска, у меня есть хлопья, у меня есть молоко. Все хорошо. Я в хорошем месте. Весь, весь, весь цикл готов. Например, система готова. Она, она, она получила мою миску, но мне нужна посуда, чтобы съесть эти хлопья. Это ужасная аналогия, но я скажу вам, вы можете сказать мне, работает ли она. >> [смех] >> Так что я могу пойти одним из двух путей, чтобы прийти к тому же выводу. Я могу взять швейцарский армейский нож, который может делать тысячу вещей и имеет все возможности и все действительно продвинутые вещи. И там есть ложка, которую я могу открыть. Мне придется углубиться в нее. Теперь, когда я использую этот инструмент, он также может мне мешать, потому что у него есть другие вещи, которые возникают и тыкают меня. Или я могу просто взять ложку. Которая даст мне тот же самый результат, что и швейцарский армейский нож, который имеет ложку, но делает одно дело, и делает это одно дело очень хорошо. И, как и под-агент с этой конкретной моделью, может делать это одно дело очень, очень хорошо. Очевидно, что эта модель делает много вещей очень хорошо, но в данном случае она очень сфокусирована на этом, верно? Ну, и, как бы, я думаю, в данном конкретном случае это, как бы, продуктовый выбор, который мы делаем для нашего режима планирования, мы думаем, что он дает вам действительно хорошие результаты. Но если вы решите, что, эй, на самом деле я не хочу, чтобы это происходило в режиме планирования, по какой-либо причине, я думаю, что я должен, мы должны выбрать другую стратегию. Действительно крутая вещь в VS Code — это то, что вы можете взять наши встроенные, знаете ли, режимы, такие как режим планирования. Вы можете буквально зайти и скопировать точный, знаете ли, это просто пользовательский агент, верно? Вы можете зайти, скопировать точный запрос и инструменты, которые он использует, и просто изменить его в соответствии с тем, как вы и ваша команда работаете. Так что, если вы скажете: "Мне это не нравится". Это действительно крутая вещь в VS Code. Вы можете пойти и изменить и, по сути, создать свой собственный режим планирования. Теперь у меня есть полная уверенность, что наш режим планирования даст вам действительно, действительно хорошие результаты, потому что у нас есть целая группа людей, которые работают над его оптимизацией, верно? И убеждаются, что он дает хорошие результаты. Но в то же время я также верю, что, я имею в виду, мы видим это в скорости разрешения. Например, Opus, безусловно, является самой сильной моделью с точки зрения, знаете ли, если бы вы взяли среднее значение всех ваших скоростей разрешения, она будет лучшей. Но мы видим тонны проблем в нашей, в нашей системе, где Opus не лучший. Где GPT-4 лучший. Где Opus может быть одной из худших моделей на самом деле. И поэтому существует крайнее количество вариаций. И поэтому я также в то же время ценю, что у вас могут быть некоторые специализированные вещи, которые вы хотите в своем режиме планирования. И для вашей конкретной, как бы, команды и компании и проекта, это могут быть правильные вещи. Но в целом, я думаю, что выбор, который мы делаем для таких вещей, как наш режим планирования и агентный цикл, оптимизирует общий опыт, как бы, средний опыт P50. Вполне возможно, что вам придется пойти и настроить его самостоятельно. И это крутая вещь, вы можете это сделать, верно? Так что да, мне нравится, что у нас есть, как бы, мнение, и мы стараемся дать вам лучшие результаты, но вы всегда можете сделать свое собственное, если вы чувствуете, что вам это нужно. Да, это как бы, я возвращаюсь к своей аналогии с ложками. Существует общий дизайн ложки, но вы можете захотеть другую, знаете ли, ширину или, как бы, другой стиль, другой цвет ложки для потребления этих хлопьев. И, как бы, это доступно для вас, вы можете это сделать, верно? Вы можете пойти, вы можете пойти и выбрать из полки другую ложку, которую кто-то построил, или вы можете, вы можете построить свою собственную ложку. Вы можете собрать ее. Вы можете пойти в свою сварочную мастерскую. Это как, я иду, я иду, где это, как бы, ложки. Вот что я говорю. Сколько ложек у тебя есть? И тебе нужна только одна хорошая ложка. И у нас есть много, много ложек, и у них у всех разные возможности. Я думаю, это очень важно. Так что теперь в целом, эм, когда эти, то, что вы сказали для этих под-агентов, где это, по сути, как бы, древовидные структуры работы, изолированные ветви кода, по сути, верно? Это изолированная вещь. И вы можете думать о под-агенте как об изолированном контекстном окне, верно? Это та же аналогия? Да, я имею в виду, это, это представьте, если бы вы просто создали новый чат и запустили, я хочу, чтобы вы собрали контекст в этом новом чате. А затем вы бы спросили в этом чате: "Пожалуйста, обобщи контекст, который вы только что собрали, для моей цели. Пожалуйста, выберите только наиболее релевантные детали". Затем представьте, что вы скопировали и вставили все это из другого чата, который вы создали, обратно в основной чат. Это, по сути, то, что происходит на, как бы, высоком уровне с паттерном под-агента, верно? Это просто, по сути, создание нового чата, выполнение этой вещи с запросом на основе того, где находится агент в своем основном цикле, а затем возврат некоторого результата на основе моей цели. Да. Это имеет смысл. Да, точно. Да. Мне нравится. Я думаю, это самый большой вопрос, который, который люди получают. Теперь в VS Code вы можете переопределить это, эту функциональность, верно? Все очень настраиваемо, верно? Это верно. Да. Если есть что-то, если вы хотите отключить инструмент запуска под-агента, вы можете буквально сделать это, верно? Так что все эти, знаете ли, это, это много, чтобы идти в ногу. Я полностью согласен, но если вы можете понять основы агентного цикла, тогда вы действительно можете начать рассуждать гораздо больше о, например, "Хорошо, ну, мне не нравится под-агент или почему под-агент работает?" Или, как бы, эти виды вещей. Вы можете отключить его, вы можете включить его. Вы можете агрессивно запрашивать его, чтобы сделать это. И ни одна из этих стратегий не является, как бы, безошибочной, верно? Есть, есть разные компромиссы, которые вы принимаете, верно? Эм, и поэтому, как бы, вы можете решить, что вы хотите сделать другой набор компромиссов, верно? Так что, как бы, большая проблема — это, "Должен ли я поместить много вещей в свой файл правил?" Например, я работал с клиентом, и у них было, как бы, много пользовательских вещей, которые были в, как бы, их экземпляре Confluence, верно? И они говорят: "Представляем ли мы это как, как правило, или используем ли мы инструмент?" Ну, есть компромисс, верно? Например, вы можете поместить его в каждый отдельный запрос, но тогда он будет в каждом отдельном запросе, и, конечно, вы несете ответственность за то, чтобы эта информация была актуальной в запросе, верно? Эм, так что это, это свой собственный набор проблем, верно? Может быть, может быть выгодно. Или вы можете добавить инструмент Confluence, верно? Он может искать. Но теперь агент должен решить, когда вызывать ваши инструменты, так что вам понадобится сильный промптинг о том, когда ему нужно обратиться к вашему инструменту. Описание этого инструмента должно быть хорошим, верно? Эм, а также вы добавляете больше задержки ко всему вашему агентному циклу, верно? Потому что вам приходится запускать больше инструментов как часть этого. Так что общее время хода будет увеличиваться. Но если это приведет к более быстрому результату в конце, потому что вы платите налог за получение правильного контекста, и агенту не придется итерировать столько позже в цикле, возможно, это цена, которую стоит заплатить, верно? И поэтому это те виды инженерных решений, когда вы понимаете основы агентного цикла, вы можете начать рассуждать о, "Ну, как бы, знаете ли, мы могли бы поместить это в запрос, или мы должны использовать инструмент, или, возможно, вы найдете какую-то гибридную стратегию, которая действительно работает для вас со временем". Но, как бы, понимание этих основ помогает вам лучше рассуждать о компромиссах, которые вы делаете. Нет, это имеет большой смысл. Да, я думаю, это хорошо, что мы как бы, обсуждаем, как все работает и почему оно работает таким образом. И, конечно, это может развиваться со временем, но, по крайней мере, в день апреля 2026 года, это, как бы, то, как все развивается в целом. Так что это очень здорово. Я думаю, что, говоря о цикле, углубляясь сюда, происходит гораздо больше. Мы могли бы продолжать часами, но мы не будем. Так что мы хотим сделать, это как бы, >> шесть часов раньше на этой неделе. Так что мы закончим подкаст здесь, но мы хотим, чтобы вы, как бы, дали нам знать. Свяжитесь со мной и Пирсом в Твиттере или напишите нам в шоу или просто оставьте отзыв в любом из сабреддитов VS Code или подобных вещах, и дайте нам знать, если у вас есть больше вопросов по этому агентному циклу, мы углубимся в него. Я приглашу людей из команды, которые работают над этими оценками, и также буду продолжать. Так что, эм, Пирс, спасибо, что пришел и поговорил о глубине эм, агентного цикла. Я знаю, что мы только поверхностно коснулись. Да, определенно. И знаете, еще одна крутая вещь в VS Code — это то, что если вы всегда хотите проверить это сами, есть команды, знаете ли, developer show chat debug log, developer show agent debug log. Запутанно, есть два разных, но, эм, вы можете увидеть, как бы, блок-схему того, как ваш агент идет, все различные вызовы инструментов. Эм, так что вы можете посмотреть эту траекторию, как я ее назвал, сами и углубиться и увидеть, что именно происходит. Полностью. Да. Мне нравится. Хорошо, Пирс, спасибо, что пришел. Мы углубимся в будущем в большее количество этих вещей, но не забывайте, что вы должны подписаться на своем любимом подкаст-приложении, рассказать своим друзьям, рассказать своим коллегам. И, конечно, вы можете проверить YouTube @code, у которого более миллиона подписчиков, а также. И мы также размещаем нас там, так что вы можете видеть наши лица. И вот новый офис. Хорошо, на этом все для этого подкаста VS Code Insiders. До следующего раза, счастливого кодирования.