Справочник по рабочим процессам

Справочник по рабочим процессам

Документация по системе рабочих процессов CodeGraph.

Содержание

Архитектура рабочего процесса

CodeGraph использует LangGraph для оркестрации рабочих процессов. Все запросы проходят через единую точку входа — MultiScenarioCopilot — который классифицирует намерение и маршрутизирует запрос к соответствующему сценарию.

                    ┌──────────────────┐
                    │   Точка входа    │
                    │  (Запрос польз.) │
                    └────────┬─────────┘
                             │
                    ┌────────▼─────────┐
                    │  Классификация   │
                    │  (Ключ. + LLM)  │
                    └────────┬─────────┘
                             │
                    ┌────────▼─────────┐
                    │  Маршрутизатор   │
                    │ (21 сценарий)   │
                    └────────┬─────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
     ┌────────▼───┐  ┌──────▼─────┐  ┌────▼────────┐
     │Безопасность│  │  Онбординг │  │ Произв./... │
     │  Workflow  │  │  Workflow  │  │  Workflows  │
     └────────┬───┘  └──────┬─────┘  └────┬────────┘
              │              │              │
              └──────────────┼──────────────┘
                             │
                    ┌────────▼─────────┐
                    │    Результат     │
                    │  (Ответ +        │
                    │   Доказательства)│
                    └──────────────────┘

MultiScenarioCopilot

Главная точка входа для выполнения всех рабочих процессов.

Расположение: src/workflow/orchestration/copilot.py (реэкспорт из src/workflow/)

from src.workflow import MultiScenarioCopilot

copilot = MultiScenarioCopilot()

# Автоматическое определение сценария по запросу
result = copilot.run("Найти SQL-инъекции")

# Принудительный выбор сценария
result = copilot.run(
    "Проанализировать модуль",
    context={"scenario_id": "scenario_2"}
)

# Структура результата
{
    'query': 'Найти SQL-инъекции',
    'intent': 'security_audit',
    'scenario_id': 'scenario_2',
    'confidence': 0.92,
    'answer': 'Обнаружено 3 потенциальных SQL-инъекции...',
    'evidence': ['Функция exec_simple_query в строке 142...'],
    'metadata': {...}
}

Копилот внутренне строит граф LangGraph через build_multi_scenario_graph(), который связывает классификацию намерений, маршрутизацию сценариев и выполнение обработчиков.

Состояние рабочего процесса

MultiScenarioState

Все рабочие процессы используют MultiScenarioStateTypedDict, который проходит через узлы LangGraph.

Расположение: src/workflow/state.py

from typing import Any, Dict, List, Optional, TypedDict

class MultiScenarioState(TypedDict):
    # Входные данные
    query: str
    context: Optional[Dict[str, Any]]
    language: Optional[str]               # "en" или "ru"

    # Классификация намерений
    intent: Optional[str]                 # напр., "security_audit"
    scenario_id: Optional[str]            # напр., "scenario_2"
    confidence: Optional[float]           # 0.0–1.0
    classification_method: Optional[str]  # "keyword" или "llm"

    # Данные CPG
    cpg_results: Optional[List[Dict]]
    subsystems: Optional[List[str]]
    methods: Optional[List[Dict]]
    call_graph: Optional[Any]

    # Выходные данные
    answer: Optional[str]
    evidence: Optional[List[str]]
    metadata: Optional[Dict[str, Any]]
    retrieved_functions: Optional[List[str]]

    # Обработка ошибок
    error: Optional[str]
    retry_count: int

    # Конфигурация рабочего процесса
    enrichment_config: Optional[Dict[str, Any]]
    vector_store: Optional[Any]

Создание начального состояния с помощью вспомогательной функции:

from src.workflow.state import create_initial_state

state = create_initial_state(
    query="Найти утечки памяти",
    language="ru",
    context={"subsystem": "executor"}
)

Специализированные состояния

Некоторые сценарии расширяют базовое состояние дополнительными полями:

Класс состояния Дополнительные поля
SecurityWorkflowState vulnerabilities, taint_paths, security_findings, risk_score
PerformanceWorkflowState hotspots, complexity_metrics, bottlenecks
ArchitectureWorkflowState dependency_graph, layer_violations, module_coupling

