Справочник по рабочим процессам¶
Документация по системе рабочих процессов CodeGraph.
Содержание¶
- Архитектура рабочего процесса
- MultiScenarioCopilot
- Состояние рабочего процесса
- MultiScenarioState
- Специализированные состояния
- Узлы рабочего процесса
- Классификация намерений
- Маршрутизация сценариев
- Выполнение сценария
- Сценарные рабочие процессы
- Структура
- Доступные сценарии
- Базовый класс обработчика
- Композитные рабочие процессы
- Обработка ошибок
- Логика повторных попыток
- Резервные стратегии
- Пользовательские рабочие процессы
- Создание пользовательского рабочего процесса
- Условная маршрутизация
- Потоковая передача данных
- Дальнейшие шаги
Архитектура рабочего процесса¶
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¶
Все рабочие процессы используют MultiScenarioState — TypedDict, который проходит через узлы 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.yaml → composition.
Обработка ошибок¶
Логика повторных попыток¶
Рабочие процессы поддерживают автоматический повтор с уточнением запроса:
# Встроено в граф — настраивается через 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/ для терминальных потоков
Дальнейшие шаги¶
- Справочник API — полный API
- Справочник агентов — подробности по агентам
- Руководство по сценариям — примеры использования сценариев