Выбор соответствующих фрагментов кода для предоставления в качестве контекста для VS Code Github Copilot

Вопрос или проблема

Я использую Github Copilot в VS Code, версия 1.95, выпуск октября.

Мне интересно, как можно вручную выбрать контекст файлов и блоков кода, чтобы задать вопросы в чате Copilot.

В основном, я хочу получить эффект, когда вы копируете блок кода A из файла A, блок кода B из файла B, блок кода C из файла C, затем вставляете их в чат Copilot и продолжаете задавать свои вопросы. Ответ будет очень сосредоточен на тех блоках кода, которые вы предоставили. Однако этот процесс очень утомителен и динамичен. Вы не хотите вставлять эти блоки в чат каждый раз, и даже если мы просто извлекаем блоки кода, в совокупности они могут занять довольно много места в вашем чате.

Если вы используете функцию выбора, она использует только выбранный блок кода в активной вкладке редактора, что не работает, если вы хотите включить другие выбранные блоки кода в других вкладках файлов.

Попытки, которые я пробовал:

  • В обычном чате вы можете перетаскивать файлы в чат Copilot или нажать на иконку скрепки “приAttach контекст”, чтобы выбрать, какие файлы использовать в качестве контекста. Но у этого есть некоторые недостатки:

    • Вы не можете выбрать, какой блок кода использовать в каждом файле. Если файл очень большой, предоставляется много нерелевантной информации.
    • Как только вы отправляете сообщение в чате, ранее выбранные файлы в качестве контекста удаляются, что заставляет вас либо повторно выбирать файлы, либо надеяться, что способность LLM обобщать прошлую историю каким-то образом захватит то, что вы хотите спросить. Было бы здорово, если бы была возможность сохранить выбранные файлы.
  • Есть новая функция в v1.95, которая называется copilot edits, она позволяет вам выбрать файлы, которые я хочу включить в Рабочий набор, который действует как контекст в обычном чате. Однако,

    • Она напрямую изменяет ваш код, тогда как я в основном хочу, чтобы она давала мне предложения по коду, которые я мог бы просмотреть, изменить и добавить соответственно. Здесь вам нужно открыть дифференциал и вручную выбирать, какие части вернуть, а какие оставить.
    • Она все равно выбирает целые файлы вместо блоков кода.
  • Функция @workspace. Она просматривает вашу всю кодовую базу, выполняет некоторый семантический поиск для поиска релевантных файлов на основе вашего вопроса и использует эти файлы и, возможно, релевантные блоки кода в качестве контекста, однако,

    • Я не хочу, чтобы она просматривала всю мою кодовую базу. Я хочу сузить ее область поиска определенным образом, чтобы она могла точно указать релевантный контекст.
    • Вы можете поместить релевантные файлы в отдельную папку, затем открыть эту папку в VS Code, сделав ее папкой подмножеством файлов, чтобы она действовала как выбор релевантных файлов, которые вы хотите. Но по мере редактирования вашего кода вам нужно обновлять как свою реальную кодовую базу, так и эту папку подмножества, что неудобно.

В общем, я хочу вручную выбрать релевантные блоки кода в файлах, чтобы предоставить их в качестве контекста для чата Copilot сразу.

Ответ или решение

Выбор релевантных блоков кода для контекста в Github Copilot в VS Code

Использование Github Copilot в VS Code может значительно облегчить процесс разработки, но иногда возникают вопросы о том, как лучше всего предоставить контекст для получения более точных и полезных ответов на запросы. В этой статье мы обсудим, как можно вручную выбрать релевантные блоки кода и файлы, оптимизируя ваши взаимодействия с Copilot.

Проблема

На текущий момент существует несколько способов предоставить контекст в Copilot, однако каждый из них имеет свои ограничения. Хоть вы и можете прикрепить файлы к чату, зачастую происходят следующие затруднения:

  1. Недостаток точности: Нельзя выбрать конкретные блоки кода, если файл велик.
  2. Очистка контекста: После отправки сообщения ранее выбранные файлы удаляются, что принуждает повторно включать нужные контексты.
  3. Изменение кода: Новый функционал copilot edits позволяет добавлять контекст, но влечет за собой изменения в коде, что может быть неудобно.
  4. Поиск по всему пространству: Функция @workspace выполняет поиск по всей кодовой базе, что иногда приводит к тому, что результаты не соответствуют ожиданиям, так как вводится слишком много ненужных данных.

Решение

Для того чтобы оптимизировать процесс предоставления контекста для Copilot, можно использовать следующий подход:

  1. Создание специального рабочего пространства:

    • Создайте новую директорию, куда скопируете только те файлы, которые содержат нужные блоки кода. Это поможет в том, чтобы ограничить размер контекста.
  2. Использование комментариев:

    • Используйте комментарии в вашем коде для выделения блоков, которые вы хотите сохранить в контексте. Вы можете, например, отметить начало и конец релевантного блока специальными маркерами. Это позволит Copilot быстрее обращать внимание на важные части кода.
  3. Консолидация кода:

    • Если возможно, создайте файл-агрегатор, в котором консолидированы только нужные блоки кода из различных файлов. При подаче этого файла как контекста, вам не придется беспокоиться о больших объемах ненужной информации.
  4. Регулярное обновление:

    • Обновляйте файлы в созданной директории или агрегаторе при изменении вашей основной кодовой базы. Это может быть сделано вручную, или с помощью скрипта, чтобы облегчить процесс.
  5. Использование внешних инструментов:

    • Возможно, стоит исследовать дополнительные расширения для VS Code, которые могут помочь в выборке и представлении контекста кода. Некоторые из них могут поддерживать расширенные функции обработки текста и улучшения взаимодействия с Copilot.

Заключение

Чтобы получить наилучшие результаты от GitHub Copilot в VS Code, важно находить наиболее эффективные способы выбора контекста. Создание специального рабочего пространства, применение комментариев и консолидация кода могут переработать ваш подход к работе с Copilot, улучшая качество ответов и экономя время. Следуя данным рекомендациям, вы сможете значительно повысить точность и релевантность получаемых от Copilot ответов, избегая ненужной информации и сосредоточившись на том, что действительно важно для вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...