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

Генерация кода — ChatGPT, Gemini и DeepSeek

Разработчику

Теория LLM — в больших языковых моделях; здесь — рабочий цикл: выбрать сервис, сформулировать задачу, получить код, проверить и встроить в проект. Антипаттерн "копировать без понимания" — вайб-кодинг; однотипный мусорный вывод — нейрослоп.


Теоретическая база генерации кода

LLM генерирует код как последовательность токенов по вероятностной модели:

P(next_token | prompt, history, system_rules).

Отсюда следуют три практических вывода:

  1. Качество ответа определяется качеством контекста. Если контекст расплывчатый, модель оптимизирует "правдоподобный" код, а не "правильный для вашего проекта".
  2. Детерминизм ограничен. Даже при низкой температуре возможны различия между прогонами, если меняется окружение запроса или версия модели.
  3. Модель аппроксимирует инженерный стиль из корпуса. Она уверенно воспроизводит паттерны, которые часто встречались в обучении, и хуже работает на редких доменных соглашениях команды.

В терминах инженерии это означает: промпт играет роль временной спецификации, а тесты и линтеры играют роль контракта корректности.


Что влияет на качество кода

Качество генерации удобно оценивать по четырём осям:

ОсьВопрос к ответуТипичный сбой
СемантикаРешает ли код исходную задачу?"Похоже на решение", но ломает edge-case
НадёжностьУчитывает ли ошибки, таймауты, null-сценарии?Оптимистичный код без обработки отказов
СопровождаемостьПонятен ли код команде через 6 месяцев?Слишком "умный" и хрупкий рефакторинг
БезопасностьНет ли инъекций, утечек, небезопасных дефолтов?SQL без параметризации, логирование секретов

Поэтому "код сгенерировался без ошибки" не является признаком качества. Формальная проверка нужна даже для тривиальных модулей.


Три уровня помощи

УровеньИнструментКогда уместен
ЧатChatGPT, Gemini, DeepSeek в браузереЧерновик функции, объяснение чужого кода, рефакторинг фрагмента
IDE с контекстомCursor, GitHub Copilot, JetBrains AIПравки в открытом репозитории, многофайловые изменения
АгентCursor Agent, Claude Code, Codex"Собери MVP", миграция, тесты + запуск (с человеческим контролем)

Архитектура агентов — Агенты ИИ. Перед запуском shell от агента — Опасные скрипты.


ChatGPT (OpenAI)

Сильные стороны для кода

  • Широкий стек языков и фреймворков в обучающем корпусе.
  • Режимы Canvas / правка файла в чате (удобно для одного модуля).
  • API (gpt-4o, o-series для рассуждений) — основа для своих ботов и CI.

Ограничения

  • Контекст ограничен; целый монорепозиторий в один промпт не поместится.
  • Секреты и внутренний код — только в корпоративном контуре или без PII; иначе ответственное использование.

Типичный промпт для функции

Роль: senior Python-разработчик.
Задача: функция validate_email(s: str) -> bool по RFC 5322 (упрощённо).
Ограничения: только stdlib, type hints, docstring на русском.
Формат ответа: один блок кода + 3 pytest-теста.
Если вход None — ValueError.

Параметры API для кода: temperature 0.1–0.3, top_p ~0.9, явный max_tokens и response_format при JSON. Шпаргалка по всем полям — Параметры генерации LLM.


Google Gemini

Сильные стороны

  • Длинный контекст (в Pro-версиях — миллионы токенов): целый файл конфигурации, лог сборки, несколько модулей в одном запросе.
  • Интеграция с Google Cloud Vertex AI — единый биллинг и политики для компании.
  • Мультимодальность: скрин UI + "сгенерируй CSS под этот макет".

Ограничения

  • Качество на редких стеках (1С, legacy Delphi) может уступать лидерам; ответ всегда сверяйте с документацией вендора.
  • Бесплатный веб-чат и платный API — разные квоты и политики хранения данных.

Когда выбирать Gemini

  • Нужно "скормить" большой diff или PDF спецификации.
  • Проект уже в GCP (Artifact Registry, Cloud Run).
  • Команда работает в Google Workspace и использует Gemini в Docs/Sheets как черновик, код — в IDE.

Документация: Google AI Studio и Vertex AI.


