289 lines
11 KiB
Python
289 lines
11 KiB
Python
"""模型能力矩阵核心模型
|
||
|
||
AI 开发团队专属垂直能力矩阵的数据模型,包括:
|
||
- ModelCapabilityGap: 模型能力差距记录(认知差预警)
|
||
- CostTracking: 算力成本跟踪与 ROI 核算
|
||
- ModelUpdateImpact: 模型更新影响评估(阶段2)
|
||
- ExperimentTruthNodeSync: 实验与宪章同步记录(阶段2)
|
||
"""
|
||
from datetime import datetime
|
||
from typing import Optional
|
||
|
||
from sqlalchemy import BigInteger, DECIMAL, Boolean, Float, ForeignKey, Integer, Text, VARCHAR, TIMESTAMP
|
||
from sqlalchemy.orm import Mapped, mapped_column
|
||
|
||
from .base import Base
|
||
from .types import JSONB
|
||
|
||
|
||
class ModelCapabilityGap(Base):
|
||
"""模型能力差距记录 - AI 预警认知差
|
||
|
||
当需求与绑定的模型能力不匹配时,自动生成差距记录,
|
||
提前预警产品经理和技术团队,规避返工风险。
|
||
"""
|
||
__tablename__ = "model_capability_gaps"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
model_version_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("model_versions.id"), nullable=False, index=True
|
||
)
|
||
truth_node_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("truth_nodes.id"), nullable=False, index=True
|
||
)
|
||
|
||
# 差距类型:capability(能力不足)、cost(成本过高)、performance(性能不符)、risk(兼容性风险)
|
||
gap_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, index=True)
|
||
|
||
# 严重程度:critical(严重,必须解决)、high(高,建议解决)、medium(中)、low(低)
|
||
severity: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True)
|
||
|
||
# 差距描述和 AI 分析
|
||
description: Mapped[str] = mapped_column(Text, nullable=False)
|
||
ai_analysis: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 状态:open(待处理)、acknowledged(已确认)、resolved(已解决)、ignored(已忽略)
|
||
status: Mapped[str] = mapped_column(
|
||
VARCHAR(50), nullable=False, default="open", index=True
|
||
)
|
||
|
||
# 解决时间
|
||
resolved_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
||
|
||
# 解决方案备注
|
||
resolution_notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
|
||
|
||
class CostTracking(Base):
|
||
"""算力成本跟踪与 ROI 核算
|
||
|
||
跟踪每个需求(宪章)、每个任务的算力成本,
|
||
自动计算 ROI,实现成本透明化。
|
||
"""
|
||
__tablename__ = "cost_trackings"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
|
||
# 关联的宪章(需求)
|
||
truth_node_id: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger, ForeignKey("truth_nodes.id"), nullable=True, index=True
|
||
)
|
||
|
||
# 关联的模型版本
|
||
model_version_id: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger, ForeignKey("model_versions.id"), nullable=True
|
||
)
|
||
|
||
# 关联的任务(可选,用于任务级成本追踪)
|
||
task_id: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger, ForeignKey("tasks.id"), nullable=True, index=True
|
||
)
|
||
|
||
# 周期:daily、weekly、monthly、project(项目全周期)
|
||
period: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True)
|
||
|
||
# Token 数量
|
||
estimated_tokens: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
||
actual_tokens: Mapped[int] = mapped_column(Integer, nullable=False, default=0)
|
||
|
||
# 成本(美元)
|
||
estimated_cost_usd: Mapped[float] = mapped_column(
|
||
DECIMAL(10, 4), nullable=False, default=0.0
|
||
)
|
||
actual_cost_usd: Mapped[float] = mapped_column(
|
||
DECIMAL(10, 4), nullable=False, default=0.0
|
||
)
|
||
|
||
# ROI 评分(0-10)
|
||
roi_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
|
||
|
||
# ROI 分析详情
|
||
roi_analysis: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 成本优化建议
|
||
optimization_suggestions: Mapped[dict] = mapped_column(
|
||
JSONB, nullable=False, default=dict
|
||
)
|
||
|
||
|
||
class ModelUpdateImpact(Base):
|
||
"""模型更新影响评估
|
||
|
||
当监控到新模型发布时,自动评估对现有项目的影响,
|
||
生成迁移任务和调整建议。
|
||
"""
|
||
__tablename__ = "model_update_impacts"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
|
||
# 旧模型和新模型
|
||
old_model_version_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("model_versions.id"), nullable=False
|
||
)
|
||
new_model_version_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("model_versions.id"), nullable=False
|
||
)
|
||
|
||
# 受影响的宪章及其影响评分 {node_id: impact_score}
|
||
affected_truth_nodes: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 成本变化百分比
|
||
cost_change_percentage: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
|
||
|
||
# 性能变化 {speed_change_percent, quality_change_percent, etc.}
|
||
performance_change: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 兼容性风险列表
|
||
compatibility_risks: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 自动生成的迁移任务
|
||
migration_tasks: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# 升级建议:immediate_upgrade(立即升级)、evaluate(评估后升级)、defer(暂缓升级)
|
||
recommendation: Mapped[str] = mapped_column(VARCHAR(50), nullable=False)
|
||
|
||
# 状态:pending_review(待审核)、approved(已批准)、in_progress(进行中)、completed(已完成)
|
||
status: Mapped[str] = mapped_column(
|
||
VARCHAR(50), nullable=False, default="pending_review"
|
||
)
|
||
|
||
|
||
class ExperimentTruthNodeSync(Base):
|
||
"""实验与宪章同步记录
|
||
|
||
算法工程师的实验结果自动同步到项目宪章,
|
||
确保实验与落地不脱节。
|
||
"""
|
||
__tablename__ = "experiment_truth_node_syncs"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
|
||
# 关联的实验(需要 Experiment 表,如果不存在可以先创建外键约束)
|
||
experiment_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True)
|
||
|
||
# 实验标识(用于关联外部实验平台)
|
||
experiment_external_id: Mapped[Optional[str]] = mapped_column(VARCHAR(255), nullable=True)
|
||
|
||
# 关联的宪章
|
||
truth_node_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("truth_nodes.id"), nullable=False, index=True
|
||
)
|
||
|
||
# 同步类型:result_sync(结果同步)、metric_update(指标更新)、conclusion_sync(结论同步)
|
||
sync_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False)
|
||
|
||
# 同步数据(包含实验结果、建议的变更等)
|
||
sync_data: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
# AI 置信度(0-1)
|
||
confidence_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True)
|
||
|
||
# 是否自动应用
|
||
auto_applied: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
|
||
|
||
# 应用状态:pending(待应用)、applied(已应用)、rejected(已拒绝)、requires_review(需审核)
|
||
apply_status: Mapped[str] = mapped_column(
|
||
VARCHAR(50), nullable=False, default="pending"
|
||
)
|
||
|
||
# 审核意见
|
||
review_notes: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
|
||
# 审核人
|
||
reviewed_by: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger, ForeignKey("users.id"), nullable=True
|
||
)
|
||
|
||
# 审核时间
|
||
reviewed_at: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
||
|
||
|
||
class Budget(Base):
|
||
"""预算设置
|
||
|
||
按租户、项目设置月度/季度预算,
|
||
实现硬性预算管控。
|
||
"""
|
||
__tablename__ = "budgets"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
|
||
# 预算类型:tenant(租户级)、project(项目级)
|
||
budget_type: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, index=True)
|
||
|
||
# 关联项目(project 类型时使用)
|
||
project_id: Mapped[Optional[int]] = mapped_column(
|
||
BigInteger, ForeignKey("projects.id"), nullable=True, index=True
|
||
)
|
||
|
||
# 周期:monthly、quarterly、yearly
|
||
period: Mapped[str] = mapped_column(VARCHAR(20), nullable=False)
|
||
|
||
# 预算金额(美元)
|
||
budget_amount_usd: Mapped[float] = mapped_column(
|
||
DECIMAL(12, 2), nullable=False, default=0.0
|
||
)
|
||
|
||
# 预警阈值(百分比,默认 80%)
|
||
alert_threshold_percent: Mapped[float] = mapped_column(
|
||
Float, nullable=False, default=80.0
|
||
)
|
||
|
||
# 硬性限制(是否启用硬性预算控制)
|
||
hard_limit_enabled: Mapped[bool] = mapped_column(Boolean, nullable=False, default=True)
|
||
|
||
# 当前已使用金额
|
||
current_usage_usd: Mapped[float] = mapped_column(
|
||
DECIMAL(12, 2), nullable=False, default=0.0
|
||
)
|
||
|
||
# 当前周期(用于跟踪每月/每季度的使用情况)
|
||
current_period_start: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
||
current_period_end: Mapped[Optional[datetime]] = mapped_column(TIMESTAMP, nullable=True)
|
||
|
||
# 状态:active(激活)、suspended(暂停,超支后暂停)、overridden(被覆盖)
|
||
status: Mapped[str] = mapped_column(
|
||
VARCHAR(20), nullable=False, default="active"
|
||
)
|
||
|
||
# 超支解锁记录(OWNER/REVIEWER 可以临时解锁)
|
||
override_history: Mapped[dict] = mapped_column(JSONB, nullable=False, default=dict)
|
||
|
||
|
||
class BudgetAlert(Base):
|
||
"""预算预警记录
|
||
|
||
当预算使用达到预警阈值或超支时,自动生成预警记录。
|
||
"""
|
||
__tablename__ = "budget_alerts"
|
||
|
||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||
|
||
# 关联预算
|
||
budget_id: Mapped[int] = mapped_column(
|
||
BigInteger, ForeignKey("budgets.id"), nullable=False, index=True
|
||
)
|
||
|
||
# 预警类型:threshold_reached(达到阈值)、exceeded(超支)、suspended(暂停服务)
|
||
alert_type: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, index=True)
|
||
|
||
# 当前使用量
|
||
usage_usd: Mapped[float] = mapped_column(DECIMAL(12, 2), nullable=False)
|
||
|
||
# 使用百分比
|
||
usage_percent: Mapped[float] = mapped_column(Float, nullable=False)
|
||
|
||
# 预警消息
|
||
message: Mapped[str] = mapped_column(Text, nullable=False)
|
||
|
||
# 是否已读
|
||
is_read: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False)
|
||
|
||
# 预警操作(如暂停服务)
|
||
action_taken: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True)
|
||
|
||
# 状态:active(激活)、dismissed(已忽略)、resolved(已解决)
|
||
status: Mapped[str] = mapped_column(
|
||
VARCHAR(20), nullable=False, default="active"
|
||
)
|