/
Вопросы и ответы
/
Промт-инжиниринг
/

Промпты для генерации кода

Промпты для генерации кода

11 часов назад

Никита Вихров

Ответы

0

Промпты для генерации кода

Промпты для кода — отдельная история. Общие советы по промптингу работают, но есть специфика: нужно передать контекст стека, соглашения проекта, ограничения. Без этого модель пишет «правильный» код, который не вписывается в твой проект.


Минимальный промпт — плохой результат

from anthropic import Anthropic

client = Anthropic()

# Так делают большинство — и получают generic-код
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Напиши функцию для отправки email"}]
)

# Модель напишет что-то рабочее, но:
# - не знает какую библиотеку ты используешь
# - не знает как обрабатывать ошибки в твоём проекте
# - не знает нужна ли типизация
# - не знает стиль кода в команде

Хороший промпт для кода — семь компонентов

CODE_PROMPT_TEMPLATE = """<context>
Проект: FastAPI бэкенд для SaaS-приложения
Язык: Python 3.11
Стек: FastAPI, SQLAlchemy 2.0, PostgreSQL, Pydantic v2
Стиль: async/await везде, type hints обязательны, docstring для публичных функций
Обработка ошибок: кастомные исключения из app/exceptions.py, raise не try/except в бизнес-логике
Тесты: pytest, каждая функция покрывается тестами
</context>

<existing_code>
# app/exceptions.py
class EmailDeliveryError(AppException):
    status_code = 503
    detail = "Email delivery failed"

# app/models/user.py
class User(Base):
    __tablename__ = "users"
    id: Mapped[int] = mapped_column(primary_key=True)
    email: Mapped[str] = mapped_column(String(255), unique=True)
    is_verified: Mapped[bool] = mapped_column(default=False)
</existing_code>

<task>
Напиши сервис для отправки верификационного email.
Требования:
- Принимает User, генерирует токен, сохраняет в Redis с TTL 24ч
- Отправляет через SMTP (настройки из settings.py)
- При ошибке SMTP — raise EmailDeliveryError
- Токен — UUID4, хранится как f"verify:{user.id}:{token}"
</task>

<output>
Напиши:
1. app/services/email_verification.py — сервис
2. tests/test_email_verification.py — тесты (используй pytest-asyncio, мокай Redis и SMTP)
</output>"""

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=2048,
    messages=[{"role": "user", "content": CODE_PROMPT_TEMPLATE}]
)

Передавай реальный код, а не описание

Описание стека не заменяет примеры кода. Модель адаптируется под твой стиль когда видит реальные файлы:

# Плохо — описание
"Используем паттерн репозитория для работы с БД"

# Хорошо — пример
existing_code = open("app/repositories/user_repo.py").read()

prompt = f"""Вот существующий репозиторий для примера стиля:
{existing_code}

Напиши аналогичный репозиторий для модели Order."""

Промпт для рефакторинга — называй принцип

refactor_prompt = """<code>
{код}
</code>

<problems>
1. Функция нарушает SRP: делает валидацию, запрос к API и запись в БД
2. Нет обработки HTTP-ошибок от внешнего API
3. Magic string "active" в строке 12 — вынести в Enum
</problems>

Рефакторни код, исправив только эти три проблемы.
Не меняй логику, не добавляй новый функционал."""

Важно: «только эти три проблемы». Без ограничения модель перепишет всё по-своему.


Промпт для дебага — давай контекст ошибки

debug_prompt = """<error>
Traceback (most recent call last):
  File "app/api/orders.py", line 45, in create_order
    await order_service.create(data)
  File "app/services/order_service.py", line 23, in create
    await db.flush()
sqlalchemy.exc.IntegrityError: DETAIL: Key (user_id)=(999) is not present in table "users"
</error>

<code>
{код функции create}
</code>

<context>
- user_id приходит из JWT токена
- Токен валидируется в middleware
- Ошибка воспроизводится стабильно с user_id=999
</context>

Найди причину и предложи исправление."""

Что даёт хороший промпт для кода

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


На курсе «ИИ для разработчиков» на Хекслете разбирают именно такую практику: как правильно ставить задачи агентам, управлять контекстом и получать код, который работает в реальных проектах.

11 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845