DeepSeek

Сильные стороны

  • DeepSeek-Coder / DeepSeek-V3 — сильный баланс цена/качество для кода и математики.
  • Открытые веса и API: удобно для локального запуска и регионов с требованием суверенности.
  • DeepSeek-R1 (reasoning) — цепочка рассуждений перед ответом; полезно для алгоритмов и разбора legacy.

Ограничения

  • Задержки и доступность API зависят от нагрузки; для продакшена закладывайте fallback-модель.
  • Юридические ограничения лицензии на веса — читайте актуальный текст перед коммерческим продуктом.

Локально и через API

ollama pull deepseek-coder:6.7b
ollama run deepseek-coder:6.7b

Подробнее — локальные модели.


Сравнение для ежедневной разработки

КритерийChatGPTGeminiDeepSeek
Черновик функции★★★★★★★★★★★★
Огромный контекст (лог, репо)★★★★★★★★★★★
Цена API (ориентир)вышесредняяниже
Локальный запуск весовчерез партнёровGemma★★★★★
Корпоративный контурAzure/OpenAIVertexon-prem + API

Одного "лучшего" сервиса для всех задач не существует: держите два (облачный + локальный или дешёвый API) и сравнивайте на своём стеке. Такой подход быстрее даёт стабильный результат, чем попытка подобрать универсальную модель "на все случаи".


Научный взгляд на различия моделей

Сравнение ChatGPT, Gemini и DeepSeek полезно проводить не по "общему впечатлению", а по воспроизводимому протоколу:

  • Фиксируйте датасет задач: 20–50 типичных задач вашего проекта.
  • Стандартизируйте промпт: одна структура входа для всех моделей.
  • Измеряйте метрики: pass@k по тестам, средняя латентность, стоимость 1 успешного решения.
  • Повторяйте замеры: минимум 3 прогона на каждую задачу.

Такой протокол превращает выбор модели из субъективного обсуждения в инженерное решение, которое можно защитить перед командой и бизнесом.


Рабочий цикл (не вайб-кодинг)

  1. Задача — вход, выход, граничные случаи, стек (версия Python, "без новых зависимостей").
  2. Контекст — существующий интерфейс, стиль проекта (приложите 30–80 строк эталона).
  3. Генерация — один модуль за раз; для агента — чеклист файлов.
  4. Reviewruff/eslint, unit-тест, поиск секретов в диффе.
  5. Коммит — вы автор; в сообщении можно пометить Co-authored-by политикой команды.
Секреты в промпте

API-ключи, пароли prod, персональные данные клиентов в публичный чат не отправляйте. Для корпоративного кода — только одобренный тенант (Copilot Enterprise, Vertex с DPA, локальный Ollama).


Критерии "готово к merge"

Практика показывает, что для AI-сгенерированного кода полезно ввести явный gate:

  • зелёный CI;
  • покрыты критичные ветки тестами;
  • нет новых high/critical уязвимостей в SAST;
  • код соответствует соглашениям команды;
  • понятен план отката.

Без этого команда накапливает "скрытый техдолг", который появляется через несколько спринтов в виде нестабильности и дорогой поддержки.


Промпт-шаблон для рефакторинга

Контекст: React 18 + TypeScript, проект на Vite.
Файл (фрагмент):
<вставка кода>

Задача: вынести логику фильтрации в хук useOrderFilter.
Сохранить поведение: тесты ниже должны проходить без изменений.
<вставка тестов>

Вывод: только diff в формате unified diff, без пояснений.

Такой формат снижает "лишнюю прозу" и упрощает применение патча. На практике это уменьшает число итераций "перегенерируй ответ", потому что модель сразу ограничена нужным типом вывода.


Связка с IDE-агентом (Cursor и аналоги)

Чат хорош для мысли; агент — для действий в дереве файлов.

ДействиеЧатАгент
Объяснить regexизбыточно
Добавить эндпоинт + тест + запись в OpenAPIчастично
npm install и правка 12 файлов✓ с лимитами

Правила для агента в репозитории (.cursor/rules, AGENTS.md) задают стиль кода и запреты — это продолжение промпт-инжиниринга. См. разработку ИИ-решений (промпты в коде, версионирование).


Что читать дальше


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").