AI-инжиниринг
Как устроены AI coding assistants: Copilot, Cursor, Claude Code изнутри
Цели урока
- Понять архитектуру Copilot: FIM, context gathering, ghost text pipeline
- Разобрать подход Cursor: codebase indexing, semantic search, Apply Model
- Изучить agentic loop Claude Code: tool use, self-correction, terminal integration
- Освоить компоненты для создания собственного code assistant: LSP + embeddings + LLM
- Оценить эволюцию AI pair programming и изменение роли разработчика
GitHub Copilot принят на работу в 2022 как "autocomplete на стероидах". В 2024 Cursor начал писать целые функции, делать refactoring, объяснять код. Разница в подходе: Copilot дополняет, Cursor агентит. И рынок это заметил - USD 400M ARR за 2 года. 92% разработчиков уже используют AI coding assistants (GitHub Survey). Но большинство - как чёрный ящик. Понимание архитектуры изнутри - разница между "AI иногда помогает" и "AI ускоряет в 5-10 раз".
- GitHub Copilot - 1.8M платных подписчиков, RLHF на обратной связи разработчиков, FIM-модель Codex специально дообучена на GitHub-репозиториях
- Cursor - 400M ARR за 2 года, fork VS Code с глубокой AI-интеграцией, vector index кодовой базы + Apply Model для multi-file edits
- Claude Code - agentic assistant в терминале, agentic loop с self-correction через tsc/npm test, решает задачи уровня Junior-Mid разработчика автономно
- Amazon CodeWhisperer, Tabnine, Codeium - альтернативные code assistants; DeepSeek Coder и StarCoder - open-source FIM-модели
От IntelliSense до агентов
**2001**: Microsoft IntelliSense в Visual Studio - первый умный автокомплит. **2018**: TabNine - первый ML-based completion, маленькая локальная модель. **2021**: GitHub Copilot в beta, Codex (GPT-3 fine-tuned на коде) - переломный момент. **2022**: Copilot GA, 1M пользователей за 2 месяца. **2023**: Cursor - fork VS Code с codebase indexing, multi-file editing; появление Apply Model концепции. **2024**: Claude Code, Devin - agentic loop; агенты начинают решать задачи уровня junior-разработчика автономно. **2025**: 92% разработчиков используют AI assistants, USD 400M ARR у Cursor за 2 года.
Предварительные знания
GitHub Copilot: context gathering, FIM, ghost text
GitHub Copilot появился в 2022 как "autocomplete на стероидах" - и рынок отнёсся скептически. Автодополнение кода было и раньше: IntelliSense, TabNine. Но Copilot сделал ставку на **Fill-in-the-Middle (FIM)** - формат промпта, при котором модель видит код и до, и после курсора, и генерирует то, что должно быть посередине. Это не просто "следующая строка". Это предсказание с пониманием намерения.
Весь pipeline укладывается в 200-500 мс: собрать контекст из открытых вкладок, сформировать FIM-промпт, отправить в модель (Codex, потом GPT-4), отранжировать варианты, показать ghost text. Debounce на 50-100 мс после каждого нажатия клавиши - иначе API-запросы пойдут лавиной. Codex специально дообучался на GitHub-репозиториях с RLHF на обратной связи разработчиков - именно это сделало suggestions релевантными, а не случайными.
- **Debounce** - ожидание 50-100мс после последнего нажатия, чтобы не спамить API
- **Context gathering** - сбор prefix/suffix из текущего файла + snippets из открытых вкладок
- **Prompt building** - формирование FIM-промпта с контекстом (до ~8K токенов)
- **Model call** - запрос к модели с low temperature (0.0-0.2) для детерминированных предложений
- **Ranking** - несколько вариантов ранжируются по вероятности и длине
- **Ghost text** - лучший вариант показывается серым текстом. Tab - принять
**FIM-модели обучены специально** на формате prefix-suffix-middle. Обычная chat-модель не умеет эффективно "заполнять дыру" в коде. Codex, StarCoder, DeepSeek Coder - все поддерживают FIM.
Что такое Fill-in-the-Middle (FIM) в контексте code completion?
Cursor: codebase indexing, multi-file edits, apply model
В 2024 году Cursor начал делать то, что Copilot не мог в принципе: писать целые функции, проводить рефакторинг, объяснять чужой код. Разница в подходе принципиальная - Copilot **дополняет**, Cursor **агентит**. И рынок это заметил: USD 400M ARR за 2 года, fork VS Code, который используется в Google, Stripe, Shopify.
Ключевая инновация - **codebase indexing**: при открытии проекта Cursor разбивает все файлы на chunks (~50-100 строк), делает embedding каждого через text-embedding-3-small (1536 dim), хранит локально. Когда разработчик пишет "добавь валидацию email в UserService" - Cursor делает semantic search по этому индексу и находит нужные файлы из тысяч, даже если они не открыты. Это RAG поверх кодовой базы, только реализованный прямо в IDE.
**Apply Model** - отдельная инновация Cursor. Основная LLM (Claude или GPT-4) генерирует описание изменений в формате diff, а маленькая fine-tuned модель применяет эти изменения к реальному файлу. Это решает точную проблему: большие модели плохо работают с line numbers и не хотят генерировать весь файл целиком - но отлично описывают *что* и *где* изменить.
| Аспект | Copilot | Cursor |
|---|---|---|
| Контекст | Открытые вкладки (~8K токенов) | Весь проект через embeddings (~100K+ токенов) |
| Основная задача | Inline completion (следующая строка) | Multi-file editing (рефакторинг) |
| Модель | Codex/GPT-4 (FIM) | Claude/GPT-4 + Apply Model |
| Индексация | Нет (runtime context) | Vector index всей кодовой базы |
| UX | Ghost text (Tab) | Chat + inline diff + multi-file apply |
Зачем Cursor индексирует кодовую базу в embeddings?
Claude Code: agentic loop, tool use, terminal integration
Claude Code - принципиально другой подход. Не IDE-плагин, а **автономный agent в терминале**. Получает задачу, сам исследует проект (Read, Grep, Glob), сам редактирует файлы (Edit, Write), сам запускает команды (Bash). Agentic loop: думает → действует → наблюдает результат → думает снова. Это не помощник - это junior-разработчик, который не устаёт.
Cursor нужен векторный индекс, потому что работает в IDE с фиксированным контекстом. Claude Code не нуждается в предварительном индексировании: агент исследует проект динамически - Glob → Read → Grep → понимание структуры. Как опытный разработчик, открывший незнакомый репозиторий. Ключевое - **self-correction**: после каждого изменения агент запускает `tsc --noEmit` или `npm test`, видит ошибки и исправляет их в следующей итерации. Без этого loop coding assistants были бы бесполезны.
| Tool Claude Code | Назначение | Аналог в работе разработчика |
|---|---|---|
| Read | Чтение файла | Открыть файл в IDE |
| Edit | Точечная замена строк в файле | Ctrl+H - найти и заменить |
| Write | Создание нового файла | Ctrl+N - новый файл |
| Glob | Поиск файлов по паттерну | Ctrl+P - find file |
| Grep | Поиск текста в файлах | Ctrl+Shift+F - search in project |
| Bash | Выполнение команд в терминале | Terminal - npm test, git commit |
**Agentic подход масштабируется на сложные задачи.** Copilot дописывает строку. Cursor редактирует файл. Claude Code может выполнить задачу из 20 шагов: прочитать 10 файлов, создать 3 новых, отредактировать 5 существующих, запустить тесты и исправить ошибки - всё за один промпт.
В чём принципиальное отличие agentic подхода Claude Code от completion-подхода Copilot?
Архитектура собственного code assistant: LSP + embeddings + LLM
Понимание архитектуры Copilot, Cursor и Claude Code позволяет строить собственные code assistants для специфических задач: автокомплит для внутреннего фреймворка, code reviewer, генератор тестов. Основные компоненты: **LSP** для понимания кода, **embeddings** для retrieval, **LLM** для генерации.
LSP (Language Server Protocol) - это не просто "подсветка синтаксиса". Это полная семантика кода в реальном времени: типы, интерфейсы, импорты, ошибки компиляции - ещё до того, как файл сохранён. Embeddings находят *похожий* код по смыслу. LSP знает *точные* типы в текущем scope. Вместе - это контекст, от которого LLM генерирует корректный TypeScript, а не правдоподобный.
- **LSP (Language Server Protocol)** - типы, symbols, go-to-definition, diagnostics. Бесплатная семантика кода
- **Embedding Index** - векторная БД для semantic search по кодовой базе. ChromaDB, Qdrant или даже in-memory
- **LLM API** - OpenAI, Anthropic или локальная модель (DeepSeek Coder, CodeLlama)
- **Context Engine** - собирает данные из LSP + Index, формирует prompt с учётом token budget
- **IDE Extension** - VS Code extension API для ghost text, inline completions, chat panel
**Token budget - главное ограничение.** Контекста всегда больше, чем влезает в context window. Приоритизация критична: текущий файл > импорты > LSP symbols > retrieved chunks. Каждый лишний фрагмент вытесняет что-то полезное.
Зачем code assistant использует LSP (Language Server Protocol) помимо embeddings?
Эволюция AI pair programming: что меняется для разработчиков
За 3 года (2022-2025) AI coding assistants прошли путь от автокомплита до автономных агентов. Gen 1 - Copilot, дописывает строку. Gen 2 - Cursor, редактирует файлы по описанию. Gen 3 - Claude Code, Devin - автономно исследуют проект, пишут тесты, исправляют ошибки. Каждый этап смещает роль разработчика: от "пишу каждую строку" к "описываю намерение и проверяю результат".
| Поколение | Продукт | Возможности | Роль разработчика |
|---|---|---|---|
| Gen 1 (2022) | Copilot | Inline completion, одна строка/функция | Пишу код, AI дописывает |
| Gen 2 (2023) | Cursor, Cody | Multi-file edit, codebase-aware chat | Описываю задачу, AI редактирует файлы |
| Gen 3 (2024-25) | Claude Code, Devin | Agentic: исследование, планирование, self-correction | Задаю направление, AI решает задачу |
| Gen 4 (2025+) | ? | Полный цикл: от issue до deployed PR | Ревьюю, архитектурю, приоритизирую |
**Что становится важнее:** навыки чтения и review кода (проверять AI-output), архитектурное мышление (AI хорош в тактике, плох в стратегии), промпт-инженерия (точное описание задачи), системный дизайн (разбиение на компоненты для AI).
- **Code review** - проверка AI-generated кода становится основной задачей. Нужно видеть edge cases, security issues, performance problems
- **Архитектура** - AI отлично пишет код по описанию, но не принимает архитектурных решений. Проектирование системы - зона разработчика
- **Промпт-инженерия для кода** - умение точно сформулировать задачу даёт 10x разницу в качестве AI-output
- **Debugging** - AI ускоряет написание, но сложные баги по-прежнему требуют глубокого понимания системы
- **Domain knowledge** - AI знает общие паттерны, но не знает бизнес-логику конкретного продукта
**AI не заменяет 10x-разработчика, AI делает обычного разработчика ближе к 10x.** Но только при условии, что разработчик понимает что AI генерирует, и может оценить качество результата. "Vibe coding" без понимания - путь к техническому долгу.
Какой навык становится НАИБОЛЕЕ критичным с ростом AI coding assistants?
AI coding assistant = автозамена разработчика
AI assistant - инструмент умножения продуктивности. 55% принятых suggestions требуют правки; архитектурные решения по-прежнему остаются за человеком
GitHub исследование 2024: разработчики принимают ~30% suggestions без изменений, ~55% принимают с правками, ~15% отклоняют. AI генерирует синтаксически корректный код, но не знает контекст бизнес-логики, не видит security edge cases, не принимает архитектурных решений. "Vibe coding" без code review - прямой путь к техническому долгу. Правильная аналогия: умный junior на каждое нажатие Tab, которого всё равно нужно проверять.
Итоги
- Copilot: FIM (Fill-in-the-Middle) + context из открытых вкладок + RLHF на feedback разработчиков → inline ghost text за 200-500мс
- Cursor: codebase indexing в embeddings (text-embedding-3-small, 1536 dim) + semantic retrieval + Apply Model для multi-file edits
- Claude Code: agentic loop (think → act → observe → correct) с tools: Read, Edit, Grep, Bash; self-correction через tsc/tests
- Собственный assistant: LSP (точные типы, символы) + Embedding Index (semantic retrieval) + LLM + Context Engine
- Роль разработчика эволюционирует от "пишу код" к "задаю направление, ревьюю, архитектурю"
- 55% принятых suggestions требуют правки - AI умножает продуктивность, не заменяет понимание
Вопросы для размышления
- Почему Cursor использует Apply Model отдельно от основной LLM? Что конкретно эта архитектура решает?
- В чём разница между codebase indexing у Cursor и динамическим исследованием у Claude Code? Когда каждый подход работает лучше?
- Если 55% принятых suggestions требуют правок - означает ли это, что AI assistants неэффективны, или это нормально для инструмента умножения?
Что дальше
AI coding assistants - полуавтономные. Следующий шаг - полностью автономные агенты (Devin, SWE-Agent), которые решают задачи от issue до PR без участия разработчика.
- Autonomous Agents — Devin, SWE-Agent, OpenHands - AI, который пишет код от задачи до pull request автономно
- MCP (Model Context Protocol) — Стандартный протокол, через который AI assistants подключаются к инструментам
Связанные уроки
- aie-12-rag-fundamentals — Ассистенты достают код-контекст через RAG
- aie-17-agent-fundamentals — Coding-ассистенты - агенты, использующие инструменты
- aie-45-mcp-protocol — Ассистенты подключают инструменты через MCP
- ml-52-search-ranking — Ранжируем релевантные сниппеты для окна контекста
- aie-47-autonomous-agents — Ассистенты эволюционируют к автономному кодингу
- ml-01