Transcription
Несколько недель назад я заметил, что делаю что-то с агентами, что, как мне казалось, было очень умным, но я думал, что это слишком просто, чтобы требовать навыка. Для тех, кто не знает, я постоянно думаю о навыках. Я постоянно думаю о том, как упаковать свои инстинкты и практики кодирования в многоразовые навыки. И это означало, что мой репозиторий навыков насчитывает почти 100 000 звезд на момент записи. Навык, о котором я начал думать, был навыком передачи. И теория заключалась в том, что этот навык будет брать контекстное окно текущей сессии и сжимать его в файл markdown, который можно будет передать другой сессии. И вот, пару недель назад я это выпустил. Он находится в навыках, в разделе продуктивности, и здесь, в разделе передачи. И это очень, очень простой навык. Он гласит: "Напишите документ о передаче, обобщающий текущий разговор, чтобы новый агент мог продолжить работу. Сохраните его во временном каталоге операционной системы пользователя, а не в текущем рабочем пространстве". Я поместил это в свою папку навыков в качестве эксперимента, чтобы посмотреть, насколько часто я буду его использовать. И оказалось, что я использовал его очень часто. В этом видео я собираюсь провести глубокое погружение в этот навык, рассказать, почему я его разработал, в чем его смысл, как он сравнивается со встроенными инструментами в некоторых из этих сред, таких как compact, а также как вы можете получить от него максимум пользы, чтобы максимально эффективно использовать свои сессии для гриллинга. И если вам нравится то, что я вам показываю, то вам понравится курс, который я подготовил, — "AI-кодирование для настоящих инженеров", двухнедельный курс для тех, кто хочет использовать инструменты AI-кодирования для создания качественного кода, а не ерунды. Он начинается 1 июня. Сейчас у нас скидка. Перейдите по ссылке ниже, чтобы ознакомиться. Давайте начнем с объяснения, почему я создал этот навык и чем он отличается от компактирования, о котором вы, возможно, слышали раньше. Когда мы находимся в такой сессии, как эта, сессии кодирования, мы, по сути, когда мы общаемся с агентом, когда он выполняет вызовы инструментов, когда он вносит изменения в файлы, это контекстное окно будет заполняться все большим и большим количеством информации. Все больше и больше токенов будут заполнять контекстное окно. Теперь в среде, которую я использую, clawed code, контекстное окно огромно, у вас есть контекстное окно на 1 миллион токенов, но на самом деле есть умная зона и глупая зона в этих контекстных окнах. В начале контекстного окна вы получите гораздо лучшую производительность от агента, потому что отношения внимания не так напряжены, потому что есть гораздо меньше токенов для расчета, меньше отношений внимания между этими токенами, тогда внимание агента не так рассеяно. Другими словами, он лучше способен сосредоточиться, когда в нем меньше контента. Это означает, что по мере развития вашего разговора вы будете получать все более и более глупые ответы от агента, вплоть до, знаете ли, 800 000 токенов, в которых я лично никогда не был, потому что примерно к отметке в 120 тысяч токенов я начинаю чувствовать, что нахожусь в глупой зоне. Так что это означает, что даже несмотря на то, что Anthropic рекламирует огромное контекстное окно для этих моделей, на самом деле для, знаете ли, правильных умных задач у вас есть только около 120 тысяч токенов для работы, что означает, что вам нужно очень эффективно планировать бюджет, и вам нужно постоянно осознавать свое контекстное окно. Так возникает вопрос: что делать, когда вы начинаете приближаться к этой глупой зоне? Как восстановить свой разговор? Как продолжить разговор за пределами глупой зоны, оставаясь умным? И ответ на это — compact. Compact берет большой разговор, подобный этому, и обобщает его. Таким образом, вы переходите от близости к глупой зоне ко всей умной зоне. И иногда даже есть буфер автокомпактирования, в зависимости от того, какую среду вы используете и включили ли вы его, что означает, что когда вы приближаетесь к концу контекстного окна, скажем, глубоко в глупой зоне, буфер автокомпактирования активируется и автоматически обобщает ваш разговор в новой сессии. Это резюме обычно выглядит как ссылки на файлы. Просто список файлов, на которые были ссылки. Упомянутые вами вещи в разговоре обычно включены, как и общий тон разговора. Затем это включается как небольшой фрагмент в начале новой сессии. И по мере того, как вы накапливаете контекст в новой сессии, вы постоянно ссылаетесь на старую сессию. Это означает, что по мере того, как вы продолжаете компактировать и компактировать, вы в конечном итоге получите этот осадок из разных слоев предыдущих разговоров. И это может быть немного неэффективно, но это также неплохой способ, если вы хотите проводить определенные типы сессий, где вам просто нужно снова и снова решать одну и ту же проблему. Это может быть очень полезно для отладки, на самом деле, потому что вы можете компактировать все другие варианты, которые вы пробовали, а затем продолжать пробовать разные вещи, натыкаться на барьер, а затем снова компактировать, чтобы просто сохранить свое состояние. Так что это способ проведения длительной сессии, но это действительно только одна сессия. Поэтому я продолжаю находить compact очень полезным инструментом для создания этих длительных одиночных сессий. Но я начал замечать, что я хотел делать с compact другие вещи. Я хотел компактировать в другую сессию. Например, скажем, я был в одной сессии, и во время этой сессии я заметил небольшую возможность для рефакторинга, что-то, что было совершенно за пределами моих возможностей, вне сферы моей текущей сессии, но я знал, что в конечном итоге мне придется туда добраться. Итак, каковы были мои варианты? Я мог бы продлить свою текущую сессию, но тогда у меня получился бы разбавленный контекст, где я наполовину работал над одним, наполовину над другим, и я определенно попал бы в глупую зону, верно? Так что я, вероятно, не смог бы закончить свою первоначальную цель. Я мог бы компактировать, но тогда я бы уничтожил весь прогресс, которого я достиг в своей текущей сессии, верно? Что я действительно хотел сделать, так это просто сказать: "Хорошо, я хочу завершить эту другую вещь в отдельной сессии и сохранить свою текущую сессию чистой". Другими словами, это было то, чего я хотел. Я хотел, по сути, взять контекст или взять только тот фрагмент, который относится к этому дополнительному исправлению ошибки, передать его другой сессии, и тогда эти две сессии могли бы работать независимо. И вот, некоторое время я делал так: "Хорошо, возьми то, что есть в моей текущей сессии. Я хочу исправить эту конкретную ошибку. Напиши мне документ handoff.md, чтобы я мог просто передать его другому агенту". И оказалось, что я делал это так часто, что решил: "Хорошо, мне нужен навык для этого". Чаще всего я использую handoff во время гриллинга. Здесь я нахожусь в сессии гриллинга, которую я провел для планирования будущих функций Sand Castle, который является моей своего рода фабрикой программного обеспечения. И здесь вы можете видеть, что я отвечаю на некоторые вопросы. Я только во втором квартале этой сессии гриллинга. Так что не очень длинная. И я говорю здесь: "Я думаю, в будущем мы можем захотеть перенести итерации и сигнал завершения на отдельный API. Фактически, давайте передадим эту задачу отдельному агенту". Вы можете видеть здесь, что когда я определяю handoff, когда я говорю, я говорю причину, по которой я передаю, и что именно должно быть в этом документе. Это делает две вещи. Во-первых, это фактически обостряет текущую сессию гриллинга. Так, он говорит, что, учитывая это ограничение, второй квартал сворачивается. Так что это на самом деле помогает моей текущей сессии гриллинга, потому что я говорю, что это вне сферы. Мы займемся этим где-нибудь еще. Затем он создает файл markdown прямо здесь с фокусом на следующую сессию. Создайте проблему на GitHub и в конечном итоге разработайте для разделения итераций и сигнала завершения на отдельный API. А затем позже я просто передаю это другому агенту, чтобы создать проблему. Просто. Еще один шаблон, который я очень настоятельно рекомендую, — это передача во время сессии гриллинга для прототипирования. Когда вы гриллите, когда агент задает вам вопросы из grill me или grill with docs, которые являются моими навыками, вы часто найдете две категории вопросов, на которые вам нужно ответить. Есть так называемые известные неизвестные, те, о которых агент может вас спросить, а затем есть вещи, которые вам действительно нужно увидеть в коде или увидеть в виде прототипа. Это может быть очень актуально для прототипов пользовательского интерфейса или сложных фрагментов логики, с которыми вы еще не совсем уверены, как справиться. Так что в этой сессии гриллинга мы дошли до 13-го вопроса, и у нас есть своего рода окончательное решение от агента. А затем мы можем увидеть, как я говорю: "Передать для прототипирования сложные части здесь, межпроцессное взаимодействие, интеграцию TL Draw SDK, которая была чем-то, что я строил в то время". Он создает передачу, а затем я иду и реализую прототип в этой ветке. Так что в сессии прототипирования это оказалось огромной сессией. Так что 169 тысяч токенов, намного больше, чем поместилось бы в гриллинг. И я создал этот прототип пользовательского интерфейса и своего рода взаимодействие, которое я хотел видеть. А затем я сказал: "Хорошо, давайте передадим это обратно в сессию гриллинга, которая породила это. Возьмите все уроки из прототипа, все, что не задокументировано непосредственно в самом прототипе или что неочевидно, дайте мне документ о передаче, который я могу передать обратно планировщику". Это на самом деле очень распространенный шаблон, который я использую здесь, где у вас есть начальная сессия, где вы выполняете некоторую работу, вы передаете ее другой сессии. Эта сессия затем создает другой документ о передаче и передает его обратно в исходную сессию. Это почти похоже на то, как вы сделали своего рода DIY суб-агента, где вы можете использовать контекстное окно для одной конкретной задачи, сжать свои знания из этой задачи и передать их обратно родительскому. Затем я смог завершить сессию гриллинга и создать надлежащие PRD и проблемы с прототипом. Так что это невероятно богатый шаблон для получения того, что вам нужно от AFK агентов и использования прототипов. Это очень, очень круто. Стоит также сказать, что круто то, что при использовании простого markdown-документа, а не полагаясь на родные функции агента, вы можете иметь эту первую сессию в clawed code, но вы можете просто передать ее другому агенту, верно? вы можете передать ее codeex или передать ее, знаете ли, copilot CLI, что бы вы ни использовали. Так что, если вы хотите провести какой-либо вид враждебного обзора или какого-либо вида, знаете ли, взаимодействия между различными кодирующими агентами, это очень, очень простой способ сделать это. Мы также должны прочитать последние части навыка, чтобы вы поняли обоснование всего. Теория здесь заключается в том, чтобы включить предлагаемый раздел навыков в документ, который предлагает навыки, которые агент должен вызвать. Я добавил это, потому что иногда я использую навыки, чтобы определить стиль этой сессии. И поэтому наличие раздела предлагаемых навыков означает, что вы можете просто вставить документ о передаче в новую сессию. Он вызовет необходимые навыки, такие как grill with docs, diagnose или prototype, или что-то еще, и тогда вы готовы к работе. Так что вам не нужно думать о навыках, которые вам нужно использовать в следующей сессии. Это довольно удобно. Еще один момент: не дублируйте контент, уже содержащийся в других артефактах. Я часто находил, что эти документы о передаче становились очень большими, и они просто дублировали то, что уже было представлено либо в других markdown-файлах, либо в ресурсах, таких как проблемы на GitHub или тому подобное. Так что это, по сути, говорит использовать указатели вместо, знаете ли, повторения всего, что есть в документе. Я также искренне считаю, что вы должны сохранять эти файлы передачи во временном каталоге операционной системы пользователя. Другими словами, эти файлы передачи являются одноразовыми. Они не должны храниться долго и гнить в вашей кодовой базе в качестве документации. Еще один момент: удаляйте любую конфиденциальную информацию, ключи API, пароли или PII. Это, знаете ли, очень важно. Вы не хотите, чтобы они болтались в markdown-файлах в случайных местах. И, наконец, если пользователь передал аргументы, другими словами, для чего будет использоваться следующая сессия, относитесь к ним как к описанию того, на чем будет сосредоточена следующая сессия, и соответствующим образом адаптируйте документ. Я думаю, что это важно для передачи, потому что, чтобы написать приличный документ, агент должен знать, на чем будет сосредоточена следующая сессия агента. Каждый раз, когда я использую handoff, я всегда описываю цель, причину, по которой мы передаем, потому что я просто не вижу, как иначе можно написать хороший документ о передаче. И, конечно, диктовка делает это очень легким, потому что я просто выплевываю это, и мы готовы к работе. Итак, вот и все. Это handoff. Это важный навык в моем арсенале, который, знаете ли, как и многие мои другие навыки, не существовал, но несколько недель назад. Если вам нравились мои навыки, то вам стоит ознакомиться с курсом. Это абсолютный хит. В прошлый раз его прошли около 2500 человек, и я ожидаю, что в этот раз тоже будет приличная толпа. Кроме того, большое спасибо за просмотр. Моя книжная полка позади меня заполняется новыми книгами по программированию, которые я собираюсь прочитать в ближайшие несколько недель. Я думаю, может быть, сделать видео о том, что на моей книжной полке, с рекомендуемыми книгами. И я не знаю, если вам это понравится, то, возможно, поставьте лайк и оставьте комментарий или дайте мне знать, что вы хотите увидеть дальше. В любом случае, спасибо за просмотр, и я увижу вас очень скоро.