Разработка ПО с помощью AI-агентов: инструменты и практики

Курс охватывает методы AI Assisted Development, от использования кодинг-ассистентов до создания собственных автономных агентов для автоматизации задач [otus.ru](https://otus.ru/lessons/ai-agents/). Вы изучите архитектуру RAG, работу с LLM и инструменты для построения сложных мультиагентных систем в бизнесе и IT [practico.ai](https://www.practico.ai/minicourse).

1. Основы LLM и промпт-инжиниринг для генерации кода и требований

Основы LLM и промпт-инжиниринг для генерации кода и требований

Добро пожаловать в курс «Разработка ПО с помощью AI-агентов». Мы начинаем с фундамента. Чтобы эффективно создавать сложных AI-агентов, необходимо глубоко понимать инструмент, лежащий в их основе — большие языковые модели (LLM). В этой статье мы разберем, как работают эти модели «под капотом», почему они иногда ошибаются и как с помощью инженерного подхода к промптам превратить их в надежных помощников разработчика.

Что такое LLM и почему это важно для разработчика

Большие языковые модели (Large Language Models) — это нейронные сети, обученные на огромных массивах текстовых данных. Их появление сравнивают с переходом от ручного труда к использованию тяжелой техники.

> Появление LLM можно сравнить с переходом от ручного труда к использованию тяжелой техники. Такая аналогия подчеркивает ощутимый рост эффективности и огромные перспективы, которые LLM способны привнести в процессы разработки ПО. > > napoleonit.ru

Для разработчика это означает смену парадигмы: мы переходим от написания синтаксиса к управлению логикой и архитектурой. Согласно исследованиям, 90% опрошенных разработчиков в США отмечают повышение качества кода при использовании AI-инструментов.

Как модель предсказывает текст

В основе работы любой GPT-подобной модели лежит принцип предсказания следующего токена. Модель не «думает» в человеческом понимании, она вычисляет вероятность того, какое слово (или часть слова) должно идти следующим, основываясь на контексте.

Этот процесс можно описать через функцию Softmax, которая превращает «сырые» предсказания нейросети (логиты) в распределение вероятностей:

где — вероятность выбора конкретного токена , — входной вектор значений (логитов) для всех возможных токенов, — основание натурального логарифма (число Эйлера), — размер словаря модели (количество всех известных ей токенов), а сумма в знаменателе обеспечивает нормировку, чтобы сумма всех вероятностей была равна 1.

Простыми словами: модель смотрит на ваш текст, рассчитывает баллы для каждого возможного следующего слова и выбирает наиболее вероятное (с учетом настроек случайности).

> Текстовые запросы — это взаимодействие пользователей с моделями GPT. Как и во всех формируемых языковых моделях, модели GPT пытаются создать следующую серию слов, которые, скорее всего, следуют из предыдущего текста. > > learn.microsoft.com

Промпт-инжиниринг: от магии к инженерной дисциплине

Промпт-инжиниринг — это не просто подбор «волшебных слов», а способ структурировать входные данные так, чтобы математическая модель с наибольшей вероятностью выдала нужный результат. Это навык управления контекстом.

Ключевые параметры генерации

Перед написанием промпта важно настроить параметры модели. Самый важный для нас — Temperature (Температура).

* Низкая температура (0.0 - 0.3): Модель становится детерминированной. Она всегда выбирает токен с максимальной вероятностью. Это критически важно для генерации кода, JSON или SQL-запросов, где нужна точность и воспроизводимость. * Высокая температура (0.7 - 1.0): Модель может выбирать менее вероятные токены, что добавляет «креативности». Подходит для брейншторминга идей или написания текстов, но опасно для кода.

Структура идеального промпта для разработки

Чтобы получить качественный код или требования, ваш промпт должен содержать четыре компонента:

  • Роль (Persona): Задает контекст и стиль ответа.
  • Контекст (Context): Описание задачи, ограничения, используемые технологии.
  • Инструкции (Instructions): Четкие шаги, что нужно сделать.
  • Формат вывода (Output Format): Как именно вы хотите видеть ответ (код, Markdown, JSON).
  • Пример плохого промпта: > Напиши функцию для авторизации.

    Пример хорошего промпта: > Ты — Senior Python Developer. Напиши функцию авторизации пользователя, используя библиотеку FastAPI и Pydantic. Функция должна принимать JSON с email и паролем, хешировать пароль через bcrypt и возвращать JWT токен. Обработай ошибки базы данных и неверные учетные данные. Верни только код без пояснений.

    Техники промпт-инжиниринга для задач ПО

    Рассмотрим конкретные методики, которые повышают качество генерации.

    1. Few-Shot Learning (Обучение на примерах)

    LLM лучше понимают паттерны, чем инструкции. Вместо долгого описания того, как писать тесты, покажите модели пример.

    Пример промпта:

    2. Chain-of-Thought (Цепочка рассуждений)

    Для сложных архитектурных задач или алгоритмов заставьте модель «рассуждать вслух». Это снижает количество галлюцинаций, так как модель генерирует промежуточные логические шаги перед финальным ответом.

    Добавьте в промпт фразу: «Думай шаг за шагом. Сначала опиши алгоритм, а затем напиши код».

    3. Использование разделителей

    Модели плохо ориентируются в сплошном тексте. Используйте XML-теги или тройные кавычки для отделения инструкций от данных.

    Пример:

    Генерация требований и спецификаций

    Одна из самых сильных сторон LLM — перевод абстрактных бизнес-идей в технические требования. Это первый этап создания AI-агента: агент должен четко понимать задачу.

    От идеи к спецификации

    Вы можете использовать LLM как бизнес-аналитика. Загрузите «сырые» заметки со встречи и попросите структурировать их.

    Промпт: > Проанализируй следующий текст обсуждения функционала корзины покупок. Выдели функциональные и нефункциональные требования. Оформи ответ в виде таблицы Markdown с колонками: ID, Тип, Описание, Приоритет.

    Это экономит часы рутинной работы и позволяет избежать эффекта «чистого листа».

    Генерация кода: лучшие практики

    При генерации кода с помощью LLM важно помнить, что модель не исполняет код, а лишь предсказывает текст, похожий на код.

    Борьба с галлюцинациями библиотек

    Модели могут выдумывать несуществующие методы библиотек. Чтобы этого избежать:

  • Явно указывайте версии библиотек (например, «используй SQLAlchemy 2.0»).
  • Просите модель использовать только стандартные библиотеки, если это возможно.
  • Используйте RAG (Retrieval-Augmented Generation) — предоставление модели документации в контексте (об этом мы поговорим в следующих статьях курса).
  • > 80-90% моих строк на последних проектах написаны через LLM, при этом мне удается с первой генерации по сравнительно небольшому промпту получать вплоть до 500-1000 строк комплексной бизнес логики. > > habr.com

    Итеративная разработка

    Не пытайтесь сгенерировать все приложение одним промптом. Разбивайте задачу на функции или классы. Сгенерируйте интерфейс, затем реализацию, затем тесты.

    Итоги

    Мы рассмотрели фундамент работы с LLM. Эти знания станут основой для создания автономных агентов в следующих модулях.

  • LLM — это вероятностные машины. Они предсказывают следующий токен на основе функции Softmax. Понимание этого помогает не переоценивать «интеллект» модели и лучше контролировать её вывод.
  • Контекст и структура решают всё. Качество ответа напрямую зависит от качества промпта. Используйте ролевые модели, четкие инструкции и примеры (Few-Shot).
  • Температура важна. Для генерации кода всегда используйте низкую температуру (близкую к 0), чтобы получить предсказуемый и рабочий результат.
  • Разделяй и властвуй. Разбивайте сложные задачи на подзадачи и используйте цепочку рассуждений (Chain-of-Thought) для сложной логики.
  • 2. Инструментарий разработчика: эффективное использование Cursor, Copilot и Cline

    Инструментарий разработчика: эффективное использование Cursor, Copilot и Cline

    В предыдущей статье мы разобрали фундамент — как работают большие языковые модели (LLM) и как ими управлять через промпты. Теперь пришло время перенести эти знания в среду разработки. Эпоха «Copy-Paste» из веб-чата в редактор кода уходит. На смену ей приходят интегрированные AI-агенты, способные видеть ваш проект целиком, планировать изменения и самостоятельно править файлы.

    В этой статье мы разберем три ключевых инструмента, которые определяют современный стек AI-разработки: Cursor, GitHub Copilot (CLI) и Cline. Мы научимся не просто нажимать «Tab» для автодополнения, а делегировать им сложные задачи.

    Cursor: IDE на стероидах

    Cursor — это форк VS Code, в который на уровне ядра внедрены механизмы взаимодействия с LLM. В отличие от плагинов, Cursor имеет полный доступ к контексту редактора: он видит, какие файлы открыты, где находится курсор и что вы меняли минуту назад.

    Управление контекстом

    Главная проблема при работе с LLM — ограниченное окно контекста. Если вы просто напишете «исправь ошибку», модель не поймет, о чем речь. Cursor решает это через систему тегов:

    * @Files: позволяет добавить конкретные файлы в контекст запроса. * @Codebase: индексирует весь проект (используя векторные эмбеддинги) и ищет релевантные куски кода для ответа. * @Docs: позволяет добавить внешнюю документацию (например, React или FastAPI), которую модель прочитает перед генерацией ответа.

    Режим Composer и Agent Harness

    Самая мощная функция для агентной разработки — Composer (Ctrl+I / Cmd+I). Это режим, в котором Cursor может редактировать несколько файлов одновременно. Вы описываете задачу («Добавь поле phone в модель User, обнови схему Pydantic и миграции Alembic»), и агент планирует изменения во всех затронутых файлах.

    Для эффективной работы Cursor использует концепцию Agent Harness (обвязка агента). Это слой между вашим промптом и моделью, который оркестрирует инструменты.

    > Agent harness состоит из трёх компонентов: Инструкции (системный промпт), Инструменты (редактирование файлов, поиск) и Сообщения пользователя. Harness важен потому, что разные модели по-разному реагируют на одни и те же запросы. > > habr.com

    Plan Mode: Сначала думай, потом делай

    Частая ошибка новичков — требовать код немедленно. Для сложных задач в Cursor существует Plan Mode. Если нажать Shift+Tab в поле ввода, агент перейдет в режим планирования. Он проанализирует запрос и составит пошаговый план реализации, не написав ни строчки кода, пока вы не утвердите стратегию.

    > Исследование Чикагского университета показало, что опытные разработчики чаще планируют перед генерацией кода. Планирование помогает чётко сформулировать, что именно вы собираетесь сделать. > > habr.com

    Системные инструкции (.cursorrules)

    Чтобы не повторять в каждом промпте «используй TypeScript» или «не пиши комментарии», создайте в корне проекта файл .cursorrules. Это системный промпт, который автоматически добавляется к каждому диалогу. Здесь можно прописать архитектурные паттерны, используемые библиотеки и стиль кодирования.

    GitHub Copilot CLI: Агент в терминале

    Многие привыкли к Copilot как к автодополнителю в редакторе. Однако для инженеров, работающих с DevOps и скриптами, настоящая сила кроется в Copilot CLI.

    Трансформация командной строки

    Copilot CLI превращает естественный язык в команды shell. Это спасает, когда нужно написать сложный ffmpeg запрос или awk фильтр, синтаксис которых трудно запомнить.

    Пример запроса: copilot: удали все docker-контейнеры, которые завершились с ошибкой

    Агентный режим в CLI

    Недавно GitHub обновил CLI, добавив в него полноценные агентные функции. Теперь инструмент умеет не только подсказывать команды, но и выполнять цепочки действий.

    > Главное нововведение — режим планирования. Раньше Copilot работал линейно: получил запрос — выдал команду. Теперь можно сначала обсудить задачу, уточнить требования и согласовать план действий до того, как будет написана хоть одна строчка кода. > > habr.com

    Это критически важно для задач, где ошибка стоит дорого (например, операции с git или массовое удаление файлов). Вы можете попросить: «Проанализируй изменения в git и предложи текст коммита», и агент выполнит git diff, проанализирует вывод и сгенерирует сообщение.

    Cline (ранее Claude Dev): Автономный агент

    Если Cursor и Copilot — это помощники, то Cline позиционируется как автономный инженер. Это расширение для VS Code, которое работает на основе MCP (Model Context Protocol).

    В чем отличие?

    Cline работает в цикле «Мысль — Действие — Наблюдение» (Think-Act-Observe loop). Он умеет:

  • Редактировать файлы.
  • Запускать команды в терминале (например, прогнать тесты или установить пакет).
  • Анализировать вывод терминала и исправлять свои ошибки.
  • Математика надежности агента

    При использовании автономных агентов вроде Cline важно понимать вероятность успеха сложной задачи. Если задача состоит из последовательных шагов, и ошибка на любом шаге ведет к провалу всей задачи, общая надежность падает экспоненциально.

    Пусть — вероятность успешного выполнения одного шага агентом (например, 0.95), а — количество шагов в задаче. Вероятность успеха всей задачи рассчитывается как:

    где — итоговая вероятность успеха всей цепочки действий, — вероятность безошибочного выполнения одного элементарного действия (шага), а — количество таких действий.

    Пример: Если агент выполняет шаги с точностью 90% (), то для задачи из 10 шагов () вероятность успеха составит:

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

    Именно поэтому Cline требует подтверждения каждого действия (Human-in-the-loop). Не оставляйте агента без присмотра на длинных дистанциях.

    Сравнительная таблица инструментов

    | Характеристика | Cursor | GitHub Copilot CLI | Cline | | :--- | :--- | :--- | :--- | | Основная роль | Глубокая интеграция в IDE, рефакторинг | Помощник в терминале, Git-операции | Автономное выполнение задач | | Доступ к файлам | Полный (через эмбеддинги) | Ограниченный текущей директорией | Полный (чтение/запись) | | Выполнение команд | Ограничено (через терминал IDE) | Нативно (Shell) | Нативно (Shell + анализ вывода) | | Режим планирования | Есть (Composer/Plan Mode) | Есть (Plan Mode) | Встроен в цикл работы | | Лучшее применение | Написание кода, архитектура | DevOps, скрипты, Git | Scaffolding, исправление багов, тесты |

    Практические сценарии использования

    1. Рефакторинг легаси-кода (Cursor)

    Используйте Cursor с моделью Claude 3.5 Sonnet (она лучше всего работает с кодом).
  • Откройте файл.
  • Нажмите Cmd+K.
  • Добавьте контекст @Codebase.
  • Промпт: «Перепиши этот класс на функциональный стиль, используя хуки React. Сохрани всю бизнес-логику».
  • 2. Настройка CI/CD (Copilot CLI)

    Вместо того чтобы гуглить синтаксис GitHub Actions:
  • Откройте терминал.
  • Введите: copilot: создай workflow для линтинга Python кода при пулл-реквесте.
  • Скопируйте предложенный код в файл.
  • 3. Создание тестов (Cline)

    Cline идеально подходит для итеративных задач.
  • Запустите Cline.
  • Промпт: «Проанализируй файл utils.ts. Создай файл utils.test.ts и покрой тестами все функции. Запусти тесты, и если они упадут — исправь код или тесты, пока все не станет зеленым».
  • Наблюдайте, как агент пишет тесты, запускает npm test, видит ошибки и правит их сам.
  • Итоги

    Мы рассмотрели инструментарий, который превращает разработчика в оператора AI-агентов.

  • Cursor — это ваш основной редактор кода. Используйте .cursorrules для стандартизации и режим Composer для многофайловых изменений. Не забывайте про Plan Mode для сложных задач.
  • Copilot CLI — незаменим для работы с терминалом и Git. Он переводит естественный язык в команды Shell и помогает планировать операции.
  • Cline — это автономный агент для делегирования задач. Помните про формулу : чем длиннее задача, тем выше риск ошибки, поэтому контролируйте выполнение через подтверждение действий.
  • Контекст — это ключ. Умелое использование тегов @Files, @Docs и @Codebase отличает профессионала от новичка, жалующегося на «глупый AI».