From ce84616b788e0a848e63e84cde43f3cbf5b29d57 Mon Sep 17 00:00:00 2001 From: simonkoson <28867558@qq.com> Date: Wed, 8 Jul 2026 09:43:08 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E7=9F=A5=E8=AF=86=E5=BA=93=E5=86=B7?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=94=B6=E5=B0=BE=20+=20CCA=20=E5=A4=A7?= =?UTF-8?q?=E6=B4=8B=E6=97=B6=E9=97=B4=E6=88=B3=E8=A7=84=E5=88=99=20+=20?= =?UTF-8?q?=E4=BE=9D=E8=B5=96/=E6=96=87=E6=A1=A3=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLAUDE.md 状态更新:知识库冷启动完成,下一步语义搜索 - backend/requirements.txt 增加 python-docx(doco 导入脚本依赖) - CCA srt_writer 增加大洋"单下单上"40ms 间隔后处理 - Doco 寄存条状态更新为"已交付" Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 11 ++++++----- backend/requirements.txt | 1 + cca/CLAUDE.md | 1 + cca/src/srt_writer.py | 23 +++++++++++++++++++++++ note/寄存条Doco文稿整理子项目已外迁.md | 2 +- 5 files changed, 32 insertions(+), 6 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 2e7d126..2a5d609 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,8 +13,8 @@ ## 🔖 状态栏(每次结束 session 前必须更新这三行) - - **最后更新**:Claude Fable(顾问)| 2026-07-07 - - **当前状态一句话**:**期次一条龙录入子项目立项**(收视分析持续运行入口,落点责编录入页)——PRD v1.0 完成、制片人三项拍板已定、寄存条已建,**暂不开发**。看板 L1-L4 + 仪表盘均已就绪。 + - **最后更新**:Claude Opus(顾问)| 2026-07-07 + - **当前状态一句话**:**知识库冷启动完成**——doco 22 期融合A稿已全部导入知识库(含 embedding),下一步做语义搜索界面(Phase 4a)。 - **下一个动手的人从这里开始**:见下方「⏩ 交接备注」 --- @@ -76,15 +76,16 @@ ## 3. 当前进度(动态,核心交接区 — 以最新快照为准) - - **已完成至**:收视分析看板 L1-L4 全部完成,含 L4 AI 诊断报告(DeepSeek V4 Pro 生成、摘要块三档自适应+详情页 Markdown 渲染、22期内容摘要卡入库)。 - - **正在做**:无。 - - **卡点/待解**:无硬卡点。下一刀候选见待办。 + - **已完成至**:收视分析看板 L1-L4 + 知识库冷启动(doco 22 期融合A稿批量导入,含 embedding)。 + - **正在做**:语义搜索界面(Phase 4a)。 + - **卡点/待解**:无硬卡点。 - **Schema 状态**:episodes 表已通过 003(+7 AI 标签列)和 004(+content_digest JSONB)迁移。知识库两表不再改。 --- ## 4. 已完成(只追加,最新在上) + - [2026-07-07] **知识库冷启动:doco 22 期融合A稿批量导入**:脚本 `backend/scripts/import_doco_transcripts.py`,docx → 提取纯文本 → 包 YAML frontmatter → 调 `store_md_file()` 入库(自动算 MiniMax embo-01 embedding)。22 篇全部成功(第02期~第23期,缺第01期无A稿),source_type=manuscript,知识库从 0 → 22 条节目文稿。 - [2026-07-07] **期次一条龙录入子项目立项(只立项不开发)**:① PRD v1.0 写入 `episode-intake/PRD_期次一条龙录入_v1.md`(每期任务清单模式、4 状态点、抽屉四区块、6 个新 API、005 迁移只加 transcript_item_id 一列、看板只用 reviewed 期次、四刀分期+七条验收);② 制片人三项拍板:文稿口径=doco 融合A稿(CCA 是播出前工具不算终稿,doco 转常态运行)、22 期批量导入时回联期次、责编可触发 AI 处理;③ 子项目 CLAUDE.md + 寄存条建立,CCA 寄存条清单表同步更新。 - [2026-07-06] **三处 Bug 修复 + 全局宽度调优**:① AI 诊断摘要块 `extractSection` 从硬编码 `indexOf` 改为正则模糊匹配,解决 DeepSeek 返回标题格式不一致导致干条不显示的问题;② 仪表盘近 12 期柱状图加 `.reverse()` 改为从左到右按播出时间升序;③ 全局内容区宽度:定位到 `.app-content`(`AppLayout.css`)的 `max-width` 是唯一有效参数(必须搭配 `width: 100%`,否则 Ant Design flex 布局下 `margin: 0 auto` 会触发 shrink-to-fit),最终定为 **1190px**。 - [2026-07-03] **L4 AI 诊断报告**:① Prompt 4(内容摘要卡,MiMo 生成)+ Prompt 5(诊断报告,DeepSeek V4 Pro)撰写完成;② 22 期文稿摘要卡批量生成并导入 episodes.content_digest(004 迁移);③ 后端 POST /api/analytics/diagnosis-report 端点(组装数据+调 DeepSeek+内存缓存);④ 前端摘要块 DiagnosisSummary(左右两块、三档自适应色调、可滚动、粗体渲染)+ 详情页 DiagnosisReport(react-markdown 渲染+重新生成+免责声明);⑤ 话题性(社交货币)三维框架设计(大众认知度/降维切口/惊奇密度)。模型选型:DeepSeek V4 Pro 胜出(vs Qwen-Max 对比测试)。 diff --git a/backend/requirements.txt b/backend/requirements.txt index 40dbc3d..54147c7 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -13,3 +13,4 @@ python-frontmatter==1.1.0 pandas>=2.0.0 openpyxl>=3.1.0 openai>=1.0.0,<1.55.0 +python-docx>=1.1.0 diff --git a/cca/CLAUDE.md b/cca/CLAUDE.md index c3e47d8..30fcd1e 100644 --- a/cca/CLAUDE.md +++ b/cca/CLAUDE.md @@ -102,6 +102,7 @@ - [2026-07-04] **编导审稿台是必要环节**:AI 拿不准的差异必须过编导确认,不能全自动。尊重编导创作主权(继承主项目设计哲学)。 - [2026-07-04] **先独立部署再吸收**:先在 lanhao 配音 2.0 上跑通测试,成熟后并入 TPS 主项目。不等主项目进度。 - [2026-07-04] **SRT 格式有样本**:data/ 下 3 个 SRT 是人工拍词导出的真实样本,作为格式参照。 +- [2026-07-07] **大洋"单下单上"时间戳规则**:每条字幕的结束时间 = 下一条开始时间 - 40ms(如第一条结束 08,840、第二条开始 08,880)。不论有无空白行,所有相邻字幕条目都遵守此规则。实现在 `srt_writer.py` 的 `_apply_dayang_timing()` 后处理函数。 - [2026-07-04] **折行(拍词)规则**: - A. 每行 ≤ 14 字 - B. ASR 中 >2 秒空白 → 插入空白行(屏幕清字幕) diff --git a/cca/src/srt_writer.py b/cca/src/srt_writer.py index e092244..ba0091b 100644 --- a/cca/src/srt_writer.py +++ b/cca/src/srt_writer.py @@ -24,6 +24,27 @@ def ms_to_srt_time(ms: int) -> str: return f"{hours:02d}:{minutes:02d}:{seconds:02d},{millis:03d}" +def _apply_dayang_timing( + subtitle_lines: List[Tuple[int, int, str]], +) -> List[Tuple[int, int, str]]: + """ + 大洋"单下单上":每条字幕的结束时间 = 下一条开始时间 - 40ms。 + """ + if len(subtitle_lines) <= 1: + return subtitle_lines + + GAP_MS = 40 + adjusted = [] + for i, (start_ms, end_ms, text) in enumerate(subtitle_lines): + if i < len(subtitle_lines) - 1: + next_start = subtitle_lines[i + 1][0] + end_ms = next_start - GAP_MS + if end_ms < start_ms: + end_ms = start_ms + adjusted.append((start_ms, end_ms, text)) + return adjusted + + def write_srt( subtitle_lines: List[Tuple[int, int, str]], output_path: str, @@ -36,6 +57,8 @@ def write_srt( output_path: 输出文件路径 time_offset: 时间偏移(用于正片拆分后各段从0开始计时的情况,这里不用,保持绝对时间) """ + subtitle_lines = _apply_dayang_timing(subtitle_lines) + with open(output_path, "w", encoding="utf-8") as f: for idx, (start_ms, end_ms, text) in enumerate(subtitle_lines, 1): start = ms_to_srt_time(start_ms - time_offset) diff --git a/note/寄存条Doco文稿整理子项目已外迁.md b/note/寄存条Doco文稿整理子项目已外迁.md index 64cd390..8ac50d3 100644 --- a/note/寄存条Doco文稿整理子项目已外迁.md +++ b/note/寄存条Doco文稿整理子项目已外迁.md @@ -103,5 +103,5 @@ Doco 子项目交付物的接口约定,见**子项目主 Brief §六**(交付什 | 子项目 | 外迁日期 | 寄存条文件 | 状态 | | ---------------- | ---------- | -------------------------- | ------------------------- | | TPS 看板分析升级 | 2026-06-12 | `寄存条_看板升级已外迁.md` | 原型阶段收工(2026-07-03) | -| Doco 文稿整理 | 2026-06-12 | 本文件 | **开发收尾(2026-07-03)**:22 期融合A稿已产出,成品在 `doco/deliverables/`,待批量导入主项目知识库 | +| Doco 文稿整理 | 2026-06-12 | 本文件 | **已交付(2026-07-07)**:22 期融合A稿已批量导入主项目知识库(含 embedding),转常态运行 | | CCA 唱词助手 | 2026-07-04 | `寄存条CCA唱词助手子项目已外迁.md` | **立项,待开发** | \ No newline at end of file