9df4868191
- 修正 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>
78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
"""
|
||
一次性脚本:将 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}") |