Практические примеры Codex CLI

В этом разделе на практических примерах демонстрируются различные сценарии использования Codex CLI, которые помогут вам быстро освоить его применение в реальной разработке.


Написание кода

Пример 1: Создание новой возможности

Позвольте Codex создать для вас полноценный модуль функциональности:

Задача

Создайте функцию Python, которая принимает список строк и возвращает самую длинную строку и её позицию в индексе

Codex сгенерирует код, подобный следующему:

Сгенерированный код

def find_longest_string(strings):
    """
Найдите самую длинную строку в списке строк и её позицию в индексе.

    Аргументы:
strings: список строк

    Возвращает:
кортеж: (самая длинная строка, позиция в индексе)
Если список пуст, вернуть (None, -1)
    """

    if not strings:
        return None, -1

    longest = max(strings, key=len)
    index = strings.index(longest)

    return longest, index


# Пример теста
if __name__ == "__main__":
    test_list = ["apple", "banana", "cherry", "dragonfruit"]
    result, idx = find_longest_string(test_list)
    print(f"Самая длинная строка: {result}, индекс: {idx}")
    # Вывод: Самая длинная строка: dragonfruit, индекс: 3
Код, сгенерированный Codex, включает подробные строки документации и примеры тестов, и может использоваться напрямую.

Пример 2: Рефакторинг кода

Попросите Codex выполнить рефакторинг существующего кода:

Задача

Отрефакторите эту функцию, чтобы использовать генератор:
def get_squares(n):
    result = []
    for i in range(n):
        result.append(i * i)
    return result

Codex предоставит отрефакторенный код:

Отрефакторенный код

def get_squares(n):
    """
Сгенерировать квадратные числа от 0 до n-1.

    Аргументы:
n: количество квадратных чисел для генерации

    Порождает:
int: квадраты чисел от 0 до n-1
    """

    for i in range(n):
        yield i * i


# Пример использования
for square in get_squares(5):
    print(square)
# Вывод: 0, 1, 4, 9, 16

Ревью кода

Пример 1: Обзор проблем в коде

Попросите Codex проверить код и предложить улучшения:

Задача

Проанализируйте проблемы в следующем коде:
def process_data(data):
    result = []
    for item in data:
        if item['type'] == 'a':
            result.append(item['value'] * 2)
        elif item['type'] == 'b':
            result.append(item['value'] + 10)
        elif item['type'] == 'c':
            result.append(item['value'])
    return result

Codex проанализирует и предоставит отчёт о проверке:

## 代码审查报告

### 问题
1. **缺少错误处理**:没有检查 item 是否包含必要的键
2. **类型不一致**:'c' 类型直接返回原值,而其他类型做了处理
3. **硬编码值**:乘数和加数应该作为参数或配置

### 改进建议
1. 添加默认字典或 try-except 处理
2. 统一处理逻辑
3. 将 magic numbers 提取为常量

Пример 2: Использование команды /review

Используйте встроенную команду review в Codex:

Задача

/review src/

Codex просканирует всюsrc/директорию и сгенерирует подробный отчёт о проверке кода.


Отладка и устранение неполадок

Пример 1: Анализ сообщений об ошибках

Передайте сообщение об ошибке Codex для анализа:

Задача

Помоги мне проанализировать эту ошибку:
Traceback (most recent call last):
  File "app.py", line 42, in <module>
    main()
  Файл "app.py", строка 38, в fetch_data()
  Файл "app.py", строка 25, в fetch_data
    response = requests.get(url)
  Файл "/usr/lib/python3.10/site-packages/requests/api.py", строка 88, в в get
    return session.request(method='GET', url=url, **kwargs)
  requests.exceptions.ConnectionError: HTTPSConnectionPool(хост='api.example.com', порт=443): Превышено максимальное количество повторных попыток

Codex предоставит анализ и решение:

## 错误分析

### 原因
网络连接问题 - 无法连接到 api.example.com

### 可能的原因
1. 网络不通
2. 域名解析失败
3. 服务器不可用
4. 防火墙阻止

### 建议的排查步骤
1. 检查网络连接:ping api.example.com
2. 验证域名解析:nslookup api.example.com
3. 检查端口是否开放:telnet api.example.com 443
4. 如果是本地开发,检查代理设置

Пример 2: Добавление отладочных логов

Попросите Codex добавить код отладки:

Задача

Добавьте отладочные логи в эту функцию:
def calculate(a, b):
    return a + b * (a - b)

Codex сгенерирует версию с отладочными логами:

Добавить отладочные логи

