Метод исследования
Чтобы понять внутреннюю логику GitHub Copilot, автор решил применить метод реверс-инжиниринга. Вместо изучения миллионов строк кода он выбрал путь пассивного наблюдения за сетевым трафиком. Для этого использовался инструмент mitmproxy, который работает как «человек посередине» (MITM). Он перехватывает запросы от приложения, расшифровывает их и позволяет изучить содержимое до того, как они попадут на сервер.
Поскольку VS Code построен на базе Electron, он использует архитектуру с разделением процессов. Это позволяет изолировать интерфейс от расширений, что важно при анализе сетевых запросов. Для перехвата трафика в настройках VS Code пришлось отключить строгую проверку SSL-сертификатов, чтобы приложение приняло локальный сертификат прокси-сервера.
Подготовительные запросы
Анализ показал, что Copilot начинает активно обмениваться данными еще до того, как пользователь нажмет хотя бы одну клавишу. В процессе запуска происходит несколько этапов подготовки. Сначала система выполняет аутентификацию: получает OAuth-токен и обменивает его на короткоживущий токен для проверки прав пользователя.
Затем Copilot определяет доступные возможности. Он отправляет запросы к специальным эндпоинтам, чтобы узнать, какие языковые модели и функции агентов доступны конкретному пользователю в рамках его тарифного плана. Это позволяет системе заранее знать, какие инструменты ей доступны для выполнения задач.
Анализ намерений пользователя
Одной из ключевых функций является классификация смысла запроса. В режиме автоматического выполнения Copilot перехватывает запрос к эндпоинту /models/session/intent еще до того, как модель выдаст ответ. Система анализирует промпт пользователя, чтобы определить его цель: генерация кода, отладка (debugging), логические рассуждения или использование инструментов.
Результат этой классификации помогает Copilot выбрать наиболее подходящую модель из доступного списка. Таким образом, система не просто отправляет текст, а сначала определяет тип задачи, чтобы назначить наиболее эффективный ИИ-инструмент для её решения.
Контекст и безопасность
Эксперимент также затронул вопрос того, какой объем данных передается вместе с запросом. Было установлено, что функция подсказок (ghost text) инжектирует в промпт содержимое текущего файла, чтобы обеспечить релевантность ответа. Однако при редактировании файлов, не связанных с текущим контекстом, лишних запросов не возникает.
При анализе структуры запроса выяснилось, что в качестве контекста передается не только содержимое файла, но и информация о недавно измененных файлах. Это помогает модели понимать структуру проекта. При этом проверка показала, что простое редактирование файла с секретными данными (например,.env) не вызывает немедленных сетевых запросов, пока не начнется активное взаимодействие с ИИ.
Что это значит
GitHub Copilot использует многоступенчатый процесс подготовки, который включает аутентификацию, проверку доступных моделей и предварительную классификацию намерений пользователя для выбора оптимального ИИ-движка.
