Урок 1. Архитектура и основы LLM в программной инженерии
Этот урок закладывает фундамент для понимания того, как современные языковые модели (LLM) трансформируют программную инженерию. Мы разберем, как устроены «мозги» ИИ-ассистентов, почему размер контекста важнее количества параметров и как ИИ охватывает все 112+ задач жизненного цикла разработки ПО.

1. Эволюция архитектур: от понимания к генерации
В основе всех современных LLM лежит архитектура Transformer, предложенная в 2017 году. Однако в зависимости от того, какие части трансформера используются, модели делятся на три ключевых типа, каждый из которых имеет свою специализацию в программной инженерии (SE).
Encoder-only модели (Только энкодер)
Эти модели (например, CodeBERT, CuBERT, GraphCodeBERT) используют только стек энкодеров для создания мощных векторных представлений кода.
- Сильные стороны: Они лучше всего подходят для задач понимания контекста и классификации.
- Применение в SE: Обнаружение уязвимостей в коде, поиск клонов, классификация типов дефектов и семантический поиск по коду. Они «внимательно читают» код, но не умеют его писать.
Encoder-Decoder модели (Энкодер-декодер)
Модели вроде CodeT5, UniXcoder, AlphaCode и PLBART используют обе части трансформера. Энкодер сжимает входную последовательность в скрытое состояние (смысл), а декодер пошагово генерирует результат.
- Сильные стороны: Идеальны для задач Sequence-to-Sequence (преобразование одной последовательности в другую).
- Применение в SE: Генерация документации и саммари по коду, автоматическое исправление программ (Program Repair) и трансляция кода с одного языка программирования на другой.
Decoder-only модели (Только декодер) — современный стандарт
К этому типу относятся самые популярные модели: Codex (база GitHub Copilot), GPT-4, Claude 3.5, Llama 3 и DeepSeek-Coder. Они обучаются предсказывать следующее слово (токен) в последовательности на основе всего предыдущего контекста.
- Сильные стороны: Авторегрессионная генерация. Эти модели могут «рассуждать» и писать связный, логически верный код практически «с нуля».
- Применение в SE: Написание функций по описанию, автодополнение строк кода (inline completion) и создание сложных программных модулей.
Новая эра: Reasoning-модели (o1, o3, DeepSeek-R1)
В 2024-2025 годах появились модели с поддержкой Test-Time Compute или Reasoning. В отличие от обычных моделей, которые отвечают мгновенно, эти модели тратят больше вычислительной мощности на этапе вывода, чтобы «подумать» над задачей.
- Результат: Модели вроде OpenAI o1 занимают 176-е место в мировом рейтинге олимпиадного программирования Codeforces, решая задачи, которые раньше были под силу только топовым программистам-людям. Это делает их незаменимыми для архитектурного планирования и решения алгоритмически сложных багов.
2. Механика контекстного окна: Оперативная память модели
Контекстное окно — это, пожалуй, самая важная характеристика LLM для разработчика на сегодняшний день. Его можно сравнить с оперативной памятью (RAM) нейросети: это тот объем данных, который модель может «удерживать в голове» одновременно.
Что такое токены?
Все данные в LLM измеряются не в словах или байтах, а в токенах.
- Токен — это часть слова или символа. В английском языке 1000 токенов примерно равны 750 словам.
- В языках со сложной морфологией (например, украинском или русском) токены часто короче, и одно и то же предложение занимает в 3-4 раза больше токенов, чем на английском. Это напрямую влияет на стоимость и доступный объем памяти.
Лимиты и эволюция
Размер контекстного окна определяет, какую часть вашего проекта модель видит за раз:
- 100 000 токенов (OpenAI GPT-4o): Достаточно для небольшого пет-проекта или нескольких средних файлов кода.
- 200 000 токенов (Anthropic Claude 3.5): Позволяет загрузить значительную часть кодовой базы для рефакторинга.
- 1 000 000 – 2 000 000 токенов (Google Gemini 1.5 Pro): Революционный объем, позволяющий модели «прочитать» сотни файлов проекта одновременно.
Проблема stateless-природы LLM
Важно понимать: современные LLM являются stateless (не сохраняющими состояние). Они ничего не помнят о том, что вы писали секунду назад, если это не передано им заново в текущем запросе.
- Как это работает: Каждый раз, когда вы отправляете новое сообщение в чат, ваш IDE или CLI-инструмент отправляет модели всю историю диалога целиком.
- Риски: Как только объем истории превышает лимит контекстного окна, модель начинает «забывать» начало разговора или галлюцинировать (выдумывать несуществующие факты).
3. Жизненный цикл SE: 112+ задач для LLM
Использование ИИ в программной инженерии давно вышло за рамки простого автодополнения кода (autocomplete). Исследования выделяют более 112 специфических задач, где LLM могут ассистировать человеку.
Весь жизненный цикл разработки ПО (SDLC) теперь обогащен возможностями ИИ:
1. Сбор требований и проектирование
- Генерация спецификаций из неструктурированных заметок.
- Классификация функциональных и нефункциональных требований.
- Проектирование макетов GUI по текстовому описанию.
2. Разработка кода (Coding)
- Code Generation: Написание кода по промпту.
- Code Summarization: Автоматическое написание комментариев и документации (JSDoc, XML-comments).
- Code Translation: Перенос логики, например, с Java на Rust или с COBOL на Python.
- Unified Development: Использование моделей для написания SQL-запросов или конфигураций инфраструктуры (IaC).
3. Тестирование и качество
- Генерация модульных тестов (Unit tests).
- Fault Localization: Поиск места возникновения ошибки в коде.
- Обнаружение уязвимостей безопасности и статический анализ кода.
4. Сопровождение и эксплуатация
- Automated Program Repair (APR): ИИ не просто находит баг, но и предлагает готовый патч (commit).
- Генерация понятных Commit Messages на основе сделанных изменений.
- Анализ логов и объяснение причин сбоев (Outage Understanding).
4. Резюме для разработчика: Новая роль в SE
Развитие моделей приводит к смене парадигмы: от написания строк кода вручную мы переходим к «VIP-программированию» (термин Андрея Карпатого).
- Разработчик становится менеджером проекта (PM): Ваша задача — не кодить, а предоставлять ИИ-агенту контекст, разбивать задачи на этапы и верифицировать результат.
- Важность базы: Без понимания того, как работает архитектура и как управлять контекстом, использование ИИ будет приводить к ошибкам, которые придется исправлять «25 миллиардов часов».
Итог урока: Понимание различий между архитектурами и лимитов контекста позволяет вам выбирать правильный инструмент под конкретную задачу из 112 доступных, экономя время и минимизируя галлюцинации моделей.