Files
aiagent/backend/app/services/scenario_dsl.py

40 lines
1.4 KiB
Python
Raw Normal View History

"""
统一场景 DSL阶段 3场景可编程输入契约供入口 / 模板 / 外部系统对齐
"""
from typing import Any, Dict, List, Tuple
from pydantic import BaseModel, Field
class ScenarioDSL(BaseModel):
"""标准输入:目标、约束、产物、验收 + 业务载荷。"""
version: str = "1"
scene: str = Field(default="", description="场景标识,如 customer_service / dev_codegen")
goal: str = Field(default="", description="业务目标")
constraints: List[str] = Field(default_factory=list, description="硬约束")
deliverables: List[str] = Field(default_factory=list, description="期望产出")
acceptance: List[str] = Field(default_factory=list, description="验收标准")
payload: dict[str, Any] = Field(default_factory=dict, description="扩展键值")
def validate_scenario_dsl(raw: Any) -> Tuple[bool, List[str]]:
"""
校验场景 DSL根须为 object字段通过 Pydantic 校验
Returns:
(是否通过, 错误文案列表)
"""
if not isinstance(raw, dict):
return False, ["DSL 根须为 JSON object"]
try:
ScenarioDSL.model_validate(raw)
except Exception as e:
return False, [str(e)]
return True, []
def normalize_scenario_dsl(raw: dict) -> Dict[str, Any]:
"""校验后得到规范 dict便于写入节点上下文。"""
return ScenarioDSL.model_validate(raw).model_dump()