Перейти к содержимому

Автодополнение и inline-правки

Автодополнение — режим, в котором модель предлагает продолжение кода в момент ввода, не дожидаясь запроса. Пользователь видит серый «ghost text» и принимает его клавишей Tab либо игнорирует и продолжает печатать.

К этому же уровню относятся inline-правки: выделенный фрагмент переписывается по короткой инструкции («добавь обработку ошибки», «перепиши на async»), а результат показывается как diff прямо в редакторе — без перехода в чат.

Общее у них одно: человек остаётся автором, а система лишь ускоряет набор. Это принципиально отличает уровень от генерации кода, где модель выполняет задачу целиком.

Автодополнение ограничено не качеством модели, а бюджетом задержки. Подсказка, пришедшая через две секунды, бесполезна: курсор уже ушёл дальше. Рабочий диапазон — сотни миллисекунд, и в него нужно уложить поиск контекста, вызов модели и фильтрацию результата.

Из этого следуют три отличия от чата:

  • Маленький контекст. Обычно это префикс и суффикс текущего файла, импорты, сигнатуры соседних функций. Полный репозиторий в такой запрос не помещается.
  • Специальная постановка задачи. Модель обучают и вызывают в режиме fill-in-the-middle (FIM): она видит текст до и после курсора и должна заполнить пропуск, а не продолжить текст в одну сторону.
  • Фильтрация и ранжирование. Предложений может быть несколько; показывается одно, и выбор часто делает не модель, а эвристика по свежести контекста и частоте паттерна.
ВидКогда срабатываетЧто даёт
Однострочное дополнениеНабор аргументов, конец условия, повторяющийся паттернЭкономит секунды на рутине
Многострочное дополнениеНачало функции, тела метода, конфигурацииСобирает каркас, который остаётся проверить
Inline-правка выделенногоЯвный запрос к фрагментуЛокальный рефакторинг без переключения контекста
Next-edit suggestionsПосле правки в одном местеПодсказывает следующие места, которые обычно меняются вместе с этим
Автодополнение в терминале и конфигахКоманды, YAML, SQLСнижает число обращений к документации

Next-edit suggestions — содержательный сдвиг: среда перестаёт предсказывать текст и начинает предсказывать изменение. Это уже шаг в сторону агентного режима, где правки выполняются пакетом.

  • Устаревший API. Модель уверенно предлагает метод, удалённый два мажора назад: в её обучающих данных он был. Спасает только проверка типами и тестами.
  • Правдоподобный, но неверный код. Синтаксис корректен, компилятор доволен, логика — нет. Особенно заметно в граничных условиях, обработке ошибок и работе с деньгами.
  • Копирование шаблона. В проекте с «своим» способом работы с БД или HTTP модель тянет общепринятый, а не проектный. Лечится контекстом и правилами проекта — см. Контекст для агентов.
  • Небезопасные паттерны. Склеивание SQL, доверие пользовательскому вводу, отключение проверки TLS — такие подсказки выглядят как обычный код и проходят ревью на бегу.
  • Юридический след. Длинные фрагменты могут повторять лицензированный код; корпоративные среды фильтруют совпадения по публичному коду, но опираться на это в проекте без такой настройки нельзя.

Автодополнение легко оценить количественно, и это один из немногих компонентов, где метрики действительно работают:

  • Acceptance rate — доля принятых подсказок.
  • Retention — остался ли принятый фрагмент в коде через день и через неделю. Высокий acceptance при низком retention означает, что инструмент создаёт работу: подсказку приняли, потом переписали.
  • Время до мержа — итоговая метрика, которую легко испортить локальными улучшениями.

Ориентир из первого крупного исследования GitHub: в контролируемом эксперименте с задачей на написание HTTP-сервера группа с Copilot закончила примерно на 55% быстрее. Это результат конкретной задачи и конкретной выборки, а не универсальный множитель производительности.

  1. Типы и линтер как первый фильтр. Подсказка, которая не проходит tsc, phpstan или линтер, не должна доходить до ревью.
  2. Короткие функции и явные имена. Чем однозначнее локальный контекст, тем точнее подсказка; длинные функции с десятью переменными дают худший результат.
  3. Тесты рядом с кодом. Автодополнение охотнее предлагает вызовы, которые уже есть в тестах, — и это правильное поведение, если тесты отражают требования.
  4. Отключение для чувствительных файлов. Секреты, платёжные сценарии, миграции и файлы с персональными данными — разумные кандидаты на исключение из индексации.
  5. Проверка diff, а не доверие курсору. Inline-правки принимают так же небрежно, как подсказки, хотя меняют уже написанный код.