Узлы рабочего процесса

Классификация намерений

Первый узел классифицирует запрос пользователя в сценарий, используя двуязычное (EN/RU) сопоставление ключевых слов и необязательный резервный вызов LLM.

Расположение: src/workflow/scenarios/_intent/

from src.workflow.orchestration import classify_intent_node

# Вызывается внутренне графом
state = classify_intent_node(state)
# Заполняет: state['intent'], state['scenario_id'], state['confidence']

Маршрутизация сценариев

После классификации маршрутизатор направляет запрос к соответствующему сценарию.

from src.workflow.orchestration import route_by_intent

# Возвращает имя узла сценария
next_node = route_by_intent(state)
# напр., "security_workflow", "onboarding_workflow"

Выполнение сценария

Каждый сценарный рабочий процесс — это подграф LangGraph, который: 1. Выполняет запросы к базе CPG через CPGQueryService 2. Обрабатывает результаты через обработчики, специфичные для сценария 3. Форматирует ответ с помощью локализованных форматтеров

Сценарные рабочие процессы

Структура

Каждый сценарий следует шаблону src/workflow/scenarios/{name}_handlers/:

src/workflow/scenarios/
├── _base/                    # Базовый класс обработчика
│   └── handler.py            # BaseHandler
├── _intent/                  # Классификация намерений
├── security/                 # Сценарий безопасности
│   ├── handlers/
│   ├── formatters/
│   └── __init__.py
├── onboarding/               # Сценарий онбординга
│   ├── handlers/
│   └── __init__.py
├── architecture_handlers/    # Сценарий архитектуры
│   ├── handlers/
│   ├── formatters/
│   └── __init__.py
├── performance_handlers/     # Сценарий производительности
├── refactoring_handlers/     # Сценарий рефакторинга
├── code_review_handlers/     # Сценарий проверка кода
├── compliance_handlers/      # Сценарий соответствия требованиям
├── documentation_handlers/   # Сценарий документации
├── tech_debt_handlers/       # Сценарий техдолга
├── debugging_handlers/       # Сценарий отладки
├── concurrency_handlers/     # Сценарий параллелизма
├── coverage_handlers/        # Сценарий покрытия тестами
├── cross_repo_handlers/      # Сценарий кросс-репо
├── feature_dev_handlers/     # Сценарий разработки функций
├── audit_composite.py        # Аудит (запускает 9 подсценариев)
├── code_optimization.py      # Оптимизация кода
├── file_editing.py           # Редактирование файлов
├── pattern_search_handlers/  # Сценарий поиска структурных шаблонов
│   ├── handlers/
│   └── __init__.py
├── standards_check.py        # Проверка стандартов
└── dependencies_analysis.py  # Анализ зависимостей

Доступные сценарии

ID Название Точка входа Назначение
01 onboarding onboarding_workflow Онбординг и навигация по кодовой базе
02 security security_workflow Обнаружение уязвимостей
03 performance performance_workflow Производительность и сложность
04 architecture architecture_workflow Архитектурный анализ
05 refactoring refactoring_workflow Помощь в рефакторинге
06 documentation documentation_workflow Генерация документации
07 compliance compliance_workflow Проверка соответствия
08 code_review code_review_workflow Автоматизация проверка кода
09 tech_debt tech_debt_workflow Оценка техдолга
10 cross_repo cross_repo_workflow Кросс-репозиторный анализ
11 debugging debugging_workflow Поддержка отладки
12 concurrency concurrency_workflow Анализ параллелизма
13 coverage test_coverage_workflow Анализ покрытия тестами
14 feature_dev feature_dev_workflow Разработка функций
15 security_incident security_incident_workflow Реагирование на инциденты
16 large_scale_refactoring large_scale_refactoring_workflow Рефакторинг корпоративного масштаба
17 file_editing file_editing_workflow Редактирование файлов на основе AST
18 code_optimization optimization_workflow Оптимизация кода
19 standards_check standards_check_workflow Оптимизация по стандартам
20 dependencies dependencies_workflow Анализ зависимостей
21 pattern_search pattern_search_workflow Поиск структурных шаблонов с CPG-ограничениями
audit AuditRunner Композитный: аудит качества по 12 измерениям