import logging

# Настройка логирования
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)


def calculate(a, b):
    """Функция вычисления с отладочными логами"""
    logger.debug(f"calculate вызвана с a={a}, b={b}")

    result = a + b * (a - b)

    logger.debug(f"a + b = {a} + {b} = {a + b}")
    logger.debug(f"a - b = {a} - {b} = {a - b}")
    logger.debug(f"b * (a - b) = {b} * {a - b} = {b * (a - b)}")
    logger.debug(f"итоговый результат: {result}")

    return result

Операции с файлами

Пример 1: Пакетное переименование файлов

Задача

Переименовать все файлы вида image_001.jpg в текущем каталоге в image-001.jpg (заменить подчёркивания на дефисы)

Пример 2: Создание структуры проекта

Задача

Создайте стандартную структуру каталогов для проекта Flask, включая:
- app.py главный файл
- config.py файл конфигурации
- requirements.txt
- каталог tests/directory
- каталог static/и templates/directory

Codex создаст полную структуру проекта и все необходимые файлы.

Codex сначала перечислит файлы для создания, а затем выполнит после подтверждения.

Выполнение команд

Пример 1: Запуск тестов

Задача

Запустите модульные тесты проекта

Codex автоматически определит тип проекта и выполнит соответствующую команду тестирования:

  • Проект Python: pytest или unittest
  • Проект Node.js: npm test или yarn test
  • Проект Rust: cargo test

Пример 2: операции Git

Задача

Создайте Git-коммит, который включает все изменения и использует подходящее сообщение коммита

Codex проанализирует все незакоммиченные изменения, затем выполнит:

  1. git status- Просмотреть изменения
  2. git diff- Проверить конкретные изменения
  3. git add -A- Добавить все файлы
  4. git commit -m "..."- Создать коммит
При операциях Git Codex сначала покажет изменения и выполнит действие только после подтверждения.

Анализ проекта

Пример 1: Понимание структуры проекта

Задача

Проанализируй архитектуру и технологический стек этого проекта

Codex проверит следующее в проекте:

  • Файлы конфигурации (package.json, Cargo.toml, requirements.txt и т. д.)
  • Структура каталогов
  • Основные исходные файлы

Затем предоставит подробный отчёт об анализе.

Пример 2: Поиск зависимостей

Задача

Найди, какие файлы ссылаются на файл auth.py

Режим планирования

Используйте команду /plan для планирования сложных задач:

Задача

/Составьте план добавления аутентификации пользователей в этот проект React, включая вход, регистрацию и проверку JWT

Codex сначала покажет подробный план реализации:

## 实施计划:用户认证功能

### 步骤 1:准备
- 创建用户模型
- 安装认证依赖(jsonwebtoken, bcryptjs)

### 步骤 2:后端实现
- 创建 /api/auth/register 端点
- 创建 /api/auth/login 端点
- 实现 JWT 生成和验证中间件

### 步骤 3:前端实现
- 创建登录表单组件
- 创建注册表单组件
- 添加认证状态管理

### 步骤 4:测试
- 编写后端单元测试
- 测试前端表单交互

是否确认执行此计划?
[Y] 确认 [N] 取消 [M] 修改
Режим планирования позволяет понять полный подход Codex перед выполнением, избегая ненужных переделок.

Подробные примеры

Полный пример рабочего процесса:

Полный рабочий процесс

# 1. Запустите новый сеанс
/новый

# 2. Изучите проект
Какой фреймворк использует этот проект? Какие основные функции?

# 3. Добавьте новую функцию
ВusersДобавьте функцию отправки кодов подтверждения в модуле; необходимо учесть:
- Генерация кода подтверждения (6цифр)
- 60Повторно отправить нельзя в течение секунд
- Код подтверждения10действителен в течение минут

# 4. Тестирование
Запустите соответствующие тесты, чтобы убедиться, что функциональность работает правильно

# 5. Ревью кода
/ревью

Этот пример демонстрирует типичный рабочий процесс разработки: понять проект → реализовать функцию → протестировать → провести ревью.


Краткая сводка операций

СценарийИспользуемая команда
Написать функциюПросто опишите требование
Проверить код/review или "помоги мне проверить..."
Отладка проблемВставьте сообщение об ошибке и запросите анализ
Выполнить командуНачните с !
Планирование сложной задачи/plan + описание задачи
Понимание кода"Что делает эта функция?"
Практика ведёт к совершенству. Чем чаще вы используете Codex, тем более опытным вы станете, и эффективность написания кода значительно возрастёт.
Другие расширения