Files
tps-dashboard/note/续接快照_看板分析升级_设计讨论_v4.md

378 lines
18 KiB
Markdown
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.
# 续接快照 — 看板分析升级 v4(AI 打标流水线落地 + 模型选型完成)
> 用途:下次新 chat 接力用。承接 2026-06-09 v1 + 2026-06-10 v2 + 2026-06-11 上午 v3,包含 2026-06-11 一整天讨论。
> 状态:AI 打标流水线跑通;Prompt 2 v0.2 锁定;ground-truth v0.2.1 锁定;模型选型完成 → **MiniMax M3 + Prompt v0.2 = 100% 命中率**;Git 已推 Gitea 落库。
> 更新时间:2026-06-11(晚)
> 顾问:Claude Opus 4.7 制片人:刘通
---
## 零、本快照与 v1/v2/v3 的关系
v1/v2/v3 全部结论仍然有效,**v4 是增量,不替换**。今日新增 6 件大事:
1. AI 打标流水线从纸面落到能跑(脚本 + 配置 + 文稿入库 + 汇总工具)
2. Prompt 2 升级到 v0.2(加"段内承接 ≠ 全片骨架"陷阱教学)
3. ground-truth 经两轮复议升级到 v0.2.1(三期改判)
4. 三家模型在同一份"试卷"上公平对比完成
5. 模型选型拍板:**MiniMax M3**
6. Git 双 commit 推送 Gitea 落库(commit `38f3728` 是今天的里程碑)
---
## 一、今天的时间线(2026-06-11 一日)
| 阶段 | 关键动作 | 产出 |
|---|---|---|
| 上午 | 工作区目录搭建 + 10 期文稿导入 + ep04 单跑 | 9/10 自动导入成功,ep05 .doc 制片人手工另存补全 |
| 中段 | 发现 reasoning model 的 `<think>` 标签 bug → 修 `extract_json_from_response` | JSON 解析链路稳定 |
| Prompt v0.1 全跑 | M3 跑 10 期 | **5/10 = 50%**,全部"高置信" |
| 复议 1 | ep05/13/14 维持并列,ep10/15 改主线演进 | ground-truth v0.2 |
| Prompt 升级 | 加"段内承接陷阱"+ `chapter_list` + `shuffle_test` 强制思考字段 | Prompt 2 v0.2 |
| M3 二跑 | 9/10 = 90%,唯一错 ep12 | 锁定 v0.2 不再调 |
| DeepSeek V4 Pro | 70%,错的全是"应主线判并列",偏保守 | — |
| MiMo v2.5 Pro | 60%,两向都错 | — |
| 复议 2 | ep12 三家独立都判并列 → ground-truth 改 | ground-truth v0.2.1 |
| 最终战绩 | **M3 100% / DeepSeek 80% / MiMo 70%** | 选 M3 |
| 收尾 | Git 双 commit 推 Gitea | commit 38f3728 + edfb298 |
---
## 二、AI 打标流水线已落地资产
### 2.1 工作目录(`E:\tps-dashboard\ai-labeling\`)
```
ai-labeling/
├── benchmark-set/
│ ├── transcripts/ ← 10 期文稿 .md(基准卷子)
│ │ ├── ep03_硅基大脑.md
│ │ ├── ep04_潜艇仿生.md
│ │ ├── ep05_舰证不凡.md
│ │ ├── ep07_马年图鉴.md
│ │ ├── ep10_射速决定论.md
│ │ ├── ep11_空战颠覆者.md
│ │ ├── ep12_逆袭战局.md
│ │ ├── ep13_长短智慧.md
│ │ ├── ep14_X76飞机.md
│ │ └── ep15_空中坚盾.md
│ └── ground-truth.json ← 基准答案 v0.2.1
├── prompts/
│ └── prompt2_narrative.md ← 叙事结构判别 v0.2(5 示例,含两个陷阱反例)
├── experiments/ ← 跑批结果 .json(.gitignore 拦截,不入 git)
├── scripts/
│ ├── import_transcripts.py ← docx/doc → md 解析 + 清洗
│ ├── run_labeling.py ← 单期或批量调模型 + 写文件
│ └── summarize.py ← 扫 experiments/ 汇总命中率
├── .env.example ← 入 git 的 Key 占位模板
├── .env ← 不入 git,真 Key
├── .gitignore ← 拦 .env / experiments / __pycache__
└── README.md
```
### 2.2 三个关键脚本的分工
| 脚本 | 干什么 | 用法 |
|---|---|---|
| `import_transcripts.py` | 把源 docx/doc 拷+解析+清洗成 .md,落 transcripts/ | 已跑过一次,10 期都在;新文稿要扩源目录映射表 |
| `run_labeling.py` | 调模型,把 result + ground_truth 写进 experiments/ 一个 .json | `python scripts/run_labeling.py --ep N --model m3` |
| `summarize.py` | 扫 experiments/ 下指定 model 的最新 json,出 10 行命中表 + 汇总 | `python scripts/summarize.py --model m3` |
PowerShell 批量套路(模型选型阶段用,以后可作为标准跑法):
```powershell
cd E:\tps-dashboard\ai-labeling
3, 4, 5, 7, 10, 11, 12, 13, 14, 15 | ForEach-Object { python scripts/run_labeling.py --ep $_ --model m3 }
python scripts/summarize.py --model m3
```
### 2.3 MODEL_CONFIG 已配置的三家(`scripts/run_labeling.py`)
```python
MODEL_CONFIG = {
"m3": {
"base_url": "https://api.minimaxi.com/v1",
"model_name": "MiniMax-M3",
"api_key_env": "MINIMAX_API_KEY",
},
"deepseek-v4-pro": {
"base_url": "https://api.deepseek.com", # 注意:不带 /v1
"model_name": "deepseek-v4-pro",
"api_key_env": "DEEPSEEK_API_KEY",
},
"mimo-v2.5-pro": {
"base_url": "https://api.xiaomimimo.com/v1",
"model_name": "mimo-v2.5-pro",
"api_key_env": "MIMO_API_KEY",
},
}
```
依赖锁定(`scripts/requirements.txt`):
```
openai==1.55.0 # 不能升级,新版自动转 developer 角色,MiniMax 不支持
python-dotenv>=1.0.0
python-docx>=1.1.0
```
---
## 三、Prompt 2 v0.2 核心设计
(完整文件见 `ai-labeling/prompts/prompt2_narrative.md`,以下是要点摘录)
### 3.1 两档定义(收为 2 档,沿用 v3)
- **主线演进**:全片由"贯穿主线"串起来。主线可以是 a) 内在概念 / b) 时间因果链 / c) 性能阶梯
- **并列结构**:章节相互独立、可替换,共性只来自分类共性
### 3.2 关键边界(共 4 条 + 1 条核心新增)
1. 命名共性不构成主线
2. 装备域共性不构成主线
3. 空间方位共性不构成主线
4. **【v0.2 新增,最重要】段内承接 ≠ 全片骨架**——文稿里某段出现"递进""演进""阶梯""奠定基础"字样,**往往只是段内微观承接**,不是全片骨架。先识别全片大章节,再做章际打乱测试。
### 3.3 强制判断流程(v0.2 新增)
模型必须先输出 `chapter_list`(全片 3-5 个大章节)+ `shuffle_test`(打乱测试结论),才能下判断。避免它一看到"递进"两字就秒判主线演进。
### 3.4 5 个示例(2 主线 + 3 并列,平衡分布)
| 示例 | 类型 | 教学重点 |
|---|---|---|
| 潜艇仿生 | 主线演进-内在概念 | 同一命题贯穿全片 |
| 空战颠覆者 | 主线演进-时间线 | 严格按时间序推进 |
| 马年军事图鉴 | 并列结构-命名共性 | 高收视不靠结构,靠节点策划 |
| **舰证不凡** ⚠️ | **并列结构-警惕段内承接陷阱** | "递进式"字样在段内 ≠ 全片主线 |
| **X-76 飞行器** ⚠️ | **并列结构-警惕段内时间线陷阱** | 时间线只在"背景"段里 ≠ 全片骨架 |
### 3.5 JSON 输出 schema(新增两个强制思考字段)
```json
{
"narrative_structure": "主线演进 或 并列结构",
"chapter_list": ["大章节1", "大章节2", ...], v0.2 新增
"shuffle_test": "打乱后观众怎样的一句话", v0.2 新增
"main_thread": "主线演进时点明主线,并列填 null",
"reasoning": "判断理由,如果文稿有'递进'等字样必须说明是段内还是全片",
"key_evidence": ["证据片段1", "证据片段2"],
"confidence": "高 或 中 或 低",
"confidence_reason": "为什么这个置信度"
}
```
---
## 四、ground-truth v0.2.1 锁定的 10 期分布
| ep | 节目 | share | 叙事结构(v0.2.1) | 开篇钩子 | v0.1 → v0.2.1 变迁 |
|---|---|---|---|---|---|
| 3 | 硅基大脑 | 0.85 | 并列结构 | 中 | 未变 |
| 4 | 潜艇仿生 | 0.92 | 主线演进 | 强 | 未变 |
| 5 | 舰证不凡 | 0.72 | 并列结构 | 中 | 未变(经讨论后维持) |
| 7 | 马年军事图鉴 | 0.95 | 并列结构 | 强 | 未变 |
| 10 | 射速决定论 | 0.703 | **主线演进** | 弱 | v0.1 并列 → v0.2 主线(性能阶梯) |
| 11 | 空战颠覆者 | 0.859 | 主线演进 | 中 | 未变 |
| 12 | 逆袭战局 | 0.85 | **并列结构** | 强 | v0.1 主线 → v0.2.1 并列(三家独立都判并列) |
| 13 | 长短智慧 | 0.533 | 并列结构 | 中 | 未变(经讨论后维持) |
| 14 | X-76 飞行器 | 0.873 | 并列结构 | 中 | 未变(经讨论后维持) |
| 15 | 空中坚盾 | 0.875 | **主线演进** | 强 | v0.1 并列 → v0.2 主线(层级承接) |
**最终分布:5 主线 / 5 并列,平衡。** 此前 v0.1 是 3 主线 / 7 并列。
---
## 五、三家模型最终对比(基于 v0.2.1 修订版试卷)
### 5.1 命中率总表
| 期次 | 修订后标准 | **M3** | **DeepSeek V4 Pro** | **MiMo v2.5 Pro** |
|---|---|---|---|---|
| ep03 | 并列 | ✓ | ✓ | ✓ |
| ep04 | 主线 | ✓ | **✗** | ✓ |
| ep05 | 并列 | ✓ | ✓ | **✗** |
| ep07 | 并列 | ✓ | ✓ | ✓ |
| ep10 | 主线 | ✓ | **✗** | **✗** |
| ep11 | 主线 | ✓ | ✓ | ✓ |
| ep12 | 并列 | ✓ | ✓ | ✓ |
| ep13 | 并列 | ✓ | ✓ | ✓ |
| ep14 | 并列 | ✓ | ✓ | ✓ |
| ep15 | 主线 | ✓ | ✓ | **✗** |
| **命中率** | | **10/10 = 100%** | 8/10 = 80% | 7/10 = 70% |
| **错的方向** | | 无 | 全部"应主线判并列",**偏保守** | 两个方向都错 |
### 5.2 选型结论:MiniMax M3 完胜
理由不只在命中率,更在质量层:
| 维度 | M3 | DeepSeek | MiMo |
|---|---|---|---|
| 命中率 | **100%** | 80% | 70% |
| 三种主线识别能力(内在概念/时间线/性能阶梯/层级承接) | **全识别** | 漏识别 ep04(示例 1 直接教过的潜艇仿生都没认出来) | 漏 2 期主线 |
| Few-shot 学习力 | 强 | **弱**(连示例 1 同型的 ep04 都漏) | 中 |
| reasoning 质量 | chapter_list + shuffle_test + 时序验证完整 | 一般 | 一般 |
| 系统偏差 | 无 | **偏保守** | 偏向不稳定 |
**致命差距**:DeepSeek 连 Prompt 里"示例 1 直接教过的潜艇仿生"都没认出来——这说明它对 few-shot 示例的"听话度"较差,以后加再多反例也可能漏。
### 5.3 落地选型(冻结)
- **生产模型**:MiniMax M3
- **Prompt**:Prompt 2 v0.2(`ai-labeling/prompts/prompt2_narrative.md`)
- **基准卷子**:ground-truth v0.2.1(`ai-labeling/benchmark-set/ground-truth.json`)
- **回退方案**:如 M3 服务中断,DeepSeek V4 Pro 备选(虽然命中率较低,但稳定可用)
---
## 六、关键经验教训(下次接力的我必读)
### 6.1 reasoning model 的输出格式坑
MiniMax M3 是 reasoning model,输出格式是:
```
<think>
模型的内部推理过程(英文,几百字)
</think>
{真正的 JSON 输出}
```
直接 `json.loads(content)` 会失败。脚本里 `extract_json_from_response` 用正则剥掉 `<think>...</think>` 后再解析。**未来如果换其他 reasoning model(R1、o1 系列等)同样适用。**
### 6.2 段内承接 vs 全片骨架(Prompt 2 v0.2 的灵魂)
模型最容易栽的跟头是看到"递进""演进""阶梯"几个字就秒判主线演进。但这些字样常常**只在某一段内**(讲两件装备先后、某段背景的时间线等),不是全片骨架。
判别口诀(已写进 Prompt 2):**先看全片大章节(树干),再看段内细节(树叶)**。章节顺序能不能打乱才是主线判别的唯一依据。
### 6.3 ground-truth 是活的,不是写死的
v0.1 → v0.2(改两期)→ v0.2.1(改一期),共改三期。每次修改都因为发现 v0.1 标的判断与 v3 §1.1 自己定的判别规则有冲突,或者多家模型独立得出反向结论。
**纪律**:基准答案集每次升级,changelog 必须详细记录变更原因,不能"悄悄改"。未来用 pgvector 检索做动态示例集时,固化示例必须明确版本号 + 复议历史。
### 6.4 同一份卷子比三家 vs 优化单家
诱惑很大:M3 90% 后只差一题,继续调 Prompt 上 100% 应该不难。但**这样会过度适配 M3 的脾气**——同一个 Prompt 跑 DeepSeek/MiMo 反而下降。
实践证明:v0.2 Prompt 上 M3 100%,DeepSeek 也吃这套教学(从 70% 升 80%),MiMo 也吃(从 60% 升 70%)。**好的 Prompt 不是为某一家定制,而是把判别规则讲清楚,三家都受益。**
### 6.5 MiniMax M2.7(Cline 的 Plan/Act 模型)写长文件不稳定
中段 Cline 改 run_labeling.py 时撞过:
- `write_to_file` 长内容截断
- 改用辅助脚本生成主文件
- 改用 base64 编码绕过
- 触发 MiniMax 自己的 context 限制
**纪律**:涉及 ai-labeling/ 内文件改动,**老文件用 `replace_in_file` 局部改,新文件用 `write_to_file` 整体写**(<200 行才稳)。Prompt 和 ground-truth 这种长文件,**让制片人手工替换最稳**。
### 6.6 边界期是制片人 + 多家模型共审拍板
ep12 是个标志性案例:制片人 v0.1 标主线演进,M3/DeepSeek/MiMo 三家独立都判并列结构,经制片人复读稿后改并列。**这种"多家独立一致 + 人工复审"的双重证据机制,未来扩展示例集时是黄金流程。**
---
## 七、待办池(追加到 `backlog.md`)
继承 v3 §六的 4 条 + v4 新增 4 条:
### 继承 v3 §六
- **F1. AI 打标示例集更新纪律【优先级:中,上线后启用】**
示例集每月集中替换一次,不碎片化更新(吃 prompt 缓存红利)
- **F2. Prompt 1(4 分类字段)+ Prompt 3(开篇钩子)撰写【优先级:中,Prompt 2 已验证通过,可启动】**
按 Prompt 2 同样套路:Opus 写 → M3 跑基准 → 制片人审 → 锁定
- **F3. Decision 3 横轴量化方法落地【优先级:中】**
v2 §3 已基本定(栏目均值偏离),但还没真正算过 23 期具体数值
- **F4. 23 期回填确认(继承 v2 §5.5)**
ep15 空中坚盾原"空军防空"→确认改 `导弹与反导`?
ep16 启程远航装备域缺失,疑似 `海军舰船`
ep18 海上先锋·无人舰艇 → `海军舰船` + tech_tag=`无人作战`
### v4 新增
- **F5. opening_hook 字段尚未跑过 AI 验证【优先级:中,等 Prompt 3】**
10 期 ground-truth 里 opening_hook 是制片人读稿确认的,但还没让 AI 试着判过。Prompt 3 上线后跑一次,对答案看 M3 在开篇钩子上的命中率。
- **F6. 改 episodes schema 加 6 字段【优先级:高,但必须先切 Plan + Opus 审】**
字段:`program_format / equipment_domain / scene_tags / tech_tags / narrative_structure / opening_hook` + 1 个 `confidence` 字段。**纪律**:Cline 不许直接 Act,必须先 Plan + 我审过迁移方案。回补方案包括 23 期已标注的回填脚本。
- **F7. UI 必须区分置信度三档【优先级:中,Phase 4a/4b 看板设计时落地】**
特别警惕"AI 自评高置信但实际错判"的样本(模型不知道自己错了),UI 上要让制片人能一眼分辨"AI 草稿/制片人确认/标题推断"三档。
- **F8. prompt 缓存月度更新机制【优先级:低,上线后启用】**
v3 §3.7 已经写过纪律,执行时机是 AI 打标系统上线后第 1 个月起。
**追加方式**:你看完后告诉我,我给一段 Cline 指令把 F1-F8 这 8 条追加到 `backlog.md`(如果文件不存在就新建)。
---
## 八、纪律红线(沿用 v3 §七 + v4 增补)
沿用:
- 改表须 Opus 审,Cline 不得自行加字段
- AI 只出草稿、给方向,人拍板
- 不做编导排名(团队视角走"能力地图")
- 未审核字段不上看板,编导只看已确认数据
- AI 打标三个 prompt 独立,不合并
- 示例集每月集中更新,不碎片化(吃缓存红利)
- Prompt 内容不让 Cline 创作——Cline 是执行者不是作者,Prompt 由 Opus 写、Cline 落文件
**v4 新增红线**:
- **AI 打标实验工作区(`ai-labeling/`)与生产代码(`backend/`)严格隔离**
- **`ai-labeling/` 内改动允许 Cline 直接 Act**(沙盒,改坏重跑就是)
- **`backend/` 改动必须切 Plan + Opus 审**(生产代码,改 schema 加字段更要严)
- **长文件改动失败时,让制片人手工替换最稳**(避免 Cline 在 write_to_file 截断时套娃式 workaround)
- **改 ground-truth 必须留 changelog**(谁、何时、改了什么、为什么改)
---
## 九、技术备忘(沿用 v3 §八 + 新增)
沿用:
- 栈:React18 + Vite + AntD5 + Zustand FastAPI + SQLModel + PG16 + pgvector
- 图表:ECharts / @ant-design/charts
- 配色固化:米色底 `#fbf9f1`、深绿主色 `#6b8e6b`
- 三色色板:红 `#c0584f` / 蓝 `#5b8db8` / 绿 `#7aa874`
- 基础线 0.6448 / 摸高线 0.8989(2026)
v4 新增:
- AI 打标模型选型:**MiniMax M3** + `ai-labeling/prompts/prompt2_narrative.md` v0.2
- `summarize.py` 是模型选型基准工具,未来切其他模型继续用
- `experiments/*.json` 不进 git(.gitignore 拦截)
- `ground-truth.json` + `transcripts/*.md` 进 git(栏目核心资产)
- `requirements.txt` 锁 openai==1.55.0(不要升级)
---
## 十、Git 状态
里程碑 commit(2026-06-11 晚):
```
edfb298 chore: TPS 主项目素材积累(海报 logo + 样本 md)
38f3728 feat(ai-labeling): AI 打标实验工作区初始化 + 模型选型完成 ← 今天的硬核成果
ae04c7f chore: gitignore 忽略前端测试题图截图
ae9581e docs: 新增 claude 协作原则文件,backlog 待办池入库
b942907 docs: phase3_log 收尾,Task 3/4 记录归位
```
`ai-labeling/` 已在 Gitea 落地,任意时点可回溯。`.env` / `experiments/` / `__pycache__/` 全部被 `.gitignore` 拦住,无敏感泄露。
---
## 十一、下次开局第一句
> "续接 v3 → v4。AI 打标流水线已跑通,**MiniMax M3 + Prompt 2 v0.2 在 ground-truth v0.2.1 上命中率 100%**,模型选型完成。下一步推 Prompt 1(4 分类字段)+ Prompt 3(开篇钩子),按 v4 同样的'Opus 写 Prompt → M3 跑 10 期基准 → 制片人审 → 锁定'三步走。**改 episodes schema 加 6 字段之前必须切 Plan + Opus 审**——这是宪法红线,不能直接 Act。"
---
## 附:今日核心结论一句话总结
> AI 打标流水线从纸面落地;Prompt 2 v0.2 + ground-truth v0.2.1 经两轮复议锁定;三家模型公平对比(M3 100% / DeepSeek 80% / MiMo 70%)后选 MiniMax M3 为生产模型;Git 双 commit 推 Gitea 落库(里程碑 commit `38f3728`)。明天起可以推 Prompt 1 + Prompt 3,但改 episodes schema 必须先 Plan + Opus 审。