Вопрос или проблема
Я использую 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, однако каждый из них имеет свои ограничения. Хоть вы и можете прикрепить файлы к чату, зачастую происходят следующие затруднения:
- Недостаток точности: Нельзя выбрать конкретные блоки кода, если файл велик.
- Очистка контекста: После отправки сообщения ранее выбранные файлы удаляются, что принуждает повторно включать нужные контексты.
- Изменение кода: Новый функционал
copilot edits
позволяет добавлять контекст, но влечет за собой изменения в коде, что может быть неудобно. - Поиск по всему пространству: Функция
@workspace
выполняет поиск по всей кодовой базе, что иногда приводит к тому, что результаты не соответствуют ожиданиям, так как вводится слишком много ненужных данных.
Решение
Для того чтобы оптимизировать процесс предоставления контекста для Copilot, можно использовать следующий подход:
-
Создание специального рабочего пространства:
- Создайте новую директорию, куда скопируете только те файлы, которые содержат нужные блоки кода. Это поможет в том, чтобы ограничить размер контекста.
-
Использование комментариев:
- Используйте комментарии в вашем коде для выделения блоков, которые вы хотите сохранить в контексте. Вы можете, например, отметить начало и конец релевантного блока специальными маркерами. Это позволит Copilot быстрее обращать внимание на важные части кода.
-
Консолидация кода:
- Если возможно, создайте файл-агрегатор, в котором консолидированы только нужные блоки кода из различных файлов. При подаче этого файла как контекста, вам не придется беспокоиться о больших объемах ненужной информации.
-
Регулярное обновление:
- Обновляйте файлы в созданной директории или агрегаторе при изменении вашей основной кодовой базы. Это может быть сделано вручную, или с помощью скрипта, чтобы облегчить процесс.
-
Использование внешних инструментов:
- Возможно, стоит исследовать дополнительные расширения для VS Code, которые могут помочь в выборке и представлении контекста кода. Некоторые из них могут поддерживать расширенные функции обработки текста и улучшения взаимодействия с Copilot.
Заключение
Чтобы получить наилучшие результаты от GitHub Copilot в VS Code, важно находить наиболее эффективные способы выбора контекста. Создание специального рабочего пространства, применение комментариев и консолидация кода могут переработать ваш подход к работе с Copilot, улучшая качество ответов и экономя время. Следуя данным рекомендациям, вы сможете значительно повысить точность и релевантность получаемых от Copilot ответов, избегая ненужной информации и сосредоточившись на том, что действительно важно для вашего проекта.