hjjjj 5487450f34 feat: 实现审核系统核心功能与UI优化
- 新增审核卡片和确认卡片模型,支持Agent推送审核任务和用户确认
- 实现审核卡片API服务,支持创建、更新、批准、驳回等操作
- 扩展审核维度配置,新增角色一致性、剧情连贯性等维度
- 优化前端审核配置页面,修复API路径错误和状态枚举问题
- 改进剧集创作平台布局,新增左侧边栏用于剧集管理和上下文查看
- 增强Skill管理,支持从审核系统跳转创建/编辑Skill
- 修复episodes.json数据问题,清理聊天历史记录
- 更新Agent提示词,明确Skill引用加载流程
- 统一前端主题配置,优化整体UI体验
2026-01-30 18:32:48 +08:00

104 lines
4.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Review Card Model
审核卡片模型 - 持久化存储的审核任务卡片
与ReviewTask的关系
- ReviewCard是用户可见的卡片包含审核任务的所有信息
- ReviewTask是系统内部的审核任务可能不持久化
- 一个ReviewCard可能包含多个ReviewTask如多集审核
- 过程中审核完成后转换为ReviewCard持久化存储
"""
from pydantic import BaseModel, Field
from typing import Dict, List, Optional, Any
from datetime import datetime
from enum import Enum
class ReviewCardType(str, Enum):
"""审核卡片类型"""
PROCESS_AUTO = "process_auto" # 过程中Agent自主识别
POST_CREATION_AUTO = "post_creation_auto" # 生成后自动审核
USER_REQUEST_EPISODE = "user_episode" # 用户请求单集审核
USER_REQUEST_MULTIPLE = "user_multiple" # 用户请求多集审核
USER_REQUEST_ALL = "user_all" # 用户请求全集审核
class ReviewCardStatus(str, Enum):
"""审核卡片状态"""
PENDING = "pending" # 待处理
AWAITING_USER = "awaiting_user" # 待确认
APPROVED = "approved" # 已通过
REJECTED = "rejected" # 已驳回
class ReviewCard(BaseModel):
"""
审核卡片 - 持久化存储
"""
# 基础信息
id: str = Field(..., description="卡片ID")
project_id: str = Field(..., description="项目ID")
episode_id: Optional[str] = Field(None, description="剧集ID单集审核")
episode_numbers: List[int] = Field(default_factory=list, description="涉及集数列表(多集审核)")
# 卡片类型和来源
card_type: ReviewCardType = Field(..., description="卡片类型")
trigger_source: str = Field(..., description="触发来源: agent_auto/user_configured/manual")
# 审核内容
episode_outline: Optional[str] = Field(None, description="剧集大纲")
episode_content: Optional[str] = Field(None, description="剧集内容")
review_reason: str = Field(..., description="审核原因")
# 审核结果
issues: List[Dict[str, Any]] = Field(default_factory=list, description="问题列表")
overall_score: Optional[float] = Field(None, description="总体分数")
severity: str = Field("medium", description="严重程度: low/medium/high")
# 审核配置
review_config_id: Optional[str] = Field(None, description="使用的审核配置ID")
applied_skills: List[str] = Field(default_factory=list, description="应用的Skills")
applied_rules: List[str] = Field(default_factory=list, description="应用的规则")
# 用户操作
status: ReviewCardStatus = Field(default=ReviewCardStatus.PENDING, description="卡片状态")
user_comment: Optional[str] = Field(None, description="用户评论")
modified_content: Optional[str] = Field(None, description="修改后的内容")
# 时间戳
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
updated_at: datetime = Field(default_factory=datetime.now, description="更新时间")
completed_at: Optional[datetime] = Field(None, description="完成时间")
# 附加信息
metadata: Dict[str, Any] = Field(default_factory=dict, description="附加元数据")
class Config:
use_enum_values = False
class ReviewCardCreate(BaseModel):
"""创建审核卡片请求"""
project_id: str
episode_id: Optional[str] = None
episode_numbers: List[int] = Field(default_factory=list)
card_type: ReviewCardType
trigger_source: str
review_reason: str
episode_outline: Optional[str] = None
episode_content: Optional[str] = None
review_config_id: Optional[str] = None
severity: str = "medium"
issues: List[Dict[str, Any]] = Field(default_factory=list)
overall_score: Optional[float] = None
class ReviewCardUpdate(BaseModel):
"""更新审核卡片请求"""
status: Optional[ReviewCardStatus] = None
user_comment: Optional[str] = None
modified_content: Optional[str] = None
issues: Optional[List[Dict[str, Any]]] = None
overall_score: Optional[float] = None