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

Сценарий 18: анализ оптимизации кода

Запустите анализ отдельного файла, проверьте предложения и коды возврата, затем оцените изменение тестами и измерениями до применения.

Руководства

Сценарий 18 помогает разработчику найти участки кода для проверки и возвращает предложения по категориям. Сначала выберите файл и категорию проверки, затем изучите найденные предложения. Принятое предложение передайте в отдельную задачу реализации; маршруты анализа сохраняют исходники без изменений.

Выбор поддерживаемого маршрута анализа

Для локального сканирования нужны исходники CodeGraph, установленное Python-окружение и включённая локальная CLI. Подготовка описана в руководстве CLI. В корне репозитория сохраните файл optimization_example.py:

def total(items):
    result = 0
    for index in range(len(items)):
        result += items[index]
    return result

В PowerShell выполните:

python -m src.cli optimize analyze optimization_example.py --category performance --output suggestions.json
python -m src.cli optimize patterns --category performance
Get-Content suggestions.json -Raw | ConvertFrom-Json | Select-Object pattern_id, category, severity, start_line

Ожидаемый результат: файл suggestions.json содержит предложение PERF-002 с категорией performance, серьёзностью suggestion и строкой 3. Команда patterns перечисляет правила этой категории. Исходный файл не меняется.

Это совпадение с регулярным выражением, а не доказательство замедления. В этом примере len(items) вычисляется до начала цикла; название правила о повторном вызове функции не подтверждает такой вызов. Проверьте смысл предложения по исходникам и измерьте эффект на своей нагрузке.

analyze принимает файл или каталог. --category можно повторять; значения: performance, security, readability, best_practice. Без фильтра проверяются все категории. --severity задаёт минимальную серьёзность: critical, warning, suggestion, info. --limit ограничивает число показанных и сохранённых предложений, по умолчанию 50. --output задаёт JSON-файл. Если предложений нет, команда выводит No optimization suggestions found., возвращает 0 и не записывает файл. Для каждого запуска выбирайте новое имя отчёта и сопоставляйте файл с текущим выводом команды.

Запуск типизированного сценария

from src.digital_employees.runtime.scenarios import (
    RoleBoundScenarioInvocationRequest,
    invoke_role_bound_scenario_request,
)

request = RoleBoundScenarioInvocationRequest(
    query="Проанализируй возможности оптимизации в optimization_example.py.",
    employee_id="codegraph_developer",
    scenario_id="scenario_18",
    event_type="implementation_start",
    context={
        "project_key": "codegraph",
        "namespace": "default",
        "task_id": "<task-id>",
        "source_refs": ["<revision-ref>", "<measurement-ref>"],
        "file_paths": ["optimization_example.py"],
    },
)
result = invoke_role_bound_scenario_request(request)
if result.get("error"):
    raise RuntimeError(result["error"])
if not result.get("scenario_id") or not result.get("answer"):
    raise RuntimeError("Scenario returned no scenario identity or answer")
print(result["answer"])
print(result.get("optimization_suggestions", []))

Замените область задачи и ссылки на ревизию и измерения своими значениями. Условия выполнения описаны в руководстве программного вызова: рабочий сценарий требует настроенного runtime и доступного контекста проекта. При наличии предложений результат содержит optimization_suggestions. Сопоставьте metadata.analyzed_paths с нужными файлами, а metadata.suggestion_count — с числом предложений. Пустой список читайте вместе с ответом, путями и сообщениями анализа. Сохраните ролевые свидетельства; предложения передайте в отдельную задачу реализации.

MCP и композитный анализ

Инструмент codegraph_runtime_composition_workflow_run использует проект из активного MCP-подключения. Передайте запрос анализа, orchestrator, namespace и task_id:

{
  "query": "Проанализируй возможности оптимизации в файле optimization_example.py",
  "orchestrator": "s18",
  "language": "ru",
  "namespace": "<namespace>",
  "task_id": "<task-id>"
}

Значение s18 запускает ролевой сценарий scenario_18. Ответ содержит answer, evidence и metadata: предложения смотрите в ответе, а metadata.analyzed_paths и metadata.suggestion_count сверьте с запросом.

CLI-команда python -m src.cli composition run "<query>" -o s18 запускает более широкий композитный анализ и хранит сессию в текущем процессе. Сохраните результат анализа и используйте его при подготовке задачи реализации.

От анализа к реализации

Используйте analyze и patterns, чтобы изучить предложения. Принятое предложение реализуйте в отдельном изменении. Запустите целевые тесты, сравните измерения с исходным уровнем и проверьте diff. Подкоманды list-suggestions, approve, reject, apply и undo зарегистрированы; их обработчики печатают not yet implemented и возвращают код 1.

composition apply также не применяет изменения. Сессия хранится только в текущем процессе: отдельный запуск команды обычно возвращает Session not found и код 1. Если сессия есть, обработчик печатает Edit application not implemented in CLI demo, не редактирует файл и возвращает 0. Проверяйте применение по изменениям исходников и результатам тестов в задаче реализации. Инструмент MCP для композитного анализа возвращает предложения для этого этапа.

Проверка предложений

Каждое предложение проверьте по привязанной ревизии, измеримой цели, ограничениям совместимости и целевым тестам. Ускорение, устранение уязвимости и улучшение сопровождаемости подтверждаются измерениями и тестами.

Ошибки и восстановление

  • Путь не найден: команда сообщает Path not found: и возвращает 1. Исправьте путь файла или каталога.
  • Предложений нет: проверьте выбранную категорию, список правил и путь анализа.
  • Команда сообщает not yet implemented: вернитесь к отчёту анализа и оформите выбранное предложение в задаче реализации.
  • Сессия композитного анализа потеряна: повторите анализ, сохраните результат и передайте предложения в задачу реализации.

Связанные материалы