Лучшие практики промптов Codex
Освойте техники составления промптов, чтобы Codex точнее понимал ваши намерения и эффективно выполнял задачи.
Базовая структура промпта
Хороший промпт включает следующие элементы:
Базовые элементы
| Элементы | Описание | Пример |
|---|---|---|
| Описание задачи | Что вы хотите сделать | "Реализовать функциональность входа пользователя" |
| Контекст | Связанная фоновая информация | "Использовать существующий auth-модуль" |
| Ограничения | Ограничения и требования | "Должен быть совместим с существующими APIs" |
| Ожидаемый результат | Конкретный вывод | "Вернуть JWT-токен" |
Структурированный промпт
Пример полного промпта
Реализовать конечную точку API для входа пользователя
# Контекст
- В проекте используется фреймворк FastAPI
- Существующий модуль auth обрабатывает логику аутентификации
- В базе данных используется PostgreSQL
# Ограничения
- Использовать существующую утилиту JWT для генерации токена
- Пароли проверяются с помощью bcrypt
- Необходимо добавить логирование запросов
# Ожидаемый результат
- Путь: POST /api/auth/login
- Тело запроса: {"email": "...", "password": "..."}
- Успешный ответ: {"token": "...", "user": {...}}
- Ответ с ошибкой: {"error": "..."}
Принцип декомпозиции задачи
Сложные задачи следует разбивать на небольшие шаги и выполнять шаг за шагом.
Принципы декомпозиции
- У каждого шага есть чёткая цель
- Зависимости между шагами ясны
- Проверяйте результаты после каждого шага
- Можно откатиться при возникновении проблем
Пример декомпозиции
Декомпозиция задачи
"Реализовать полноценную систему аутентификации пользователей"
# Разбить на небольшие задачи
Шаги1:"Спроектировать структуру данных системы аутентификации, включая таблицу пользователей и таблицу токенов"
Шаги2:"Реализовать функциональность регистрации пользователей, включая шифрование и проверку пароля"
Шаги3:"Реализовать функциональность входа пользователя и генерацию JWT-токена"
Шаги4:"Реализовать middleware проверки токена"
Шаги5:"Реализовать функциональность выхода пользователя"
Шаги6:"Написать тесты для системы аутентификации"
Шаги7:"Обновить документацию API"
Использование режима /plan может помочь Codex автоматически разбивать сложные задачи.
Предоставьте контекстную информацию
Достаточный контекст помогает Codex более точно понимать состояние проекта.
Ключевой контекст
| Type | Описание | Когда предоставлять |
|---|---|---|
| Технологический стек | Версии фреймворка, языка, библиотек | Задачи, выполняемые впервые, или новые модули |
| Структура проекта | Расположение модуля, соглашения об именовании | Затрагивает изменения в нескольких файлах |
| Существующий код | Связанные функции, классы, модули | Требуется совместимость или расширение |
| Ограничения | Требования к совместимости и производительности | Есть особые ограничения |
Способы предоставления контекста
Предоставьте контекст
"Проект использует Django 4.2, а база данных — PostgreSQL 15"
# Ссылка на существующий код
Обратитесь к логике валидации в src/utils/validator.py
# Укажите файл
Измените src/api/users.py, сохраняя стиль, согласованный с другими API
# AGENTS.md предоставляется автоматически
Создайте файл AGENTS.md, Codex автоматически прочитает правила проекта
Обработка сообщений об ошибках
Codex может быстро находить проблемы по сообщениям об ошибках.
Предоставьте полную информацию об ошибке
Обработка ошибок
При выполнении тестов произошла ошибка:
AssertionError: Ожидался статус 200, но получен 500
at test_login.py:45
in test_successful_login
Полная трассировка:
...
Проанализируйте причину и исправьте её
# Помощь со скриншотами
Прикрепите скриншоты ошибки, Codex может просмотреть их напрямую
Элементы сообщения об ошибке
- Типы ошибок и сообщения
- Полная трассировка стека
- Условия срабатывания (какая операция была выполнена)
- Ожидаемый результат и фактический результат
Ввод изображений
Codex поддерживает ввод изображений, подходит для передачи визуальной информации.
Применимые сценарии
| Сценарии | Описание |
|---|---|
| Скриншот ошибки | Скриншоты, показывающие интерфейс ошибки или логи |
| Дизайн-макет | Преобразовывать макеты UI-дизайна в код |
| Схема архитектуры | Объясните схему архитектуры и реализуйте её |
| Диаграмма данных | Проанализируйте данные диаграммы |
Способ ввода изображений
Использование изображений
codex -i screenshot.png
codex --image design.png Реализуйте страницу на основе макета дизайна
# App/IDE
Вставляйте или перетаскивайте изображения непосредственно в область беседы
# Несколько изображений
codex -i img1.png -i img2.png Сравните различия между этими двумя макетами дизайна
Итеративная оптимизация
Постепенно улучшайте качество кода с помощью итераций.
Итерационный процесс
- Codex завершает начальную реализацию
- Проверьте результаты, предложите улучшения
- Codex корректирует на основе обратной связи
- Проверьте эффект улучшения
- Повторяйте, пока не будете удовлетворены
Итеративная оптимизация
Реализуйте API списка пользователей с поддержкой пагинации
# Проверьте и предложите улучшения
Добавьте функциональность сортировки для поддержки сортировки по времени создания
# Продолжайте оптимизацию
Добавьте функциональность поиска для поддержки поиска по имени пользователя
# Оптимизация производительности
Оптимизируйте производительность запросов и добавьте индексы
Избегайте двусмысленности
Четкие промпты уменьшают недопонимание и переделки.
Примеры неоднозначности
Избегайте двусмысленности
Измените ту функцию
# Чёткий промпт (хорошо)
Измените функцию format_date в src/utils/helper.py
# Расплывчатый промпт (плохо)
Сделайте это быстрее
# Чёткий промпт (хорошо)
Оптимизируйте функцию query_users, чтобы сократить время запроса с 500ms до менее чем 100ms
# Расплывчатый промпт (плохо)
Добавьте возможность
# Чёткий промпт (хорошо)
Добавьте в user API возможность пакетного удаления, принимающую список ID пользователей
Используйте справочные примеры
Предоставьте справочный код или документацию, чтобы помочь Codex понять ожидаемый стиль.
Предоставьте справочные материалы
Ориентируйтесь на стиль src/api/products.py при реализации API пользователя
# Ссылка на документацию
Реализуйте в соответствии со спецификацией OpenAPI docs/api-spec.yaml
# Справочный пример
Верните ответ в следующем формате:
{
'success': true,
'data': {...},
'message': '...'
}"
Общие шаблоны промптов
Шаблон разработки функциональности
Разработка функциональности
Требования:
- Использовать [технологию/библиотеку]
- Быть совместимым с [существующей системой]
- Включить [обработку крайних случаев]
- Вернуть [формат ответа]
Ссылка: [путь к аналогичной существующей функции]
Шаблон исправления ошибки
Исправление ошибок
Условия возникновения: [обстоятельства, при которых это происходит]
Сообщение об ошибке:
[Полный стек ошибки]
Ожидаемое поведение: [каким должен быть правильный результат]
Пожалуйста, проанализируйте причину и исправьте её, не затрагивая другие функции.
Шаблон код-ревью
Ревью кода
# Пример
/review src/auth/ for проблемы безопасности
/review HEAD~5..HEAD for регрессии производительности
Сводка лучших практик
Основные принципы
- Будьте конкретны и ясны, избегайте расплывчатых описаний
- Предоставьте достаточный контекст
- Разбивайте сложные задачи для выполнения
- Итеративная оптимизация, постепенное улучшение
- Проверяйте результаты, чтобы убедиться в корректности
Советы по эффективности
- Используйте AGENTS.md, чтобы сократить повторяющиеся объяснения.
- Используйте Skills для инкапсуляции общих промптов.
- Используйте изображения для передачи визуальной информации
- Предоставьте полную информацию об ошибке
ЧАВО
Вопрос: Что делать, если Codex понимает неправильно?
Дайте более чёткое описание, добавьте контекст или используйте справочные примеры.
Вопрос: Как заставить Codex следовать соглашениям проекта?
Создайте файл AGENTS.md, чтобы определить соглашения, и Codex будет автоматически им следовать.
Вопрос: Как обрабатывать сложные задачи?
Используйте режим /plan, чтобы составить план, выполнять шаг за шагом и проверять.
Вопрос: Каковы ограничения ввода изображений?
Поддерживаются форматы PNG, JPG, WebP; рекомендуется умеренное разрешение (не слишком маленькое и не слишком большое).
Другие расширения