Сценарий 18: Интерактивная оптимизация кода¶
Разработчик или технический лидер, улучшающий качество кода с помощью предложений на основе ИИ и рабочих процессов утверждения.
Содержание¶
- Быстрый старт
- Обзор
- Категории оптимизации
- Рабочий процесс утверждения
- Композитный режим (Оркестратор)
- Команды CLI
- Команды TUI
- Примеры вопросов
- Связанные сценарии
Быстрый старт¶
/select 18
Обзор¶
Сценарий 18 предоставляет оптимизацию кода на основе ИИ с интерактивным рабочим процессом утверждения. Он анализирует код на предмет улучшений производительности, безопасности и читаемости, а затем представляет предложения для рассмотрения перед применением изменений.
Запрос пользователя → Движок анализа → Предложения → Рабочий процесс утверждения → Применение правок
↓
┌──────────────┬──────────────┐
↓ ↓ ↓
Производительность Безопасность Читаемость
Категории оптимизации¶
Оптимизация производительности¶
Выявление узких мест производительности и неэффективностей:
> Проанализировать src/core/ на проблемы производительности
╭─────────────── Анализ производительности ────────────────╮
│ │
│ Итоги по категориям: │
│ - Производительность: 12 │
│ │
│ Предложения: │
│ │
│ 1. [Предупреждение] Инвариантное вычисление в цикле │
│ Файл: `src/core/processor.py:45` │
│ ID: `opt_001` │
│ Вынести `len(data)` за пределы цикла │
│ │
│ 2. [Предупреждение] Неэффективная конкатенация строк │
│ Файл: `src/core/formatter.py:89` │
│ ID: `opt_002` │
│ Использовать join вместо += в цикле │
│ │
│ 3. [Рекомендация] Отсутствует декоратор кэширования │
│ Файл: `src/core/calculator.py:34` │
│ ID: `opt_003` │
│ Добавить @lru_cache для чистой функции │
│ │
│ Используйте `/optimize approve --id <id>` для утверждения.│
│ │
╰────────────────────────────────────────────────────────────╯
Оптимизация безопасности¶
Выявление уязвимостей безопасности и возможностей укрепления:
> Проанализировать src/api/ на проблемы безопасности
╭─────────────── Анализ безопасности ──────────────────────╮
│ │
│ Итоги по категориям: │
│ - Безопасность: 8 │
│ │
│ Предложения: │
│ │
│ 1. [Критическое] Риск SQL-инъекции │
│ Файл: `src/api/user_handler.py:67` │
│ ID: `sec_001` │
│ Использовать параметризованные запросы │
│ │
│ 2. [Предупреждение] Отсутствует валидация входных данных │
│ Файл: `src/api/data_handler.py:23` │
│ ID: `sec_002` │
│ Добавить проверку длины для пользовательского ввода │
│ │
│ 3. [Предупреждение] Жёстко заданный таймаут │
│ Файл: `src/api/client.py:45` │
│ ID: `sec_003` │
│ Использовать настраиваемое значение таймаута │
│ │
│ Используйте `/optimize approve --id <id>` для утверждения.│
│ │
╰────────────────────────────────────────────────────────────╯
Оптимизация читаемости¶
Выявление запахов кода и проблем сопровождаемости:
> Проанализировать src/utils/ на читаемость
╭─────────────── Анализ читаемости ────────────────────────╮
│ │
│ Итоги по категориям: │
│ - Читаемость: 15 │
│ │
│ Предложения: │
│ │
│ 1. [Рекомендация] Длинная функция (52 строки) │
│ Файл: `src/utils/parser.py:89` │
│ ID: `read_001` │
│ Выделить вспомогательные функции │
│ │
│ 2. [Рекомендация] Глубокая вложенность условий │
│ Файл: `src/utils/validator.py:34` │
│ ID: `read_002` │
│ Использовать ранние возвраты для упрощения логики │
│ │
│ 3. [Информация] Отсутствует docstring │
│ Файл: `src/utils/helpers.py:12` │
│ ID: `read_003` │
│ Добавить документацию функции │
│ │
╰────────────────────────────────────────────────────────────╯
Рабочий процесс утверждения¶
Просмотр предложений¶
Просмотр подробной информации о предложении:
> Показать детали для opt_001
╭─────────────── Детали предложения ───────────────────────╮
│ │
│ ID: opt_001 │
│ Категория: Производительность │
│ Серьёзность: Предупреждение │
│ │
│ Название: Инвариантное вычисление в цикле │
│ Файл: src/core/processor.py:45 │
│ │
│ Текущий код: │
│ ```python │
│ for i in range(len(data)): │
│ if i < len(data) - 1: │
│ process(data[i]) │
│ ``` │
│ │
│ Предлагаемое исправление: │
│ ```python │
│ data_len = len(data) │
│ for i in range(data_len): │
│ if i < data_len - 1: │
│ process(data[i]) │
│ ``` │
│ │
│ Эффект: ~15% улучшение в итерациях цикла │
│ Уверенность: 0.95 │
│ │
╰────────────────────────────────────────────────────────────╯
Утвердить/Отклонить/Отложить¶
> /optimize approve --id opt_001
╭─────────────── Предложение утверждено ───────────────────╮
│ │
│ ID: opt_001 │
│ Статус: УТВЕРЖДЕНО │
│ │
│ Правка добавлена в очередь. Используйте `/optimize apply` │
│ для применения всех утверждённых изменений. │
│ │
╰────────────────────────────────────────────────────────────╯
> /optimize reject --id opt_002 --reason "Неприменимо"
> /optimize defer --id opt_003 --until "2024-02-01"
Применение утверждённых изменений¶
> /optimize apply
╭─────────────── Применение изменений ─────────────────────╮
│ │
│ Утверждённых предложений: 5 │
│ │
│ Применение opt_001... Готово │
│ Применение sec_001... Готово │
│ Применение read_001... Готово │
│ Применение read_002... Готово │
│ Применение sec_003... Готово │
│ │
│ Итого: │
│ Успешно применено: 5 │
│ Неудачно: 0 │
│ Изменено файлов: 4 │
│ │
│ Резервные копии созданы в: .codegraph/backups/ │
│ │
╰────────────────────────────────────────────────────────────╯
Отмена применённых изменений¶
> /optimize undo
╭─────────────── Отмена изменений ─────────────────────────╮
│ │
│ Последний пакет: 5 изменений применено в 14:35:21 │
│ │
│ Отмена opt_001... Готово │
│ Отмена sec_001... Готово │
│ Отмена read_001... Готово │
│ Отмена read_002... Готово │
│ Отмена sec_003... Готово │
│ │
│ Все изменения успешно отменены. │
│ │
╰────────────────────────────────────────────────────────────╯
Композитный режим (Оркестратор)¶
Сценарий 18 может работать как композитный оркестратор, вызывая несколько подсценариев для комплексного анализа:
┌─────────────────────────────────────────────────────────────┐
│ КОМПОЗИТНЫЙ ОРКЕСТРАТОР S18 │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ВЫЗОВ СЦЕНАРИЕВ │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │ S02 │ │ S05 │ │ S06 │ │ S11 │ │ S12 │ │ │
│ │ │Безоп│ │Рефак│ │Произ│ │Архит│ │Долг │ │ │
│ │ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │ │
│ └─────┼────────┼───────┼────────┼────────┼──────────────┘ │
│ │ │ │ │ │ │
│ └────────┴───────┴────────┴────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ ОБЪЕДИНЕНИЕ РЕЗУЛЬТАТОВ │ │
│ │ (дедупликация, разрешение конфликтов) │ │
│ └────────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ КАЛЬКУЛЯТОР ПРИОРИТЕТОВ │ │
│ │ (серьёзность × влияние × roi × уверенность × консенсус) │
│ └────────────────────────────────────────────────────────┘ │
│ ↓ │
│ УНИФИЦИРОВАННЫЕ НАХОДКИ │
└─────────────────────────────────────────────────────────────┘
Подсценарии¶
| Сценарий | Вес | Вклад |
|---|---|---|
| S02 (Аудит безопасности) | 1.5 | Уязвимости безопасности |
| S05 (Рефакторинг) | 1.0 | Запахи кода, мёртвый код |
| S06 (Производительность) | 1.2 | Узкие места производительности |
| S11 (Архитектура) | 1.1 | Нарушения архитектуры |
| S12 (Технический долг) | 0.9 | Элементы технического долга |
Запуск композитного режима¶
# CLI
codegraph composition run "Оптимизировать src/" -o s18
# API
POST /api/v1/composition/query
{
"query": "Оптимизировать src/",
"orchestrator": "scenario_18"
}
Стратегии объединения¶
| Стратегия | Описание |
|---|---|
union |
Включить все находки (по умолчанию) |
intersection |
Только находки из 2+ сценариев |
weighted |
Взвешивать по приоритету сценария |
consensus |
Только находки с согласием |
Команды CLI¶
# Анализ по всем категориям
codegraph optimize analyze src/
# Анализ по конкретной категории
codegraph optimize analyze src/ --performance
codegraph optimize analyze src/ --security
codegraph optimize analyze src/ --readability
# Список ожидающих предложений
codegraph optimize list
# Показать детали предложения
codegraph optimize show --id opt_001
# Утвердить предложение
codegraph optimize approve --id opt_001
# Отклонить предложение
codegraph optimize reject --id opt_002 --reason "Не требуется"
# Применить все утверждённые
codegraph optimize apply
# Отменить последний пакет
codegraph optimize undo
Команды TUI¶
| Команда | Описание |
|---|---|
/optimize analyze <путь> |
Анализ на оптимизации |
/optimize list |
Список ожидающих предложений |
/optimize show --id <id> |
Показать детали предложения |
/optimize approve --id <id> |
Утвердить предложение |
/optimize reject --id <id> |
Отклонить предложение |
/optimize defer --id <id> |
Отложить на потом |
/optimize apply |
Применить утверждённые изменения |
/optimize undo |
Отменить последний пакет |
Примеры вопросов¶
- “Оптимизировать src/core/ для производительности”
- “Найти улучшения безопасности в src/api/”
- “Проанализировать src/utils/ на проблемы читаемости”
- “Показать все ожидающие предложения по оптимизации”
- “Утвердить предложение opt_001”
- “Применить все утверждённые оптимизации”
- “Каково будет влияние исправления sec_001?”
Конфигурация¶
Настройка поведения оптимизации в config.yaml:
scenarios:
code_optimization:
categories:
- performance
- security
- readability
severity_threshold: info # info, warning, critical
max_suggestions: 50
auto_backup: true
composite:
enabled: true
sub_scenarios:
- scenario_02 # Безопасность
- scenario_05 # Рефакторинг
- scenario_06 # Производительность
- scenario_11 # Архитектура
- scenario_12 # Технический долг
parallel_execution: true
merge_strategy: weighted
Связанные сценарии¶
- Аудит безопасности - Сканирование уязвимостей
- Рефакторинг - Очистка кода
- Производительность - Анализ производительности
- Редактирование файлов - Применение изменений кода
- Композитные рабочие процессы - Детали оркестрации