Базовый класс обработчика

Все обработчики сценариев наследуют от BaseHandler:

Расположение: src/workflow/scenarios/_base/handler.py

from src.workflow.scenarios._base.handler import BaseHandler
from src.workflow.scenarios._base.handler import HandlerResult

class MyHandler(BaseHandler):
    async def handle(self) -> HandlerResult:
        # self.cpg   — экземпляр CPGQueryService
        # self.state  — словарь MultiScenarioState
        # self.cfg    — унифицированная конфигурация
        # self.query  — исходный запрос
        # self.language — "en" или "ru"
        results = self.cpg.get_methods_by_subsystem("executor")
        return HandlerResult(
            answer="Найдены методы...",
            evidence=results,
            metadata={"handler": "my_handler"}
        )

Предупреждение: НЕ используйте AnalysisHandler из src/workflow/handlers/analysis.py в качестве базового класса — его сигнатура конструктора несовместима с реестром сценариев.

Композитные рабочие процессы

Три композитных оркестратора запускают подсценарии параллельно или последовательно:

Композитный ID сценариев Режим Время ожидания
code_optimization (С18) 02, 05, 06, 11, 12 Параллельно 60 сек
standards_check (С19) 08, 17, 18 Последовательно 45 сек
audit 02, 03, 05, 06, 07, 08, 11, 12, 16 Параллельно 600 сек

Аудит запускает 9 подсценариев параллельно, покрывая 12 измерений качества кода (безопасность, сложность, дубликаты, зависимости, именование, обработка ошибок, тестирование, документация, производительность, переносимость, стиль, архитектура). Доступен через:

python -m src.cli audit --db PATH [--language ru] [--format json]

Разрешение конфликтов использует приоритетный режим с повышением для безопасности (1.5x) и соответствия требованиям (1.3x). Конфигурация в config.yamlcomposition.

Обработка ошибок

Логика повторных попыток

Рабочие процессы поддерживают автоматический повтор с уточнением запроса:

# Встроено в граф — настраивается через state['retry_count']
# По умолчанию: до 2 повторных попыток с адаптивным уточнением запроса

Резервные стратегии

При сбое генерации на базе LLM рабочие процессы переключаются на сопоставление шаблонов:

# Автоматическая цепочка запасных вариантов:
# 1. SQL-запрос, сгенерированный LLM
# 2. Запрос по шаблону из примеров
# 3. Прямой вызов метода CPG

Пользовательские рабочие процессы

Создание пользовательского рабочего процесса

from langgraph.graph import StateGraph
from src.workflow.state import MultiScenarioState

def create_custom_workflow():
    workflow = StateGraph(MultiScenarioState)

    workflow.add_node("analyze", my_analyze_node)
    workflow.add_node("process", my_process_node)
    workflow.add_node("interpret", my_interpret_node)

    workflow.add_edge("analyze", "process")
    workflow.add_edge("process", "interpret")

    workflow.set_entry_point("analyze")
    workflow.set_finish_point("interpret")

    return workflow.compile()

result = create_custom_workflow().invoke({"query": "..."})

Условная маршрутизация

def route_by_intent(state: MultiScenarioState) -> str:
    if state["intent"] == "find_vulnerabilities":
        return "security_node"
    elif state["intent"] == "find_performance":
        return "performance_node"
    else:
        return "general_node"

workflow.add_conditional_edges(
    "analyze",
    route_by_intent,
    {
        "security_node": "security",
        "performance_node": "performance",
        "general_node": "general"
    }
)

Потоковая передача данных

Потоковая передача прогресса поддерживается через интерфейс потоковой передачи LangGraph:

copilot = MultiScenarioCopilot()

# Потоковая передача обрабатывается на уровне API/TUI
# См. src/api/routers/ для WebSocket-потоков
# См. src/tui/ для терминальных потоков

Дальнейшие шаги