Просмотр исходного кода

docs(v3): 退役《10 跑通与代码治理报告》——核心实证与收尾三件事并入 09 M7

- 删除 10_V3跑通与代码治理报告.md(内容已迁移,非丢弃)
- 09 §12 M7「当前真实状态」补 V3 本机首跑三轮对照实证(id=45 6进池/3min19s/$0.42、命题验证成立、出口已由海外机方案解除)
- 09 §12 M7 新增独立小项「热度锚点真跑标定」(收尾#2);#3 判定重试早已在「判定失败三类病」小项,交叉引用避免重复
- 09.5 顶部加退役注记,兜住其对《10 报告》的 6 处历史引用
- commit db98612(真跑节点)在 git 永存

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sam Lee 1 день назад
Родитель
Сommit
475e2df900

+ 2 - 0
tech_documents/工程落地/09.5_V3阶段开发完成后的修补.md

@@ -1,5 +1,7 @@
 # 09.5 V3 阶段开发完成后的修补(2026-06-12)
 
+> **注(2026-06-13):《10_V3跑通与代码治理报告》已退役删除**——其核心实证(id=45 三轮对照、6 条进池、25 倍提速)已并入 09 §12 M7「当前真实状态」,收尾三件事已分别落到 M7 三个独立小项/状态项;真跑节点 commit `db98612` 在 git 历史永存。下文凡"见《10 报告》第 X 节"均为历史指代,内容可在 09 §12 M7 与 §15 台账查到。
+
 > 一句话:V3 第一次真跑出来数据(见《10 报告》)之后,围绕"代码治理 + 真跑暴露的问题"做了一轮密集迭代——把 §15 风险表从 9 条清到 0、把 V2 时代的死代码/僵尸配置/脏数据连根清掉、把游走的允许延伸游走次数(原来的预算)和热度判定按真实数据重设计。本文按主题把这段时间的全部改动与拍板串成一份连贯的迭代史。
 >
 > **时间边界**:起点是真实测试节点 `db98612`(《10_V3跑通与代码治理报告》,2026-06-12 真跑:同一个"中医养生"需求单,V2 0 进池/83 分钟 → V3 6 进池/3 分 19 秒)。终点是 HEAD。其间属于本文范围的后端/配置/文档改动共 **16 个 commit**(另有若干 `web-v3` 前端 commit 交错其间,归 web 会话管,本文不涉及)。

+ 3 - 1
tech_documents/工程落地/09_V3阶段开发计划.md

@@ -470,7 +470,8 @@ V3 的目标(一句话):**换判定引擎(Gemini)+ 换调度模型(并发)
 当前真实状态:
 - 已实现:V2 真实 run 基线(`v1_run_3a3bc9f0d72d` 成功、83min、17 决策全拒);真实 DB 可写(content_rw)、双写 CompositeRuntimeStore。
 - 已实现:云服务器跑测环境(root@192.168.82.27,代码 /home/sam/ContentFindAgentNew,本机 MySQL content-deconstruction-supply)。
-- 未实现:V3 双渠道真实 run;并发墙钟实测;Gemini 真实判定成功率/成本实测。
+- **已实现:V3 本机首跑实证(原《10 跑通与代码治理报告》核心结论并入,2026-06-12)** —— 同需求 id=45「中医养生」三轮对照:V2 0 进池/83min → **V3 本机 6 进池/3min19s/$0.42**(Gemini 16/19 成功)、血缘 validation pass;**立项命题「换 Gemini 直读视频→合格的中老年内容能进池」验证成立**(全链路无 mock)。临时值真跑回填:压缩档 360p/1fps、并发度 4、配额 cap=200 三项均验证可用、转正;tag 延伸次数顶格用满(R7 召回窄实证)。另跑 id=83/43 暴露判定失败率 ~19%(三类病,见下独立小项)。**云服务器同跑判定 0/11 全失败 = OpenRouter 对阿里云中国 IP 区域封锁(403)** → 已由海外机 1:1 复刻方案解除(`47.245.103.121`,新加坡;代码/DB/env/前端全就位、330 测试+三闸通过、OpenRouter 推理端点实证可达,环境就绪待真跑)。
+- 未实现:V3 **双渠道批量**真实 run(视频号渠道真跑、并发墙钟双渠道对比);多题材标定样本攒集。
 - 当前默认值:单日真实跑测 ≤ 3 个需求(费用控制)。
 
 已拍板:
@@ -499,6 +500,7 @@ V3 的目标(一句话):**换判定引擎(Gemini)+ 换调度模型(并发)
   2. **`gemini_response_invalid: KeyError`(×3)**——HTTP 200 但模型输出不合规(缺 choices/缺判定字段)。策略:**重试 1 次也常能救**;若复发率高再考虑提示词加严/响应宽容解析;
   3. **`gemini_http_error: WriteTimeout`(×1)**——5.5MB 请求体上传超 90s,本地带宽瞬时抖动。策略:随 ① 的重试一并覆盖。
   配套小改:**失败 reason 里记上 HTTP 状态码**(现只记异常类型,429/503 分不清,诊断靠猜)。落点:`gemini_video.py`(analyze 重试包装 + 状态码入 reason);重试会改判定时序但不改结果口径,并发一致性测试需复核。**可随时独立做,不依赖 M7 整体。**
+- **(独立小项;2026-06-12 真跑暴露,业务影响最大)热度锚点真跑标定**:打分 = 贴题(≤60)+ 热度(≤40),≥70 进池 / 60-69 复看 / <60 拒。真跑实证:按题搜回的内容贴题普遍 ≥0.8、扎堆拿满 60(满分=设计,贴题是"门"非排序器),**进不进池实际由热度这 40 分裁决**——而把"互动数"换算成热度分的各平台 floor/ceil(及格线/满分线)是**按抓包量级估的起步值**(`platform_profiles/*.json` 的 `heat.signals`;10 平台仅抖音真跑过、note 均标"待标定")。id=45 真跑里 **10 条"贴题满分但热度不够"卡成待复看**,即起步值偏紧的直接证据。标定 = 多跑几个题材需求单看真实进池/卡门分布,据此调各平台 `floor/ceil/weight`,**纯改 JSON 不改代码**。锚点位置与口径见 §15 B 类台账「平台热度锚点」「打分权重/阈值」两行。(注:原《10 报告》收尾三件事的另两件已各有归属——"判定加 1 次重试"并入上方"判定失败三类病"独立小项;"服务器出口"已由海外机方案解决,见上方「当前真实状态」。)
 
 主要函数 / 对象:
 - 端到端 run + harvest 收割 + validate_run

+ 0 - 87
tech_documents/工程落地/10_V3跑通与代码治理报告.md

@@ -1,87 +0,0 @@
-# 10. V3 跑通与代码治理报告(2026-06-12)
-
-> 一句话结论:**V3 整条流程真实跑通了,而且第一次有内容真进池(6 条,V2 同需求是 0 进池全拒),墙钟从 83 分钟降到 3 分 19 秒(约 25 倍)。** 唯一的硬伤不在代码——云服务器(阿里云中国 IP)被 OpenRouter 区域封锁,判定模型调不通,生产部署要先解决出口问题。
-
----
-
-## 一、跑通结论(同一个需求单 id=45"中医养生",三轮对照)
-
-| | V2 基线(2026-06-10) | V3 云服务器(本次) | V3 本机(本次) |
-|---|---|---|---|
-| run | v1_run_3a3bc9f0d72d | v1_run_c3cb568207f1 | v1_run_4e24c1b85637 |
-| **进池** | **0**(17 决策全拒) | 0(判定全失败) | **6 条** ✅ |
-| 待复看 / 拒 | 4 / 13 | 11 / 0 | 13 / 0 |
-| 判定引擎 | decode+分类树(3 次超时) | Gemini **0/11 成功**(被区域封锁) | Gemini **16/19 成功** |
-| 血缘校验 | pass | pass | pass |
-| **墙钟** | **83 分钟** | 87 秒 | **3 分 19 秒** |
-| 成本 | decode 不可控等待 | ~0(调用全失败) | **$0.42**(19 次判定) |
-
-**业务读法:**
-- V3 立项要证明的命题——"换 Gemini 直读视频,合格的中老年内容就能进池"——**验证成立**:同一个需求,V2 一条都进不来,V3 进了 6 条,且判定理由可读(适老性、贴题度都有分数和一句话理由)。
-- 全链路(取需求 → 真爬虫搜索 → 下载视频 → ffmpeg 压缩 → Gemini 判定 → 规则打分 → 游走扩展 → 落库 → 血缘校验)**每一环都是真的**,没有 mock。
-- 游走五类动作全走通:翻页 2 次、标签扩词 1 次、看作者作品 2 次、进池沉淀 6 次、降延伸次数 13 次——允许延伸游走次数(原来的预算)闸、判定通行证、去重、血缘全部按规则执行。
-- 判定失败的优雅降级也真实验证了:失败内容自动转"待复看"、run 不崩、留痕可查(两轮共 14 条失败全部如此)。
-
-## 二、真跑暴露的问题(按严重度)
-
-| # | 问题 | 业务影响 | 怎么办 |
-|---|---|---|---|
-| 1 | **云服务器调不通判定模型**:OpenRouter 平台连得上,但推理接口对阿里云中国 IP 全部 403 区域封锁(Gemini/Claude 都封) | **生产部署的拦路虎**——代码放在那台服务器上,判定永远全失败,内容永远进不了池 | 三选一:给服务器配海外代理出口 / 换国内可直连的判定通道(如自有网关) / 判定环节放在能出海的机器上跑。**需要拍板** |
-| 2 | ~~相关性分数没有区分度~~ **勘误:贴题满分是设计、非问题**:16 条全 fit_true、relevance 全 0.8–1.0 | **贴题是"门"不是排序器**:按题搜回来的内容贴题都满分(正是设计要的),只有偏题的才掉档;贴题合格后由热度排序定进池——这是设计,**不是"偏离贴题为主初衷"** | 贴题侧唯一起步值="稍降"惩罚档位(贴题<0.8 跌一档现仅扣 15 分,可加重/趋拒);热度侧见 #3 |
-| 3 | **热度锚点是拍脑袋起步值、待标定**:10 条 60–69 待复看皆"贴题满分、热度分不够" | 贴题合格后由热度排序定进池(设计如此);只是热度锚点(抖音 1 万~100 万赞)是拍的、没真实数据校准 → 锚点不准则进池线失真 | 用真实互动分布标定各平台锚点 |
-| 4 | 本机仍有 3/19 判定 HTTP 失败(瞬时) | 失败即降级待复看,不丢内容,但人工复看量+16% | 可加一次重试(目前判定无重试);量小,优先级低 |
-| 5 | 服务器轮 2/11 视频下载失败 | 视频拿不到=没法判=待复看 | 真实网络波动,有降级兜底;观察即可 |
-
-## 三、代码治理体检(详细对照 09 计划 §15)
-
-**总体:结构是健康的**——模块职责清晰(取数/判定/规则/游走/落库各管一段)、无循环依赖、326 项自动测试全绿且无注水(无空断言/跳过)、判定和游走全部配置驱动(改规则只改 JSON 不改代码)。
-
-**本次已修 5 项**(行为零变化,测试全绿):
-
-| 修了什么 | 业务效果 |
-|---|---|
-| 落库改"整批一次提交"(原来每行一次网络往返) | 真跑落库更快更稳 |
-| 视频压缩加 120 秒超时(原来会被坏视频卡死) | 一条坏视频不再拖垮整批判定 |
-| 同一段代码抄三份的两处合并(校验失败构造/判定失败构造) | 改一处生效全部,不再漏改 |
-| 配置文件加缓存(原来一个 run 反复读盘 3+ 次) | 小提速,消除重复 IO |
-
-**待决策 4 项**(动起来有代价,建议带着真跑数据一起定):事件通道文件模式空实现(设计债)、游走引擎 4 个超长函数拆分(纯重构需重验等价)、配额接口鸭子类型收紧(M5 有意的兼容设计)、查询效果两套聚合统一(反哺前置)。
-
-## 四、临时拍板决策复核(真跑回填)
-
-09 §15 台账里 B 类"无真实数据支撑的临时值",本次真跑给了第一批数据:
-
-| 临时值 | 真跑表现 | 结论 |
-|---|---|---|
-| 视频压缩档(360p/1fps) | **16 条真实视频批量压缩全部成功**,Gemini 都能读 | ✅ 起步值靠谱,可转正 |
-| 并发度 4 | 19 条判定并发跑完,无限速报错 | ✅ 起步值可用(提速空间留观察) |
-| 配额 cap=200 | 实际用 19 次,余量充足 | ✅ 合理 |
-| 游走延伸次数(翻页3/作者2/tag1) | 翻页用 2、作者顶格 2、**tag 顶格 1** | ⚠️ tag 延伸次数被用满——召回面收窄的判断成立,放宽要配合成本一起定 |
-| 打分权重/阈值(60:40、70/60) | 贴题全 0.8+ 满分(=门、设计),进池由热度排序定档(=设计) | ✅ **贴题满分是设计、非缺陷**;待调仅:贴题"稍降"惩罚档位(<0.8) + 热度锚点(见下行) |
-| 热度锚点(1 万~100 万赞) | 贴题合格内容里按互动排序定档(设计),但锚点值是拍的 | ⚠️ **锚点起步值待真实数据标定**(非缺陷,是缺校准) |
-
-C 类"权宜之计"里,"mock 判定员默认全给高分"的坑也被真跑证实:拒判/低分路径在测试里从没走过,本次是第一次真实走通(没出问题,但靠的是兜底设计)。
-
-## 五、收尾前最该做的 3 件事
-
-1. **拍板服务器出口方案**(问题 #1):不解决,生产部署=摆设。这是唯一的硬阻塞。
-2. **用真跑数据标定热度锚点 + 贴题"稍降"惩罚力度**(#2/#3 已勘误为设计):贴题满分是设计、不需要"区分度";真要调的是热度锚点(把互动换成热度分的及格线/满分线)和"贴题<0.8 罚多狠",多跑几个题材的需求单攒数据即可。
-3. **判定加一次重试**(问题 #4):3/19 的瞬时失败率,一次重试大概率消掉一半以上的人工复看增量,改动很小。
-
----
-
-## 六、V2 废弃物清除(2026-06-12 当日追加执行,详账见 09 附录 E.4)
-
-跑通报告交付后,按四项拍板(历史数据归档后删/砍画像链/零行表全保留/配置僵尸都删)做了一轮全仓废弃物清除,五批 commit(`d17fc13`→`1eb8916`):
-
-- **砍掉一笔每条视频都在白花的钱**:douyin 客户端过去为每条视频多调一次"观众画像"接口——V3 判定早已不用画像(本次真跑 19 条全调全失败),整条调用链删除,判定结果零影响(快照指纹零重钉实证);
-- **配置恢复"真实"**:老游走策略文件 13 段里 10 段是僵尸(运行时零消费,仅靠非空校验被迫活着),JSON 段+Excel sheet+校验器同步删除;.env 清掉 105 行死键;
-- **生产库只剩 V3 数据**:V2 时代 21 表 1451 行(12 个旧 run 的全量血缘)归档到仓库 `archive/v2_db_archive/` 后删除,decode 时代 7 列+画像 1 列 DROP——复盘统计从此不混旧架构的行;
-- **交叉验证防住了 2 个误删**:采证岗判"可删"的 mock 判定员和五张零行资产表,复核证实都是活功能(零行表是"进池即写",只是开双写的 run 从没进过池),已写入防误删清单。
-
-清理后基线:**324 项测试全绿**(原 326,−3 个画像专属用例 +1 个配置钉死用例),config gate 五闸 pass,DB schema 闸 pass。
-
-- 部署:`stuuudy.pem` → root@192.168.82.27;`git pull`(1cd1b94→7e0e394,服务器从 V2 一步跳到 V3 全量);`.env` 备份后还原仓库版+回填服务器定制(双写=1、deepseek 查询模型);`pip install imageio-ffmpeg`(自带 ffmpeg 二进制,免系统安装)。
-- 预检三闸:DB 21 表 schema_ready / config gate 5 闸 pass / 服务器 pytest **326 passed**。
-- 服务器真跑:`--platform douyin --platform-mode real --demand-content-id 45`,DB 双写开;87 秒完成,validation pass,判定 0/11(OpenRouter 403 region block,经 curl 实证:models 端点 200、推理端点对 google/anthropic 模型一律 403)。
-- 本机真跑:同命令文件模式(不写生产库);199 秒完成,validation pass,判定 16/19,进池 6。run 产物:`runtime/v1/v1_run_4e24c1b85637/`(本机)、服务器 `runtime/v1/v1_run_c3cb568207f1/` + DB。