""" 场景挖掘模块的数据模型 """ from typing import Optional, List, Dict, Any from pydantic import BaseModel, Field # ==================== 请求模型 ==================== class CompanyInfo(BaseModel): """企业信息""" industry: List[str] = Field(..., description="行业列表") description: str = Field(..., description="企业描述") data_scale: str = Field(..., description="数据规模") data_sources: List[str] = Field(..., description="数据来源") class DataAsset(BaseModel): """数据资产""" name: str = Field(..., description="资产名称") core_tables: List[str] = Field(..., description="核心表名列表") description: str = Field(..., description="资产描述") class ExistingScenario(BaseModel): """存量场景""" name: str = Field(..., description="场景名称") description: str = Field(..., description="场景描述") class ScenarioRecommendationOptions(BaseModel): """场景推荐选项""" model: Optional[str] = Field("qwen-max", description="大模型选择") recommendation_count: int = Field(10, ge=1, le=20, description="推荐数量") exclude_types: List[str] = Field(default_factory=list, description="排除的场景类型") class ScenarioRecommendationRequest(BaseModel): """场景推荐请求""" project_id: str = Field(..., description="项目ID") company_info: CompanyInfo = Field(..., description="企业信息") data_assets: List[DataAsset] = Field(..., description="数据资产列表") existing_scenarios: List[ExistingScenario] = Field( default_factory=list, description="存量场景列表" ) options: Optional[ScenarioRecommendationOptions] = Field(None, description="可选配置") class Config: json_schema_extra = { "example": { "project_id": "project_001", "company_info": { "industry": ["retail-fresh"], "description": "某连锁生鲜零售企业,主营水果、蔬菜等生鲜产品", "data_scale": "100TB", "data_sources": ["self-generated"] }, "data_assets": [ { "name": "会员基础信息表", "core_tables": ["Dim_Customer"], "description": "存储C端注册用户的核心身份信息" }, { "name": "订单流水记录表", "core_tables": ["Fact_Sales"], "description": "全渠道销售交易明细" } ], "existing_scenarios": [ { "name": "月度销售经营报表", "description": "统计各区域门店的月度GMV,维度单一" } ], "options": { "model": "qwen-max", "recommendation_count": 10, "exclude_types": [] } } } # ==================== 响应模型 ==================== class RecommendedScenario(BaseModel): """推荐场景""" id: int = Field(..., ge=1, description="场景ID") name: str = Field(..., description="场景名称") type: str = Field(..., description="场景类型") recommendation_index: int = Field(..., ge=1, le=5, description="推荐指数(1-5星)") desc: str = Field(..., description="场景描述") dependencies: List[str] = Field(..., description="依赖的数据资产") business_value: str = Field(..., description="商业价值") implementation_difficulty: str = Field(..., description="实施难度") estimated_roi: str = Field(..., description="预估ROI") technical_requirements: List[str] = Field(..., description="技术要求") data_requirements: List[str] = Field(..., description="数据要求") class ScenarioRecommendationResponse(BaseModel): """场景推荐响应""" recommended_scenarios: List[RecommendedScenario] = Field(..., description="推荐场景列表") total_count: int = Field(..., ge=0, description="总场景数") generation_time: float = Field(..., ge=0, description="生成耗时(秒)") model_used: str = Field(..., description="使用的大模型")