看板升级: GT v0.5.0(20期叙事结构全覆盖) + schema加字段方案 + git清理
- ground-truth v0.5.0: 补完10期narrative_structure标注(MiMo跑批+制片人审定) - summarize.py: 修复无标注期次格式化崩溃 - 003_add_ai_labels.sql: episodes表加7列(6打标+1置信度)迁移文件 - episode.py: Model同步加7个Optional字段 - CLAUDE.md: 项目主控文件入库 - doco/deliverables: 20期终版文稿md入库 - doco/programs: 中间产物从git移除(本地保留), .gitignore统一管理 - note/寄存条: 两个子项目寄存条入库 - .gitignore: 补充doco中间产物/Excel锁文件/临时文件规则 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -9,12 +9,15 @@
|
||||
|
||||
from datetime import date, datetime
|
||||
|
||||
from typing import Any
|
||||
|
||||
from sqlalchemy import Column
|
||||
from sqlalchemy import DateTime as SADateTime
|
||||
from sqlalchemy import Text
|
||||
from sqlalchemy import Boolean as SABoolean
|
||||
from sqlalchemy import Integer as SAInteger
|
||||
from sqlalchemy import Numeric as SANumeric
|
||||
from sqlalchemy.dialects.postgresql import JSONB
|
||||
from sqlalchemy.sql import func as sa_func
|
||||
from sqlmodel import Field, SQLModel
|
||||
|
||||
@@ -55,6 +58,17 @@ class Episode(SQLModel, table=True):
|
||||
# 责编备注
|
||||
notes: str | None = Field(default=None)
|
||||
|
||||
# ── AI 打标字段(看板升级 L2→L3)──
|
||||
# 全部可空:旧数据不填,AI 打标 + 制片人审核后写入
|
||||
# 枚举值在应用层校验,不加数据库 CHECK 约束
|
||||
program_format: str | None = Field(default=None, max_length=20) # 主题材(单选)
|
||||
equipment_domain: Any | None = Field(default=None, sa_column=Column(JSONB)) # 装备域(多选)
|
||||
scene_tags: Any | None = Field(default=None, sa_column=Column(JSONB)) # 场景标签(多选)
|
||||
tech_tags: Any | None = Field(default=None, sa_column=Column(JSONB)) # 技术线标签(多选)
|
||||
narrative_structure: str | None = Field(default=None, max_length=20) # 叙事结构(单选)
|
||||
opening_hook: str | None = Field(default=None, max_length=10) # 开篇钩子(单选)
|
||||
ai_label_confidence: str | None = Field(default=None, max_length=10) # draft/reviewed/inferred
|
||||
|
||||
created_at: datetime | None = Field(
|
||||
default=None,
|
||||
sa_column=Column(SADateTime(timezone=True), nullable=False, server_default=sa_func.now()),
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
-- 003_add_ai_labels.sql
|
||||
-- 为 episodes 表添加 AI 打标字段(看板升级 L2→L3 桥梁)
|
||||
-- 前置:执行前先 pg_dump 备份
|
||||
-- 全部 nullable,不影响现有数据
|
||||
|
||||
ALTER TABLE episodes
|
||||
ADD COLUMN IF NOT EXISTS program_format VARCHAR(20),
|
||||
ADD COLUMN IF NOT EXISTS equipment_domain JSONB,
|
||||
ADD COLUMN IF NOT EXISTS scene_tags JSONB,
|
||||
ADD COLUMN IF NOT EXISTS tech_tags JSONB,
|
||||
ADD COLUMN IF NOT EXISTS narrative_structure VARCHAR(20),
|
||||
ADD COLUMN IF NOT EXISTS opening_hook VARCHAR(10),
|
||||
ADD COLUMN IF NOT EXISTS ai_label_confidence VARCHAR(10);
|
||||
|
||||
-- 分析引擎常用分组查询索引
|
||||
CREATE INDEX IF NOT EXISTS idx_episodes_program_format ON episodes (program_format);
|
||||
CREATE INDEX IF NOT EXISTS idx_episodes_narrative_structure ON episodes (narrative_structure);
|
||||
CREATE INDEX IF NOT EXISTS idx_episodes_ai_label_confidence ON episodes (ai_label_confidence);
|
||||
|
||||
COMMENT ON COLUMN episodes.program_format IS '主题材(单选): 装备深解/横切类比/历史纵深/前沿科技/事件战例/人物牵引';
|
||||
COMMENT ON COLUMN episodes.equipment_domain IS '装备域(多选JSONB数组): 陆战装备/海军舰船/航空航天/导弹与反导/信息化/后勤保障/轻武器/跨域/其他';
|
||||
COMMENT ON COLUMN episodes.scene_tags IS '场景标签(多选JSONB数组): 节点策划/热点跟进/装备首发/展会';
|
||||
COMMENT ON COLUMN episodes.tech_tags IS '技术线标签(多选JSONB数组): 无人作战/智能化/有人无人协同';
|
||||
COMMENT ON COLUMN episodes.narrative_structure IS '叙事结构(单选): 主线演进/并列结构';
|
||||
COMMENT ON COLUMN episodes.opening_hook IS '开篇钩子(单选): 强/中/弱';
|
||||
COMMENT ON COLUMN episodes.ai_label_confidence IS '打标状态: draft(AI草稿)/reviewed(制片人确认)/inferred(标题推断)';
|
||||
Reference in New Issue
Block a user