Разработка AI расширения VSCode: что ломается без него
Штатный ассистент в редакторе видит открытый файл и позицию курсора — и больше ничего. Он не знает, что часть логики живёт в другом модуле, какие соглашения приняты в команде и какие решения уже отменены как неудачные.
Отсюда ложные подсказки модели: она уверенно предлагает несуществующие методы и поля, тянет чужой стиль логирования, воспроизводит устаревший контракт вызова. Код формально похож на рабочий, но нарушает архитектурные договорённости, и его проще переписать вручную, чем отлаживать.
Узкое место при работе с кодом смещается: генерация ускорилась, а проверка каждой подсказки — нет. Инженеры начинают перепроверять всё, что подставил ассистент, и он превращается в дорогую поисковую строку, которой никто не доверяет.
Разработка AI расширения VSCode под конкретный проект снимает это на уровне доступа к данным: рабочая область индексируется целиком, и контекст проекта в подсказках — это ваши модули, внутренние сервисы и правила ревью, а не усреднённый пример из открытых источников.
Дальше разбираем, как это закрывается: от индексации и разграничения доступа к закрытым частям проекта до метрик, по которым видно, что доля принятых подсказок растёт, а переписывания после них — падают.
Что меняется в работе команды после внедрения ассистента
Ассистент не меняет архитектуру проекта — меняется такт работы команды. Эффект от внедрения видно по четырём метрикам, которые мы снимаем до старта и через месяц после: время до первой осмысленной правки в незнакомом модуле, доля отклонённых подсказок, число повторных исправлений одного и того же места и скорость прохождения проверки кода. Ниже — за счёт чего сдвигается каждая.
Первое — время правки незнакомого кода. Без ассистента этот отрезок уходит на восстановление связей: где вызывается функция, откуда приходят данные, какой тест ловит регресс. Расширение в VS Code с доступом к индексу репозитория отдаёт это одним запросом вместе с точками вызова, и правка начинается сразу, а не после разбора половины проекта.
Второе — доля отклонённых подсказок. Это честный индикатор качества контекста: если модель предлагает решения вне принятых в проекте соглашений, отклоняется больше половины ответов. Мы снижаем долю не формулировками в чате, а фактическим материалом — файлами правил проекта, схемами типов и эталонными модулями, которые подтягиваются в каждый запрос.
Третье — повторные исправления в проверке кода. Их становится меньше, когда подсказка учитывает не открытый файл, а последствия изменения: вызовы из соседних модулей, миграции, проверки на входе. Правка, сделанная один раз и в правильном слое, не возвращается на второй круг.
Четвёртое — скорость проверки кода. При меньшем числе отклонённых подсказок и повторных правок изменения приходят компактнее и по границам ответственности, поэтому проверяющий тратит время на логику, а не на переписывание, и проход закрывается с первого раза.
Режимы работы ассистента: локально, свой сервер, внешний сервис
Режим подключения модели — это решение про данные, а не про удобство. Он определяет, уходит ли фрагмент исходного кода за периметр, кто отвечает за доступность в пиковые часы и что произойдёт при обрыве сети. Поэтому в расширении мы сразу закладываем переключаемый слой доступа к модели: смена режима — правка конфигурации, а не переписывание логики.
| Вариант | Когда подходит | Ограничения |
|---|---|---|
| Локальная модель в редакторе | Код не должен покидать машину разработчика; нужна работа без сети; автодополнение и поиск по индексу репозитория | Требует ресурсов рабочей станции, на сложных задачах качество ниже, обновление модели делается на каждом месте отдельно |
| Свой сервер моделей в контуре | Единые правила доступа, общий кэш и журнал запросов, команда от пяти инженеров, свои дообученные модели | Нужны выделенные мощности и сопровождение, задержка зависит от сети до сервера, отказ сервера останавливает всех |
| Внешний сервис модели | Максимальное качество на сложных задачах, нет своей инфраструктуры, нужны быстрые эксперименты | Код уходит третьей стороне, требуется проверка лицензий и политики хранения, режим зависит от лимитов поставщика |
Смешанный режим
На практике выигрывает комбинация: рутинное автодополнение и поиск по репозиторию обслуживает локальная модель, а разбор архитектурных вопросов и генерацию тестов уводит на сервер или во внешний сервис. Маршрутизацию задаём правилом по типу запроса и объёму контекста, а журнал обращений остаётся единым — видно, какой режим сработал и сколько времени занял.
Как мы ведём внедрение: этапы инженерной работы
Разработка AI-расширения для VS Code начинается не с кода, а с разбора того, как команда работает сегодня. Мы смотрим, какие действия повторяются десятки раз в день, где время теряется на переключение между редактором и внешними сервисами, и только после этого решаем, что автоматизировать. Так расширение закрывает реальный участок работы, а не становится ещё одной панелью в интерфейсе.
- Аудит процессов разработки — разбираем типовые задачи команды, структуру репозитория, покрытие тестами и операции, на которые уходит рутина.
- Схема интеграции с редактором — фиксируем, какие данные уходят к языковой модели, где хранятся ключи доступа и как расширение ведёт себя при потере сети.
- Прототип на одном сценарии — самое частое действие, объяснение участка кода или генерацию тестов, собираем в рабочую команду редактора и замеряем время до и после.
- Настройка и сборка — конфигурация под ваши соглашения о коде, политики доступа, установка на рабочие машины через внутренний реестр пакетов.
- Проверка на реальных сценариях — прогоняем ассистента на живых задачах и смотрим, какую долю подсказок принимают без правок, а какие приходится переписывать.
- Передача и обучение команды — документация, короткие разборы и канал обратной связи, по которому дорабатываем расширение после запуска.
Каждый этап заканчивается артефактом: отчётом по аудиту, схемой интеграции, собранным расширением и метриками проверки.
Артефакты и политики доступа: что остаётся у команды
После сдачи у команды остаётся не папка с исходниками, а набор артефактов, по которым расширение можно развивать, ревьюить и безопасно эксплуатировать без нас. Мы передаём их в репозиторий заказчика вместе с правами и настройками, а не оставляем в личных аккаунтах разработчиков.
- Конфигурации сборки и выпуска — манифест расширения, разделение сборок для разработки и эксплуатации, параметры телеметрии; сборка воспроизводится одной командой на чистой машине.
- Схема развёртывания — где стоит прокси к модели, как маршрутизируются запросы, в каком хранилище лежат ключи, по какому шагу выполняется откат на предыдущую версию.
- Политики доступа к коду — какие файлы расширение читает, что уходит за периметр, а что остаётся локально, кто выдаёт и отзывает токены.
- Регламент использования ассистента — какие приёмы подсказок допустимы, как проверять предложения модели до коммита, что фиксировать в описании правки.
- Документация на расширение — архитектурная схема, перечень команд и настроек, точки расширения под внутренние правила команды.
- Инструкции для разработчиков — как поднять окружение, прогнать проверки, выпустить новую версию и раздать её пользователям.
- Порядок сопровождения модели — как менять шаблоны запросов, как оценивать качество на собственном наборе задач, как отключать небезопасные ответы.
Кейс: проверка кода в распределённой команде
Что было до внедрения
Распределённая команда вела один репозиторий: правки прилетали почти круглосуточно, а проверяющих было двое. Набор изменений ждал первого отзыва в среднем 26 часов, и треть возвращалась на доработку — почти всегда из-за одних и тех же механических замечаний: именование, логирование, обработка ошибок на границах модулей.
Что изменили
Мы собрали расширение для Visual Studio Code, которое знает правила конкретного проекта: договорённости о стиле, запрещённые конструкции, требования к тестам. Ассистент читает набор изменений, сопоставляет его с этими правилами и оставляет замечания прямо в строках кода — до того, как правку увидит человек.
Что стало по метрикам
Время до первого содержательного отзыва сократилось с 26 часов до 40 минут, полный цикл проверки — с двух суток до шести часов. Доля возвратов на доработку упала с 34% до 11%, а проверяющие переключились на архитектурные вопросы: логику, границы сервисов, влияние на смежные модули.
Правила живут в репозитории рядом с кодом: когда договорённости меняются, ассистент обновляется тем же набором правок, что и сами сервисы. Ложные срабатывания разбираем как обычные дефекты — жалоба на замечание превращается в правку правила, поэтому доля шума не растёт по мере роста проекта.
Что делать, если в компании уже есть свой сервис моделей?
Если в компании уже есть свой сервис моделей, переписывать его не нужно. Расширение в этом сценарии — надстройка над существующим сервисом: мы подключаемся к вашему контуру как к внешнему источнику, указываем адрес, способ аутентификации и формат ответа, а подготовка запросов и контекста живёт внутри расширения. Модель остаётся там, где её развернули, вместе с журналами и политиками доступа.
Перенос правил проекта — это перевод соглашений команды в декларативные настройки. Стиль кода, обязательные проверки перед вставкой, ограничения на работу с закрытыми модулями и уровни доступа описываются в одном месте и читаются расширением при запуске, поэтому правила правятся без пересборки.
Совместимость с текущим стеком определяется тем, что отдаёт ваш сервис. Если интерфейс стандартный, интеграция сводится к конфигурации; если формат собственный, адаптер пишется в границах расширения и не задевает ядро. Тогда обновления сервиса не ломают рабочий инструмент разработчика.
Отдельно закрываем доступы: ключи не попадают в настройки редактора и в файлы репозитория, токены лежат в защищённом хранилище. Права наследуются от учётной записи сотрудника, поэтому видимость кода остаётся в тех же границах, что и раньше.
Разбираем, что у вас уже развёрнуто, и возвращаемся с оценкой — где достаточно надстройки, а где нужен тонкий адаптер.
Вопросы, которые задают перед стартом проекта
Сомнения перед стартом проекта почти всегда одни и те же: где проходят данные, что остаётся у команды и кто отвечает за работу после сдачи. Ниже — короткие ответы по существу; детали разбираем на созвоне, глядя на вашу инфраструктуру.
Куда уходят запросы к модели?
Обращения либо идут в модель внутри вашего контура, либо к внешнему провайдеру — это переключается настройкой, без переписывания логики расширения. В закрытом варианте наружу не уходит ничего. Логи пишутся локально, и объём вы задаёте сами: можно хранить только метаданные о вызове, без содержимого файлов.
Что происходит с внутренним хранилищем кода?
Индексация идёт только по каталогам, которые разрешены политикой доступа. Данные держатся в памяти сессии либо в локальном хранилище — на сторонние серверы они не выгружаются. Доступ выдаётся сервисной учётной записью, и права отзываются одной сменой ключа.
Как обновляются правила проекта?
Правила и подсказки кода описываются конфигурационными файлами внутри репозитория. Их правит ваша команда через обычное ревью, пересборка расширения при этом не нужна — достаточно обновить файл и перезапустить сессию. Так правила остаются прозрачными и попадают в историю изменений.
Что с сопровождением после передачи?
Отдаём исходники, описание настройки и инструкцию по развёртыванию — сборка ставится из вашего внутреннего реестра. Дальше ведём сопровождение: совместимость с актуальной веткой редактора, правка правил, разбор инцидентов. Заранее фиксируем, что входит в поддержку, а что считается отдельной задачей.
Обсудим задачу: с чего начинается работа над ассистентом
Работа над ассистентом внутри редактора начинается не с кода, а с разбора сценариев. Расширение живёт в ежедневном цикле разработчика, поэтому важно понять, какие именно действия оно должно ускорять, какие данные для этого нужны и где проходят границы допустимого. Чем конкретнее входные данные, тем точнее оценка и план работ.
Что нужно от заказчика на входе:
- список задач, которые ассистент закрывает: генерация кода по контексту файла, пояснения к чужому модулю, поиск по внутренней документации, автотесты;
- где работают модели: внешний провайдер, корпоративный шлюз или локальный запуск — от этого зависит архитектура и требования к приватности;
- ограничения по данным: что нельзя передавать наружу, как долго хранить контекст, что попадает в журналы;
- как устроен текущий процесс: языки, репозитории, сборочные проверки, чтобы расширение встроилось в него, а не легло сверху;
- требования к доступам: единый вход, роли, выдача и отзыв ключей;
- состав пилотной группы — на скольких разработчиках проверяем эффект.
На первом шаге мы разбираем эти сценарии и оставляем те, что дают измеримый результат в первой итерации. Дальше собираем карту взаимодействия с моделью: точки вызова, подготовка контекста, кэш, обработка таймаутов, — и фиксируем критерии приёмки: время отклика, доля принятых подсказок, корректность на внутреннем коде. Расширение при этом собирается под Visual Studio Code и не требует переучивать команду.
Опишите задачу и текущий процесс — вернёмся с оценкой, планом этапов и списком рисков.







