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

186 lines
6.3 KiB
Python
Raw 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 Task Model
审核任务模型 - 支持过程中审核和生成后审核两种模式
## 审核模式说明
### 1. 过程中审核 (Process Review)
- 触发时机Agent在流式输出过程中自主识别需要审核的内容
- 阻塞方式:阻塞式等待用户确认
- 消失方式:用户确认后自动销毁,不需要留存记录
- 交互位置:在聊天界面完成
### 2. 生成后审核 (Post-Creation Review)
- 触发时机:剧集生成完成后自动检查
- 触发源:根据用户配置的审核规则/Skill
- 阈值判断:根据阈值判断是否报告问题
- 存留方式:留存记录,用户可以确认问题、忽略问题、修改内容
"""
from pydantic import BaseModel, Field
from typing import Dict, List, Optional, Any
from datetime import datetime
from enum import Enum
# ============================================
# 枚举类型
# ============================================
class ReviewMode(str, Enum):
"""审核模式"""
PROCESS = "process" # 过程中审核
POST_CREATION = "post_creation" # 生成后审核
class ReviewTriggerSource(str, Enum):
"""审核触发来源"""
AGENT_AUTO = "agent_auto" # Agent自主识别
USER_CONFIGURED_SKILL = "user_skill" # 用户配置的Skill
USER_CONFIGURED_RULE = "user_rule" # 用户配置的规则
MANUAL_REQUEST = "manual" # 手动请求
class ReviewTaskStatus(str, Enum):
"""审核任务状态"""
PENDING = "pending" # 等待处理
AWAITING_USER = "awaiting_user" # 等待用户确认
APPROVED = "approved" # 已确认
REJECTED = "rejected" # 已拒绝
MODIFIED = "modified" # 已修改内容
IGNORED = "ignored" # 已忽略
COMPLETED = "completed" # 已完成(自动销毁)
class ReviewAction(str, Enum):
"""用户可执行的操作"""
CONFIRM = "confirm" # 确认继续
MODIFY = "modify" # 修改内容
IGNORE = "ignore" # 忽略问题
OTHER = "other" # 其他补充信息
# ============================================
# 审核任务模型
# ============================================
class ReviewTaskLocation(BaseModel):
"""审核任务位置信息"""
episode_number: Optional[int] = Field(None, description="集数")
scene_number: Optional[int] = Field(None, description="场景编号")
section: Optional[str] = Field(None, description="章节/段落")
line_number: Optional[int] = Field(None, description="行号")
content_snippet: Optional[str] = Field(None, description="相关内容片段")
class ReviewTask(BaseModel):
"""
审核任务
包含问题类型、位置、严重程度等信息
"""
id: str = Field(..., description="任务ID")
project_id: str = Field(..., description="项目ID")
episode_id: Optional[str] = Field(None, description="剧集ID")
# 审核模式和来源
mode: ReviewMode = Field(..., description="审核模式")
trigger_source: ReviewTriggerSource = Field(..., description="触发来源")
# 任务信息
issue_type: str = Field(..., description="问题类型")
issue_description: str = Field(..., description="问题描述")
severity: str = Field(..., description="严重程度: low/medium/high")
location: ReviewTaskLocation = Field(..., description="问题位置")
# 审核配置来源
review_config_id: Optional[str] = Field(None, description="触发的审核配置ID")
skill_id: Optional[str] = Field(None, description="使用的Skill ID")
rule_id: Optional[str] = Field(None, description="触发的规则ID")
# 可用操作
available_actions: List[ReviewAction] = Field(
default_factory=list,
description="用户可执行的操作列表"
)
# 状态和用户响应
status: ReviewTaskStatus = Field(
default=ReviewTaskStatus.PENDING,
description="任务状态"
)
user_response: Optional[str] = Field(None, description="用户的响应内容")
# 时间戳
created_at: datetime = Field(default_factory=datetime.now, description="创建时间")
completed_at: Optional[datetime] = Field(None, description="完成时间")
expires_at: Optional[datetime] = Field(None, description="过期时间(过程审核自动销毁)")
# 附加信息
context_data: Optional[Dict[str, Any]] = Field(
default_factory=dict,
description="附加上下文数据"
)
suggestion: Optional[str] = Field("", description="修改建议")
# ============================================
# 请求/响应模型
# ============================================
class ProcessReviewRequest(BaseModel):
"""
过程中审核请求 - 由Agent推送
"""
project_id: str
issue_type: str
issue_description: str
severity: str # low/medium/high
location: ReviewTaskLocation
trigger_source: ReviewTriggerSource = ReviewTriggerSource.AGENT_AUTO
review_config_id: Optional[str] = None
skill_id: Optional[str] = None
rule_id: Optional[str] = None
suggestion: Optional[str] = None
class ProcessReviewResponse(BaseModel):
"""
过程中审核响应
"""
task_id: str
status: ReviewTaskStatus
message: str
class UserReviewActionRequest(BaseModel):
"""
用户审核操作请求
"""
action: ReviewAction
task_id: str
user_response: Optional[str] = Field(None, description="用户补充信息")
modified_content: Optional[str] = Field(None, description="修改后的内容")
class PostCreationReviewRequest(BaseModel):
"""
生成后审核请求
"""
project_id: str
episode_id: str
use_configured_rules: bool = Field(True, description="是否使用配置的规则")
use_configured_skills: bool = Field(True, description="是否使用配置的Skills")
dimensions: Optional[List[str]] = Field(None, description="指定审核维度")
pass_threshold: Optional[float] = Field(None, description="通过阈值")
class PostCreationReviewResult(BaseModel):
"""
生成后审核结果
"""
task_count: int = Field(..., description="生成的任务数")
passed: bool = Field(..., description="是否通过审核(没有高严重度问题)")
tasks: List[ReviewTask] = Field(default_factory=list, description="审核任务列表")
overall_score: Optional[float] = Field(None, description="总体分数")