Files
tps-dashboard/scripts/import_content_digests.py
T
simonkoson 9df4868191 feat: L4 AI 诊断报告优化 + Prompt/摘要卡/迁移/文档完善
- 修正 DeepSeek 模型名 deepseek-chat → deepseek-v4-pro
- 摘要块:修复 **粗体** markdown 渲染、左右块可滚动、左块固定粉红色系
- 新增 prompt4(内容摘要卡)+ prompt5(诊断报告)+ 三处 prompt5 优化
- 新增 004 迁移(episodes +content_digest JSONB)、导入脚本、摘要卡生成脚本
- 更新 CLAUDE.md 状态栏/进度/交接备注/关键决策

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-03 21:25:38 +08:00

78 lines
2.5 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.
"""
一次性脚本:将 AI 生成的内容摘要卡写入 episodes 表的 content_digest 字段
数据来源:ai-labeling/experiments/content_digests/_all_digests.json
前置:先手动执行 backend/sql/004_add_content_digest.sql 添加字段
"""
import sys
import os
import json
from datetime import date
# Windows 终端中文输出
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
# 加 backend 到 path
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'backend'))
from app.db.session import get_session
from app.models.episode import Episode
from app.models.user import User # FK 解析需要
from sqlmodel import select
# ── 1. 读 digest 数据 ──
project_root = os.path.join(os.path.dirname(__file__), '..')
digest_file = os.path.join(project_root, 'ai-labeling', 'experiments', 'content_digests', '_all_digests.json')
with open(digest_file, 'r', encoding='utf-8') as f:
all_digests = json.load(f)
print(f"读入 {len(all_digests)} 条摘要记录")
# ── 2. 逐条匹配并写入 ──
session = next(get_session())
success = 0
skipped = 0
mismatch = 0
for d in all_digests:
ep_num = d['ep']
digest_date = d['date'] # "2026-04-21" 格式
# 查 episode
ep = session.exec(select(Episode).where(Episode.episode_number == ep_num)).first()
if not ep:
print(f"⚠️ ep{ep_num:02d} 在数据库中不存在,跳过")
skipped += 1
continue
# 校验日期
if str(ep.air_date) != digest_date:
print(f"⚠️ ep{ep_num:02d} 日期不匹配: DB={ep.air_date}, digest={digest_date},跳过")
mismatch += 1
continue
# 写入(只存 digest 字段,不存外壳的 ep/date/title/editor/filename/generated_at
ep.content_digest = d['digest']
session.add(ep)
success += 1
print(f"✅ ep{ep_num:02d} {ep.program_name} <- digest 已写入")
session.commit()
# ── 3. 打印统计 ──
print()
print(f"=== 统计 ===")
print(f"成功写入: {success}")
print(f"跳过(不存在): {skipped}")
print(f"跳过(日期不匹配): {mismatch}")
print(f"总记录: {len(all_digests)}")
# ── 4. 验证:所有 episodes 的 content_digest 状态 ──
print()
print(f"=== 验证: episodes content_digest 状态 ===")
all_eps = session.exec(select(Episode).order_by(Episode.episode_number)).all()
for e in all_eps:
has_digest = "✅" if e.content_digest is not None else "❌"
print(f"ep{e.episode_number:02d} | {e.program_name} | {e.air_date} | digest: {has_digest}")