180 lines
4.1 KiB
Python
180 lines
4.1 KiB
Python
"""Static rule definitions for role dispatcher."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
from typing import Any, Optional
|
|
|
|
|
|
class Role(str, Enum):
|
|
"""系统角色定义"""
|
|
|
|
BOSS = "boss"
|
|
AI_ENGINEER = "ai_engineer"
|
|
BACKEND = "backend"
|
|
FRONTEND = "frontend"
|
|
|
|
|
|
@dataclass
|
|
class RoutingRule:
|
|
"""路由规则定义"""
|
|
|
|
role: Role
|
|
name: str
|
|
description: str
|
|
triggers: list[str] = field(default_factory=list)
|
|
keywords: list[str] = field(default_factory=list)
|
|
patterns: list[str] = field(default_factory=list)
|
|
threshold: Optional[dict[str, Any]] = None
|
|
priority: int = 0
|
|
|
|
|
|
ROLE_RULES: list[RoutingRule] = [
|
|
RoutingRule(
|
|
role=Role.BOSS,
|
|
name="战略决策",
|
|
description="需要老板决策的高影响任务",
|
|
triggers=["cost_estimate", "architecture_change", "high_risk", "security"],
|
|
keywords=["预算", "架构", "安全", "风险", "审批", "决策"],
|
|
threshold={"dev_days": 5, "risk_level": ["CRITICAL", "HIGH"]},
|
|
priority=100,
|
|
),
|
|
RoutingRule(
|
|
role=Role.AI_ENGINEER,
|
|
name="AI 工程",
|
|
description="AI 模型和数据处理相关任务",
|
|
triggers=["prompt", "model", "embedding", "rag", "llm"],
|
|
keywords=[
|
|
"ollama",
|
|
"openai",
|
|
"claude",
|
|
"prompt",
|
|
"embedding",
|
|
"rag",
|
|
"llm",
|
|
"向量",
|
|
"模型",
|
|
"训练",
|
|
"数据清洗",
|
|
"token",
|
|
"context",
|
|
],
|
|
patterns=[r"(prompt|embedding|rag|llm|vector|model)", r"(ai|machine.?learning|ml)"],
|
|
priority=50,
|
|
),
|
|
RoutingRule(
|
|
role=Role.BACKEND,
|
|
name="后端开发",
|
|
description="API、数据库、爬虫等后端任务",
|
|
triggers=["api", "database", "crawler", "performance", "docker"],
|
|
keywords=[
|
|
"fastapi",
|
|
"sqlalchemy",
|
|
"postgres",
|
|
"sql",
|
|
"async",
|
|
"docker",
|
|
"kubernetes",
|
|
"redis",
|
|
"celery",
|
|
"爬虫",
|
|
"api",
|
|
"接口",
|
|
"数据库",
|
|
"后端",
|
|
"性能",
|
|
"缓存",
|
|
],
|
|
patterns=[
|
|
r"(api|endpoint|route)",
|
|
r"(sql|database|db)",
|
|
r"(docker|k8s|kubernetes)",
|
|
r"(async|await|celery)",
|
|
],
|
|
priority=30,
|
|
),
|
|
RoutingRule(
|
|
role=Role.FRONTEND,
|
|
name="前端开发",
|
|
description="UI、可视化、交互等前端任务",
|
|
triggers=["ui", "visualization", "interaction", "responsive", "chart"],
|
|
keywords=[
|
|
"vue",
|
|
"react",
|
|
"typescript",
|
|
"component",
|
|
"chart",
|
|
"echarts",
|
|
"d3",
|
|
"可视化",
|
|
"ui",
|
|
"ux",
|
|
"样式",
|
|
"动画",
|
|
"响应式",
|
|
"组件",
|
|
"交互",
|
|
"页面",
|
|
"布局",
|
|
],
|
|
patterns=[
|
|
r"(vue|react|tsx?|jsx?)",
|
|
r"(css|scss|tailwind)",
|
|
r"(component|props|emit)",
|
|
r"(chart|graph|visualization)",
|
|
],
|
|
priority=30,
|
|
),
|
|
]
|
|
|
|
TECH_KEYWORDS = {
|
|
"frontend": [
|
|
"vue",
|
|
"react",
|
|
"typescript",
|
|
"javascript",
|
|
"css",
|
|
"scss",
|
|
"tailwind",
|
|
"component",
|
|
"props",
|
|
"emit",
|
|
"template",
|
|
"style",
|
|
],
|
|
"backend": [
|
|
"fastapi",
|
|
"flask",
|
|
"django",
|
|
"sqlalchemy",
|
|
"postgres",
|
|
"mysql",
|
|
"redis",
|
|
"celery",
|
|
"async",
|
|
"await",
|
|
"docker",
|
|
"kubernetes",
|
|
"k8s",
|
|
"api",
|
|
"endpoint",
|
|
"route",
|
|
],
|
|
"ai": [
|
|
"llm",
|
|
"ollama",
|
|
"openai",
|
|
"claude",
|
|
"prompt",
|
|
"embedding",
|
|
"rag",
|
|
"vector",
|
|
"model",
|
|
"training",
|
|
"inference",
|
|
"token",
|
|
"context",
|
|
],
|
|
}
|