Использование AI-ассистентов в разработке
Использование AI-ассистентов в разработке
Искусственный интеллект в профессиональной деятельности программиста представляет собой набор инструментов, автоматизирующих рутинные операции и снижающих когнитивную нагрузку. Эти системы позволяют специалистам генерировать фрагменты кода, предлагать автодополнения, выявлять ошибки и создавать тестовые сценарии. Основная цель внедрения таких технологий — освобождение времени разработчика для решения задач архитектурного уровня и проектирования сложной логики бизнес-процессов.
Ассистент может предложить команды терминала и Git. Сверяйте каждую строку со стоп-листом "Опасные скрипты" — пути, --hard, --force, pipe в shell.
Архитектура агентов — 6.04 / Агенты ИИ.
Основные сценарии использования
AI-системы интегрируются в процесс разработки на различных этапах жизненного цикла программного обеспечения. Ниже приведены ключевые направления применения этих инструментов.
Автодополнение и автогенерация кода
Play ITЗагрузка интерактивного демо…
Инструменты анализа контекста проекта работают в реальном времени, предлагая логичные продолжения написанного кода. Плагины для сред разработки (IDE) анализируют структуру файлов, импортируемые библиотеки и стиль написания, чтобы предложить наиболее подходящие варианты реализации.
Программа получает подсказки на основе:
- Текущего синтаксиса строки;
- Определений классов и методов в проекте;
- Паттернов использования библиотек;
- Предыдущих действий разработчика в файле.
Пример работы такого инструмента в редакторе кода:
def calculate_total_price(items):
total = 0
for item in items:
# AI предлагает продолжить цикл
total += item.price * item.quantity
return total
В данном случае система может автоматически завершить выражение умножения или предложить использование встроенных функций фильтрации списка.
Рефакторинг и оптимизация производительности
Нейросети способны анализировать существующий код и предлагать более чистые, идиоматичные конструкции. Инструменты указывают на места, где код можно упростить без изменения функциональности, а также предлагают алгоритмы с лучшей временной сложностью.
Система может выявить:
- Избыточные циклы вложенности;
- Неэффективные запросы к базе данных;
- Повторяющиеся блоки кода, которые стоит вынести в отдельные функции;
- Потенциальные утечки памяти.
Пример оптимизации запроса к базе данных:
Исходный код:
SELECT * FROM users WHERE status = 'active';
-- Цикл по каждой записи для обработки
Предложение ИИ:
SELECT id, name, email FROM users WHERE status = 'active' AND created_at > NOW() - INTERVAL 1 MONTH;
Переход к выборке только необходимых колонок снижает объем передаваемых данных и ускоряет работу приложения.
Генерация документации
AI-ассистенты автоматизируют создание комментариев к функциям, описаний модулей и README-файлов. Системы анализируют сигнатуры методов, типы параметров и возвращаемые значения для формирования структурированной информации.
Форматы документации, поддерживаемые инструментами:
- JSDoc для JavaScript и TypeScript;
- Docstrings для Python;
- XML Документация для C#;
- JavaDoc для Java.
Пример генерации комментария к методу:
/// <summary>
/// Вычисляет итоговую стоимость заказа с учетом скидок.
/// </summary>
/// <param name="items">Список товаров в заказе.</param>
/// <param name="discountPercent">Процент скидки.</param>
/// <returns>Общая сумма заказа после применения скидки.</returns>
public decimal CalculateOrderTotal(List<Item> items, decimal discountPercent)
{
// Логика расчета
}
Инструмент также способен создать описание раздела проекта в файле README.md, перечислив зависимости, способы установки и основные функции.
Поиск ошибок и отладка
AI-системы быстро анализируют стек вызовов (stack trace) и сообщения об ошибках, предоставляя рекомендации по их устранению. Пользователь может скопировать текст ошибки в диалоговое окно помощника, получить объяснение причины сбоя и пример исправления.
Типы проблем, которые помогает решать ИИ:
- Ошибки компиляции и синтаксические неточности;
- Логические ошибки в условиях и циклах;
- Проблемы с типами данных при приведении;
- Конфликты версий зависимостей;
- Ошибки безопасности (например, SQL-инъекции).
Пример разбора ошибки:
Сообщение об ошибке:
TypeError: Cannot read properties of undefined (reading 'map')
Рекомендация ИИ:
Переменная Данные не содержит массива перед вызовом метода .map(). Необходимо добавить проверку на существование объекта и его тип перед выполнением операции.
if (Array.isArray(Данные)) {
data.map(item => console.log(item));
} else {
console.warn('Данные не являются массивом');
}
Генерация тестовых сценариев
Инструменты создают единицы тестирования (unit tests) на основе существующего кода, следуя принципам TDD (Test Driven Разработка). Система определяет граничные условия, нормальные сценарии и случаи возникновения исключений.
Поддерживаемые фреймворки тестирования:
- Jest, Mocha для JavaScript/TypeScript;
- PyTest, unittest для Python;
- xUnit, NUnit для .NET;
- JUnit для Java.
Пример генерации теста для функции:
Исходная функция:
def divide(a, b):
return a / b
Сгенерированный тест (PyTest):
Код ITЗагрузка примера кода…
Инструкция по использованию ИИ-агентов в Cursor и Claude
ИИ-агент — это программный компонент на базе большой языковой модели, способный самостоятельно планировать последовательность действий, выполнять их во внешней среде (читать файлы, редактировать код, запускать команды, обращаться к сети) и оценивать результаты для корректировки дальнейших шагов. Агент работает в цикле "наблюдение — планирование — действие — оценка" и принимает решения о следующих итерациях самостоятельно, в рамках заданных пользователем ограничений.
Современные инструменты разработки предлагают два основных подхода к взаимодействию с ИИ-агентами:
- встроенные агенты в IDE — среда разработки интегрирует модель напрямую в редактор кода, предоставляя доступ к файловой системе проекта, терминалу, индексам и инструментам сборки (Cursor, Windsurf, GitHub Copilot Workspace);
- автономные агенты — модель работает в отдельном интерфейсе (веб-приложение, CLI-утилита) и взаимодействует с проектом через предоставленные ей инструменты (Claude.ai, Claude Code, ChatGPT с Code Interpreter).
Оба подхода дополняют друг друга — встроенные агенты удобны для точечных правок внутри проекта, автономные — для исследования, прототипирования и работы с несколькими проектами одновременно.
Cursor
Cursor — это форк Visual Studio Code с интегрированными возможностями генерации и редактирования кода посредством больших языковых моделей. Среда сохраняет полную совместимость с экосистемой VS Code — расширения, темы, сочетания клавиш, конфигурации рабочих пространств переносятся напрямую. Отличие заключается в добавлении слоёв взаимодействия с моделью — чат с кодовой базой, инлайновые правки, режим агента и механизм предсказания следующих изменений.
Cursor поддерживает несколько моделей на выбор пользователя — Claude (Sonnet, Opus, Haiku), GPT-4o, o1, o3, Gemini, а также локальные и self-hosted модели через OpenAI-совместимый API. Выбор модели влияет на скорость ответа, глубину анализа и стоимость использования.
Режимы работы Cursor
Cursor предоставляет четыре основных режима взаимодействия с моделью, каждый из которых решает свой класс задач.
Tab (автодополнение) — режим предсказания следующих изменений в коде. Модель анализирует текущий контекст — открытый файл,_recent changes, связанные файлы из индекса, — и предлагает продолжение или модификацию. Предсказания появляются серым текстом (ghost text) и принимаются клавишей Tab. Cursor Tab способен предлагать многошаговые правки: исправление ошибки в одной строке с одновременным обновлением зависимых мест в том же файле.
Inline Edit (Cmd/Ctrl + K) — режим точечной правки выделенного фрагмента или текущей строки. Пользователь выделяет код, вызывает диалог, формулирует задачу ("извлеки эту логику в отдельный метод", "добавь обработку ошибок", "перепиши с использованием async/await"), и модель заменяет выделение на модифицированную версию. Результат отображается в режиме diff: зелёным показаны добавления, красным — удаления. Пользователь принимает (Accept) или отклоняет (Reject) изменения.
Chat (Cmd/Ctrl + L) — режим диалога с моделью в боковой панели. Чат имеет доступ к индексу кодовой базы и способен отвечать на вопросы об архитектуре, искать определения, объяснять сложные фрагменты, генерировать новый код. В чате доступны упоминания файлов через @filename, символов через @symbol, документации через @docs, веб-страниц через @web. Модель использует эти упоминания как явный контекст для ответа.
Agent (Cmd/Ctrl + L с переключением в режим Agent) — полноценный агентский режим, в котором модель получает право самостоятельно:
- читать любые файлы проекта через индекс или прямое обращение;
- редактировать множество файлов за одну сессию;
- выполнять команды в терминале (с явным разрешением пользователя или автоматически);
- запускать тесты и интерпретировать их результаты;
- искать ошибки в логах и предлагать исправления;
- создавать новые файлы и директории;
- работать с внешними ресурсами через браузер.
Агент действует итеративно — формулирует план, выполняет шаг, анализирует результат, корректирует план. Одна сессия агента способна решить задачу, требующую десятков отдельных правок и нескольких запусков тестов.
Внимание Режим Agent обладает широкими полномочиями в файловой системе и терминале. Перед запуском агента на рабочей копии проекта требуется создать коммит или отдельную ветку, чтобы иметь возможность отката.
Настройка Cursor под проект
Cursor читает специальные конфигурационные файлы, расположенные в корне проекта. Эти файлы задают модели правила поведения, ограничения и контекст.
AGENTS-файлы и правила команды
В командной разработке полезно держать отдельный документ правил для агентского режима. Такой файл фиксирует стиль статей, запреты по языку, обязательные проверки и безопасные границы работы ИИ.
Базовый вариант для репозитория - AGENTS.md в корне проекта.
Локальный персональный вариант - AGENTS.local.md с добавлением в .gitignore.
Практическая схема:
AGENTS.md- общие правила команды и редакционные стандарты..cursorrules- правила для Cursor в текущем проекте.CLAUDE.md- правила для Claude Code в том же проекте.ARCHITECTURE.md- единый источник по архитектуре, на который ссылаются все агентские файлы.
Минимальные разделы AGENTS.md:
- стиль и тон текстов;
- запреты по формулировкам и пунктуации;
- обязательная структура статьи;
- правила безопасности терминальных команд;
- чеклист проверки перед merge;
- шаблон отчета при запросе "проверь репозиторий".
Пример фрагмента AGENTS.md:
## Проверка статей
- Все утверждения формулируются напрямую в утвердительной форме
- Конструкции вида "не X, а Y" запрещены
- В обычных предложениях и перечислениях используется "-" вместо ":"
## Проверка репозитория по запросу пользователя
1. Найти языковые паттерны и перечислить файлы
2. Проверить полноту контекста в измененных статьях
3. Вернуть отчет - сначала нарушения, затем рекомендации
Когда пользователь просит "проверь репозиторий", агент выполняет не только технический аудит кода, но и редакционный аудит статей по правилам из AGENTS.md.
.cursorrules — текстовый файл с инструкциями для модели. Инструкции применяются ко всем взаимодействиям внутри данного проекта. Типичное содержимое:
# Правила проекта
- Язык проекта: Python 3.12
- Стиль кода: Ruff с конфигурацией из pyproject.toml
- Форматирование: black, длина строки 88
- Тесты: pytest, покрытие минимум 80%
- Типизация: mypy в strict-режиме
- Документация: Google-style docstrings
- Архитектура: слоистая (presentation → application → domain → infrastructure)
- Импорты: абсолютные, без wildcard
- Асинхронность: только async/await, без threading
- Логирование: структурное через structlog
- Исключения: кастомные классы из domain.exceptions
.cursorignore — список файлов и директорий, исключаемых из индекса и контекста модели. Используется для защиты конфиденциальных данных и снижения шума:
.env
.env.*
secrets/
**/credentials.json
fixtures/production/
node_modules/
.venv/
__pycache__/
*.pyc
build/
dist/
.cursorindexingignore — отдельный список для индексатора кодовой базы. Файлы из этого списка исключаются из глобального индекса, но остаются доступными по явному упоминанию через @filename. Применяется для больших сгенерированных файлов, которые засоряют контекст, но иногда требуются для справки.
Индекс кодовой базы
Cursor строит векторный индекс всех файлов проекта, что позволяет модели находить релевантные фрагменты кода по смысловым запросам. Индекс обновляется автоматически при изменении файлов. Пользователь способен управлять поведением индексатора:
- полная переиндексация — через палитру команд
Cursor: Rebuild Index; - ручное добавление контекста — упоминание
@Codebaseв чате заставляет модель провести поиск по индексу перед ответом; - приоритетные файлы — частое обращение к файлу через
@повышает его вес в индексной выдаче.
Горячие клавиши Cursor
| Сочетание | Действие |
|---|---|
Tab | Принять предсказание Tab |
Esc | Отклонить предсказание |
Cmd/Ctrl + K | Inline Edit на выделении или текущей строке |
Cmd/Ctrl + L | Открыть чат |
Cmd/Ctrl + Shift + L | Добавить выделенный код в текущий чат |
Cmd/Ctrl + I | Composer (многоступенчатая генерация) |
Cmd/Ctrl + Enter | Запустить агент на всех предложениях |
@ в чате | Открыть меню упоминаний (файлы, символы, docs, web) |
Возможности режима Agent
Агент Cursor решает широкий спектр задач разработки:
Рефакторинг распределённой логики. Задача "переименуй функцию calculateTotal в computeInvoiceTotal и обнови все вызовы" приводит агента к поиску всех упоминаний через индекс, последовательной правке каждого файла, запуску тестов для подтверждения корректности.
Исправление ошибок по тестам. Пользователь сообщает агенту о падающем тесте. Агент самостоятельно запускает тест, читает трейс, находит источник ошибки, вносит правку, перезапускает тест, убеждается в прохождении.
Генерация по спецификации. Пользователь прикрепляет файл SPEC.md с описанием нового endpoint. Агент создаёт маршрутизатор, контроллер, сервис, репозиторий, миграцию БД, тесты и обновляет OpenAPI-спецификацию.
Исследование кодовой базы. Вопросы вида "где в проекте обрабатываются платёжные webhook-и" и "какие сервисы зависят от модуля billing" получают ответы на основе индекса с цитированием конкретных файлов.
Настройка окружения. Агент способен установить зависимости, настроить переменные окружения, создать Docker-образ, сконфигурировать CI-пайплайн.
Примеры промптов для агента Cursor
Эффективность агента напрямую зависит от качества постановки задачи. Структурированные промпты дают предсказуемо лучшие результаты.
Задача: добавить rate limiting на endpoint /api/v1/users
Требования:
- Лимит: 100 запросов в минуту с одного IP
- Хранилище счётчиков: Redis (уже подключен к проекту)
- При превышении возвращать 429 с заголовком Retry-After
- Покрыть тестами: успешный запрос, превышение лимита, сброс счётчика
Ограничения:
- Использовать существующий middleware-паттерн из src/middleware/
- Конфигурация лимитов выносится в settings.py
- Логирование превышений через structlog с уровнем warning
Проанализируй падение теста tests/test_payment.py::test_refund_flow
Шаги:
1. Запусти тест и прочитай вывод
2. Определи корневую причину
3. Внеси минимальную правку, сохраняя существующие контракты
4. Запусти весь test_payment.py для проверки отсутствия регрессий
5. Если правка затрагивает публичный API — обнови документацию
Claude
Claude — семейство больших языковых моделей компании Anthropic, доступное через веб-интерфейс claude.ai, API и специализированные инструменты (Claude Code, Claude for Desktop, Claude for Enterprise). Модели Claude отличаются расширенным контекстным окном (до 200 тысяч токенов у Sonnet и Opus), встроенной поддержкой артефактов, способностью к многоступенчатому планированию и режимом расширенного мышления (extended thinking).
Веб-интерфейс claude.ai
Веб-интерфейс Claude предоставляет несколько режимов работы, каждый из которых оптимизирован под свой сценарий использования.
Обычный чат — базовый режим диалога. Пользователь отправляет текстовые запросы, загружает файлы (PDF, изображения, код, таблицы), получает ответы с форматированием markdown. Контекстное окно сохраняет всю историю диалога в рамках одной сессии.
Артефакты (Artifacts) — механизм отображения результатов работы модели в отдельной панели справа от чата. Артефактами становятся:
- фрагменты кода с подсветкой синтаксиса;
- HTML-страницы с возможностью предпросмотра;
- React-компоненты с интерактивным рендером;
- SVG-изображения;
- Mermaid-диаграммы;
- документы в формате markdown.
Артефакты поддерживают версионность — пользователь способен переключаться между итерациями, сравнивать изменения, возвращаться к предыдущим версиям. Это удобно при итеративной разработке UI-компонентов или схем.
Projects — механизм организации контекста вокруг устойчивой темы. Пользователь создаёт проект, загружает в него документы (технические спецификации, архитектурные решения, стилистические гайды, примеры кода), задаёт системные инструкции. Все диалоги внутри проекта используют загруженный контекст автоматически. Проекты подходят для долгосрочной работы над одним продуктом — модель "знает" архитектуру, принятые паттерны, принятые в команде соглашения.
Research Mode — режим глубокого исследования с доступом к веб-поиску. Модель формулирует план исследования, выполняет поисковые запросы, читает найденные страницы, синтезирует результаты в структурированный отчёт с цитированием источников. Применяется для анализа технологий, сравнения решений, изучения best practices.
Extended Thinking — режим расширенного мышления, при котором модель тратит дополнительное время на внутреннее планирование перед ответом. Пользователь видит развёрнутый процесс рассуждения в отдельном блоке. Режим даёт качественные результаты на сложных задачах — математических доказательствах, архитектурных решениях, анализе производительности, рефакторинге нетривиального кода.
Claude Code
Claude Code — CLI-агент от Anthropic, работающий в терминале и обладающий полным доступом к файловой системе, Git и инструментам сборки проекта. Подробный практикум (установка, plan mode, subagents, MCP, Ralph-loop, проект lead-webhook) — 6.07 / 4. Ниже — краткий обзор для сравнения с Cursor.
Агент устанавливается через native installer или npm:
curl -fsSL https://claude.ai/install.sh | bash
# или: npm install -g @anthropic-ai/claude-code
Запуск в директории проекта:
claude
После запуска агент сканирует структуру проекта, читает ключевые файлы (README.md, package.json, pyproject.toml, Makefile), строит представление об архитектуре и готов принимать задачи.
Возможности Claude Code:
- чтение и редактирование файлов в любом месте проекта с отображением diff;
- выполнение shell-команд с явным подтверждением пользователя или автоматическим разрешением для безопасных операций;
- работа с Git — создание веток, коммиты, поиск по истории, разрешение конфликтов слияния (базовые команды — 12 команд);
- запуск тестов и интерпретация результатов — агент анализирует трейс и предлагает правки;
- поиск по кодовой базе через grep, ripgrep, встроенные инструменты навигации;
- многоступенчатые задачи — агент разбивает сложную задачу на подзадачи и выполняет их последовательно;
- продолжение сессии — история диалога сохраняется, агент способен вернуться к незаконченной задаче.
Пример сессии Claude Code:
Код ITЗагрузка примера кода…
Команды управления внутри сессии Claude Code:
| Команда | Назначение |
|---|---|
/help | Список доступных команд |
/clear | Очистить историю диалога |
/compact | Сжать историю для экономии контекста |
/cost | Показать использованные токены и стоимость |
/config | Управление настройками разрешений |
/review | Запустить код-ревью изменений |
/init | Создать CLAUDE.md с описанием проекта |
Файл CLAUDE.md
CLAUDE.md — конфигурационный файл, аналогичный .cursorrules в Cursor. Файл располагается в корне проекта (или в поддиректория для модульно-специфичных правил) и содержит инструкции для Claude Code.
Пример CLAUDE.md:
Код ITЗагрузка примера кода…
MCP-серверы
Model Context Protocol (MCP) — открытый стандарт Anthropic для подключения внешних инструментов к модели. MCP-серверы расширяют возможности Claude, предоставляя доступ к:
- базам данных (PostgreSQL, SQLite, MongoDB);
- системам контроля версий (GitHub, GitLab);
- инструментам разработки (Sentry, Linear, Jira);
- файловым хранилищам (Google Drive, S3);
- браузерам и поисковым системам;
- внутренним корпоративным API.
Настройка MCP-серверов выполняется в конфигурационном файле ~/.claude/mcp.json:
Код ITЗагрузка примера кода…
После подключения MCP-сервера модель получает новые инструменты, которые использует в агентском режиме:
- выполняет SQL-запросы;
- создаёт issue в трекере;
- читает файлы из хранилища.
Архитектура протокола, типы ресурсов и сравнение с классическим HTTP API — в MCP-серверы (раздел MCP и классический API). База REST, OpenAPI и эндпоинтов — API — интерфейсы прикладного программирования.
Совместное использование Cursor и Claude
Cursor и Claude решают пересекающиеся, но различные задачи. Эффективная стратегия предполагает распределение сценариев между инструментами.
| Сценарий | Рекомендуемый инструмент |
|---|---|
| Точечные правки в открытом файле | Cursor Inline Edit |
| Автодополнение при наборе кода | Cursor Tab |
| Рефакторинг с изменением множества файлов | Cursor Agent или Claude Code |
| Исследование unfamiliar кодовой базы | Claude с @Codebase или Claude Code |
| Генерация прототипа UI-компонента | Claude Artifacts |
| Анализ длинного документа (спецификация, логи) | Claude с расширенным контекстом |
| Написание архитектурного решения (ADR) | Claude Projects с загруженным контекстом |
| CI-интеграция и код-ревью в PR | Claude Code или Cursor Agent |
| Работа с БД, внешними API, трекерами задач | Claude с MCP-серверами |
| Быстрый вопрос по проекту | Cursor Chat с @Codebase |
Рабочий процесс с двумя инструментами
Типичная сессия разработки с использованием обоих инструментов выглядит следующим образом:
Этап 1 — планирование в Claude. Пользователь открывает Claude Projects, загружает спецификацию задачи, обсуждает с моделью архитектурные решения, получает план реализации с декомпозицией на подзадачи. Результат сохраняется как артефакт.
Этап 2 — реализация в Cursor Agent. Пользователь копирует план в Cursor, запускает агента с запросом "реализуй задачу по плану ниже". Агент выполняет правки в файлах, запускает тесты, вносит корректировки.
Этап 3 — ревью в Claude Code. Пользователь открывает терминал, запускает claude /review, получает анализ внесённых изменений с указанием потенциальных проблем, нарушений архитектуры, пропущенных тестов.
Этап 4 — финализация в Cursor. Пользователь возвращается в Cursor, применяет рекомендации Claude Code, выполняет финальный прогон тестов, создаёт коммит.
Контекст и передача данных между инструментами
Передача контекста между Cursor и Claude требует явного подхода. Автоматической синхронизации между инструментами нет. Применяются следующие приёмы:
Экспорт диалога. Cursor позволяет скопировать диалог в буфер обмена. Пользователь вставляет его в Claude для продолжения обсуждения на более высоком уровне абстракции.
Общие конфигурационные файлы. .cursorrules и CLAUDE.md содержат пересекающуюся информацию. Подход: поддерживать один основной файл (например, ARCHITECTURE.md) и ссылаться на него из обоих конфигурационных файлов.
Git как синхронизатор. Коммит с осмысленным сообщением фиксирует состояние проекта. Claude Code читает git log и git diff для понимания последних изменений, Cursor использует индекс текущего состояния.
Ограничения и подводные камни
Каждый инструмент обладает характерными ограничениями, которые требуется учитывать при планировании работы.
Ограничения Cursor
- Контекстное окно модели — даже при большом индексе модель получает ограниченную выборку файлов. На крупных монолитах агент способен упустить важные зависимости.
- Стоимость запросов — режим Agent расходует значительное количество токенов. Одна сложная сессия способна стоить несколько долларов.
- Задержка отклика — агентские операции требуют нескольких round-trip к API модели, что занимает секунды и минуты.
- Зависимость от сети — работа требует стабильного соединения с серверами Anthropic или OpenAI.
- Конфликты индекса — при частых переключениях между ветками индекс может временно опережать файловую систему.
Ограничения Claude
- Отсутствие прямого доступа к файлам в веб-интерфейсе — пользователь загружает файлы вручную, модель работает с их содержимым в контексте.
- Обрезание длинного вывода — при генерации больших объёмов кода модель способна остановиться на середине, требуя продолжения.
- Галлюцинации в нишевых библиотеках — модель способна выдумывать API малоизвестных пакетов, особенно в свежих версиях.
- Ограниченная память между сессиями — каждый новый диалог начинается с чистого контекста, за исключением данных в Projects.
Ограничения Claude Code
- Полномочия в системе — агент работает с правами текущего пользователя. Ошибочная команда
rm -rfилиDROP TABLEвыполняется с этими же правами. - Расход токенов — длительная сессия агента с десятками вызовов инструментов способна использовать сотни тысяч токенов.
- Требовательность к описанию задачи — расплывчатые формулировки приводят к циклическим правкам без достижения результата.
Эффективное внедрение ИИ в рабочий процесс
Для того чтобы искусственный интеллект стал полноценным инструментом поддержки разработчика (copilot), а не источником проблем, необходимо соблюдать определенные правила использования.
Качественный контекст и промпт-инжиниринг
Точность ответа нейросети напрямую зависит от объема и качества предоставленной информации. Чем больше деталей пользователь передает системе, тем точнее будет результат.
Элементы качественного промпта:
- Описание конкретной задачи;
- Указание технологического стека (язык, фреймворк, версия);
- Примеры входных и выходных данных;
- Ссылки на документацию или спецификации;
- Ограничения по производительности или безопасности.
Пример плохого запроса: "Напиши функцию для сортировки."
Пример хорошего запроса: "Напиши функцию на Python для сортировки списка словарей по ключу 'date' в порядке убывания. Используй стандартную библиотеку datetime. Обработай случай, если поле 'date' отсутствует в словаре, игнорируя такие элементы."
Готовые шаблоны с построчным разбором (код, traceback, diff, Cursor) — Prompt engineering — библиотека промптов.
Декомпозиция задач
Разработка сложных систем требует пошагового подхода. Попытка заставить ИИ написать целое приложение целиком часто приводит к получению некорректного или неполного кода.
Стратегия декомпозиции:
- Определение архитектуры и основных компонентов системы;
- Проектирование интерфейсов взаимодействия между модулями;
- Реализация отдельных функций и классов;
- Интеграция модулей и проверка совместимости;
- Тестирование и отладка.
Каждый этап должен быть сформулирован как отдельная задача для ИИ. Это позволяет получать предсказуемый результат и легко вносить правки.
Обязательный Code Review
Генерируемый код требует обязательной проверки человеком. Слепое копирование предложений нейросети может привести к внедрению логических ошибок, уязвимостей безопасности или несоответствия стандартам проекта.
Правила проверки сгенерированного кода:
- Анализ соответствия архитектуре проекта;
- Проверка на наличие уязвимостей (XSS, SQL-инъекции, инъекции команд);
- Оценка читаемости и соблюдения стилевых соглашений;
- Тестирование граничных условий и исключительных ситуаций;
- Сравнение с аналогичными решениями в базе знаний проекта.
Разработчик несет полную ответственность за качество кода, который попадает в продукт, независимо от источника его создания.
Осторожное использование Cursor и ИИ-агентов в разработке
Cursor — это интегрированная среда разработки, построенная поверх VS Code и оснащённая встроенными возможностями генерации, автодополнения и редактирования кода посредством больших языковых моделей. Среда предоставляет режимы чата с кодовой базой, инлайновые правки через сочетание клавиш, предсказание следующих изменений и запуск агентов, способных самостоятельно вносить правки в несколько файлов, выполнять команды терминала и интерпретировать результаты.
ИИ-агент в разработке — это программный компонент, получающий от модели право выполнять последовательность действий — читать файлы, писать код, запускать сборку, тесты, линтеры, обращаться к внешним сервисам. Агент функционирует в цикле "наблюдение — действие — оценка" и принимает решения о следующих шагах без прямого участия человека на каждом этапе.
Инструменты этого класса ускоряют рутину, помогают в поиске ошибок и прототипировании. Одновременно они вносят в процесс разработки новые категории рисков, которые требуют явного осознания и контроля. Далее рассматриваются основные угрозы, источники их возникновения и подходы к снижению последствий.
Природа рисков при работе с ИИ-ассистентами
Риски делятся на несколько групп в зависимости от области воздействия:
- конфиденциальность и утечки данных — исходный код, секреты, внутренняя архитектура покидают периметр организации;
- качество генерируемого кода — модель выдаёт синтаксически корректный, но логически или архитектурно ошибочный код;
- галлюцинации — модель ссылается на выдуманные библиотеки, методы, параметры и версии;
- лицензионная чистота — сгенерированные фрагменты воспроизводят защищённый код из обучающей выборки;
- безопасность — модель генерирует уязвимые конструкции — SQL-инъекции, небезопасную десериализацию, слабую криптографию;
- архитектурная деградация — решения модели противоречат принятой архитектуре проекта, создают скрытые связи;
- деградация навыков разработчика — постоянное делегирование модели снижает способность инженера самостоятельно проектировать и отлаживать;
- зависимость от вендора — проект становится завязан на специфичные промпты, форматы конфигурации и особенности конкретного ассистента.
Конфиденциальность и передача кода вовне
Cursor и аналогичные инструменты по умолчанию отправляют содержимое редактируемых файлов, выделенные фрагменты, историю изменений и контекстные запросы на удалённые серверы провайдера модели. Вместе с кодом могут уйти:
- учётные данные, ключи API, токены, пароли, зашитые в конфигурации;
- внутренние адреса хостов, имена баз данных, схемы таблиц;
- коммерческая логика, алгоритмы расчёта, проприетарные формулы;
- персональные данные пользователей, присутствующие в тестовых fixtures;
- комментарии с внутренней перепиской и решениями архитектурного комитета.
Внимание Корпоративные политики безопасности большинства крупных компаний запрещают передачу исходного кода на внешние сервисы без явного разрешения. Использование Cursor в таком окружении требует активации режима Privacy Mode или применения локальной модели.
Privacy Mode в Cursor — это режим, при котором провайдер обязуется сохранять код только в течение сессии и удалять его после завершения, а также воздерживаться от использования переданных данных для дообучения моделей. Режим снижает риски, но сохраняет факт передачи данных через границу организации.
Подходы к контролю:
- Включать Privacy Mode для всех корпоративных проектов.
- Добавлять файлы
.cursorignoreи.cursorindexingignoreдля исключения конфиденциальных директорий из индекса. - Использовать
.envвне репозитория и подгружать секреты из менеджера секретов (Vault, AWS Secrets Manager). - Настраивать pre-commit хуки для блокировки коммитов с токенами и паролями.
- Разворачивать локальные модели (Llama, CodeLlama, DeepSeek Coder) для работы с закрытым кодом.
- Заключать корпоративные соглашения с провайдером, фиксирующие режим обработки данных.
Пример .cursorignore:
# Секреты и конфигурации
.env
.env.*
secrets/
**/credentials.json
# Внутренние тестовые данные
fixtures/production/
dumps/
# Приватные модули
internal/billing/
internal/compliance/
Галлюцинации и выдуманные сущности
Языковые модели генерируют текст, статистически правдоподобный для данной последовательности токенов. Модель способна выдать код, ссылающийся на:
- функции и методы, отсутствующие в используемой библиотеке;
- пакеты, опубликованные под похожим названием, но не существующие в репозитории;
- параметры функций, которые были в старых версиях и удалены в текущей;
- выдуманные URL API, endpoint-ы, заголовки HTTP;
- несуществующие классы стандартной библиотеки.
Осторожно Агент, выполняющий установку пакетов по собственному усмотрению, способен установить вредоносный или захваченный пакет, имя которого модель "вспомнила" из обучающей выборки. Это один из векторов supply-chain атак.
Пример сгенерированного кода с галлюцинацией:
import pandas as pd
# Модель предлагает метод, которого нет в pandas
df = pd.read_csv("data.csv")
df = df.remove_duplicates() # Правильно: drop_duplicates()
df = df.to_csv_clean("out.csv") # Такого метода не существует
Разбор:
remove_duplicates()— метод отсутствует, правильное имяdrop_duplicates();to_csv_clean()— метод выдуман моделью, стандартный вариантto_csv().
Такой код проходит первичный визуальный осмотр, но падает на этапе выполнения. В больших файлах, где модель генерирует сотни строк за раз, отдельные ошибки теряются в общем объёме.
Контроль галлюцинаций:
- Запускать линтер и статический анализатор (mypy, eslint, pylint) после каждой сгенерированной порции кода.
- Проверять existence каждой импортируемой функции в официальной документации.
- Фиксировать версии зависимостей в
requirements.txt,package-lock.json,go.sum. - Использовать приватный прокси-репозиторий (Nexus, Artifactory) для установки пакетов.
- Требовать от модели приводить ссылки на документацию при использовании неочевидных API.
Качество кода и скрытые дефекты
Модель оптимизирует правдоподобие текста, а не корректность программы. Сгенерированный код часто демонстрирует характерные проблемы:
| Категория | Проявление |
|---|---|
| Обработка ошибок | Пустые except, проглатывание исключений, отсутствие повторных попыток |
| Работа с ресурсами | Открытые файлы, соединения без finally и контекстных менеджеров |
| Параллелизм | Состояния гонки, отсутствие блокировок, небезопасные глобальные структуры |
| Валидация | Отсутствие проверок входных данных, доверие внешним источникам |
| Именование | Переменные data, result, temp, x без семантики |
| Декомпозиция | Функции на 200+ строк, смешение ответственностей |
| Тесты | Поверхностные тесты, проверяющие только счастливый путь |
| Документация | Устаревшие комментарии, не соответствующие текущей логике |
Пример сгенерированного кода с проблемами:
import requests
def fetch_user_data(user_id):
try:
response = requests.get(f"https://api.example.com/users/{user_id}")
data = response.json()
return data
except:
return None
Разбор проблем:
except:без указания типа перехватывает все исключения, включаяKeyboardInterrupt;- отсутствие проверки
response.status_codeприводит к попытке разобрать JSON из ответа 500; user_idпопадает в URL без валидации, что открывает путь к инъекциям на стороне сервера;- таймаут запроса не задан, поток может зависнуть на неопределённый срок;
- возврат
Noneсмешивается с валидными данными и требует дополнительных проверок у вызывающего кода.
Исправленный вариант:
Код ITЗагрузка примера кода…
Уязвимости безопасности в сгенерированном коде
Модели обучались на огромных объёмах кода, включая устаревшие и уязвимые образцы. В результате модель воспроизводит паттерны, характерные для OWASP Top 10:
- SQL-инъекции через конкатенацию строк;
- межсайтовый скриптинг при выводе пользовательского ввода без экранирования;
- небезопасная десериализация через
pickle.loadsилиyaml.loadбезLoader; - использование устаревших алгоритмов (
MD5,SHA1,DES); - хардкод секретов и учётных данных;
- небезопасная генерация случайных чисел через
randomвместоsecrets; - отсутствие rate limiting и защиты от brute-force.
Пример уязвимого сгенерированного кода:
Код ITЗагрузка примера кода…
Разбор уязвимостей:
f"..."с подстановкойusernameпозволяет злоумышленнику выполнить произвольный SQL;pickle.loads()на неподписанных данных позволяет выполнить произвольный код при десериализации;random.choice()использует детерминированный ГПСЧ, токены предсказуемы.
Контроль уязвимостей:
- Запускать SAST-инструменты (Bandit, Semgrep, SonarQube, CodeQL) на каждом коммите.
- Интегрировать проверку зависимостей (Snyk, Dependabot, Trivy).
- Требовать от модели использовать параметризованные запросы и prepared statements.
- Проводить security-ревью для каждого сгенерированного модуля, работающего с внешним вводом.
- Настраивать pre-commit хуки с проверками безопасности.
Лицензионные риски
Модели обучались на публичных репозиториях, включая проекты под лицензиями GPL, AGPL, SSPL, обладающими эффектом вирусного распространения. Модель способна воспроизвести фрагмент кода, близкий к оригиналу, без указания источника.
Последствия:
- включение GPL-кода в проприетарный проект обязывает раскрыть исходники всего проекта;
- воспроизведение фрагментов под AGPL при использовании в серверном ПО активирует обязательство публикации;
- копирование кода с сохранёнными комментариями и именами авторов нарушает требование сохранения атрибуции (MIT, BSD, Apache);
- судебные иски от правообладателей обучающих данных уже находятся в производстве в нескольких юрисдикциях.
Подходы к минимизации:
- Использовать инструменты сканирования на совпадения (GitHub Copilot Code Similarity, FOSSA, Black Duck).
- Включать в Cursor фильтр совпадений с публичным кодом.
- Вести журнал промптов и сгенерированных фрагментов для последующего аудита.
- Формулировать промпты так, чтобы модель писала код с нуля по спецификации, а не воспроизводила известные реализации.
- Требовать от модели указывать источники вдохновения при генерации сложных алгоритмов.
Слепая зависимость и деградация навыков
Постоянное делегирование рутинных задач модели формирует у разработчика привычку принимать сгенерированный код без глубокого анализа. Это приводит к нескольким эффектам:
- снижение способности к самостоятельному проектированию — инженер разучивается выстраивать архитектуру с чистого листа;
- утрата навыка отладки — при возникновении сложной ошибки разработчик обращается к модели вместо изучения трейсов, логов и состояния памяти;
- поверхностное знание языка — инженер использует конструкции, предложенные моделью, без понимания их семантики и ограничений;
- неспособность провести код-ревью — ревьюер, привыкший к ИИ-ассистированию, пропускает логические ошибки в чужом коде;
- иллюзия продуктивности — большое количество сгенерированного кода создаёт ощущение прогресса при росте технического долга.
Совет Сохраняйте регулярные сессии разработки без ИИ-ассистента. Пишите ключевые модули, алгоритмы и архитектурные решения самостоятельно, чтобы поддерживать навык глубокого анализа.
Признаки формирующейся зависимости:
- тревога при отсутствии доступа к Cursor;
- автоматическое принятие первого предложенного варианта без чтения;
- неспособность объяснить, почему сгенерированный код работает;
- рост количества багов, которые обнаруживаются только в production;
- затруднения при написании кода на белой доске во время собеседований.
Архитектурные последствия
ИИ-агенты работают на уровне отдельных файлов и функций. Они слабо учитывают глобальную архитектуру проекта — слои, границы модулей, принципы SOLID, принятые паттерны. Агент способен:
- создать прямую зависимость между слоем представления и слоем данных;
- продублировать логику, уже существующую в другом модуле;
- ввести новую абстракцию, противоречащую принятой в проекте;
- добавить синхронный вызов в асинхронный контекст;
- нарушить инварианты доменной модели.
Пример архитектурного нарушения, которое может сгенерировать агент:
Код ITЗагрузка примера кода…
В многослойной архитектуре слой представления обязан обращаться к сервисному слою, который работает с репозиторием. Агент, получивший задачу "сделать endpoint для заказа", решает её минимальным путём, игнорируя архитектурные соглашения.
Контроль архитектурных последствий:
- Явно описывать архитектуру проекта в файле
.cursorrulesилиARCHITECTURE.md. - Включать в промпт контекст о слоях, модулях и принятых паттернах.
- Проводить архитектурные ревью для изменений, затрагивающих несколько модулей.
- Использовать ArchUnit-подобные тесты, автоматически проверяющие соблюдение границ слоёв.
- Фиксировать правила именования и структуры в конфигурации линтеров.
Пример .cursorrules:
# Архитектура проекта
- Проект использует слоистую архитектуру: presentation -> application -> domain -> infrastructure
- Слой presentation обращается только к application
- Слой domain не зависит ни от какого другого слоя
- Все обращения к БД проходят через репозитории из infrastructure
- Асинхронные операции оформляются через async/await, блокирующий I/O запрещён
- Для ошибок используются классы из domain.exceptions
- Имена сервисов оканчиваются на Service, репозиториев — на Repository
Риски, специфичные для ИИ-агентов
Агенты обладают большими возможностями, чем обычные ассистенты автодополнения. Они запускают команды терминала, устанавливают пакеты, редактируют множество файлов, создают коммиты. Это порождает отдельные категории рисков:
Неконтролируемое изменение состояния среды. Агент способен выполнить rm -rf, удалить миграции, перезаписать конфигурационный файл, изменить переменные окружения.
Циклические правки. Агент, столкнувшись с ошибкой теста, способен войти в цикл, где каждая правка порождает новую ошибку. За сессию накапливаются сотни коммитов, откатывать которые становится затруднительно.
Утечка контекста между задачами. Агент, работающий над задачей A, способен использовать знания из ранее прочитанных файлов, относящихся к задаче B, и смешивать логику.
Самомодификация. Агент, получивший доступ к конфигурациям CI/CD, способен изменить пайплайн сборки, ослабить проверки, отключить тесты для "ускорения".
Финансовые потери. Каждый запрос к модели стоит денег. Агент в цикле способен потратить значительную сумму за короткое время.
Таблица специфичных рисков агентов:
| Риск | Последствие | Мера контроля |
|---|---|---|
| Выполнение shell-команд | Удаление данных, изменение среды | Песочница, whitelist команд |
| Установка пакетов | Supply-chain атака | Приватный репозиторий |
| Массовые правки | Неконтролируемый diff | Частые коммиты, ветки |
| Отключение тестов | Пропуск дефектов | Защита файлов конфигурации CI |
| Циклические правки | Рост техдолга, расход токенов | Лимит итераций, ручная остановка |
| Коммит от имени разработчика | Нарушение авторства | Подписи, отдельные аккаунты |
Vendor lock-in и переносимость
Проекты, интенсивно использующие Cursor, накапливают артефакты, специфичные для этой среды:
- файлы
.cursorrulesс правилами поведения модели; - промпты, оптимизированные под конкретную модель;
- сгенерированные скрипты, требующие определённого контекста;
- интеграции с Cursor Tab, Composer, Agent.
При необходимости перехода на другую среду (Windsurf, Zed, GitHub Copilot, JetBrains AI) команда сталкивается с необходимостью переписывать конфигурации, переобучать промпты, адаптировать пайплайны. Проект оказывается связан с конкретным вендором сильнее, чем при использовании обычной IDE.
Подходы к сохранению переносимости:
- Хранить правила проекта в универсальных форматах:
ARCHITECTURE.md,CONTRIBUTING.md,.editorconfig, конфиги линтеров. - Дублировать
.cursorrulesв виде документации, пригодной для любой модели. - Избегать использования специфичных расширений Cursor в критичных процессах.
- Разрабатывать промпты в виде отдельных шаблонов, переносимых между инструментами.
- Периодически пробовать альтернативные инструменты на задачах проекта.
Стратегии безопасного использования
Эффективная работа с ИИ-ассистентами строится на наборе дисциплинарных практик:
Разделение режимов работы. Черновые прототипы, разовые скрипты, учебные задачи допускают активное использование генерации. Критичные модули, работающие с деньгами, персональными данными, криптографией, пишутся и ревьюятся вручную.
Явные границы доверия. Команда фиксирует категории кода, где сгенерированные фрагменты требуют обязательного дополнительного ревью:
- работа с внешним вводом;
- аутентификация и авторизация;
- транзакции и финансовые операции;
- криптография и хеширование;
- сетевые взаимодействия;
- работа с файловой системой.
Инкрементальная генерация. Модель получает небольшие, чётко сформулированные задачи. Большие запросы разбиваются на этапы. Каждый этап проверяется перед переходом к следующему.
Документирование промптов. Ключевые промпты, использованные при генерации архитектурных решений, сохраняются в комментариях к коду или в документации проекта. Это обеспечивает воспроизводимость и облегчает аудит.
Обязательные автоматические проверки. Каждый коммит, содержащий сгенерированный код, проходит:
- линтеры стиля;
- статический анализ;
- проверку типов;
- юнит-тесты;
- SAST-сканеры;
- проверку лицензионной чистоты.
Ручное ревью. Код-ревьюер относится к сгенерированному коду с тем же вниманием, что и к написанному человеком, с дополнительной проверкой на галлюцинации и лицензионные совпадения.
Регулярный аудит. Команда периодически анализирует, какая доля кодовой базы сгенерирована, какие модули требуют переписывания, где накопились архитектурные нарушения.
Чек-лист самопроверки при использовании ИИ-ассистента
Перед принятием сгенерированного кода разработчик проходит по списку:
- Код прочитан и понят построчно
- Все вызываемые функции существуют в используемых версиях библиотек
- Внешний ввод валидируется и санитизируется
- Ресурсы (файлы, соединения, блокировки) освобождаются корректно
- Исключения обрабатываются явно, без пустых
except - Отсутствуют зашитые секреты и учётные данные
- Алгоритмы криптографии соответствуют современным стандартам
- Код соответствует архитектуре проекта и принятым соглашениям
- Написаны тесты, покрывающие счастливый путь и основные ошибки
- Проверена лицензионная чистота фрагментов
- Пройдены линтеры и статические анализаторы
- Понятны последствия изменения для смежных модулей
Базовый разбор HTTP и HTTPS находится в отдельной статье — HTTP как основа веб-интеграций.