短视频获客 · 产线全图
wb.hzcytech.cn/wb · 模块 1「短视频获客」

一条视频从别人的爆款变成本店成片,中间经过了什么

三个代码仓、两朵云、四家模型供应商,每天凌晨自动跑,人只剩「审片」一件事。 这页先讲清楚为什么这样选、什么情况走哪条路、每一步凭什么放行,再展开谁在跑、坏了长什么样、去哪查、改哪里。

三仓复核 2026-08-26 Akke 线上 @45dc69e store-workbench 线上 @6c22f47 Workflow main @e60d666 快照 · 非实时看板

0先看结论:普通日更真单已走快车道;全局默认值仍不靠猜

下面继续把“代码里有什么”“设计上推荐什么”“真单实际走了什么”分开。2026-08-26 最新 33 秒真单留下了快车道六步、3 格真实素材、0 格 H3 的运行日志;这能证明这条单走了新路径,但不能反推所有门店的运行时 env 都相同。

推荐基线 普通日更优先快车道:真人主播格兜底 + 自有 B-roll + 单次写稿模型 + fal 音视频服务 + ffmpeg 合成 + 人审后发布。
这是根据当前两条产线的成本、失败面和返修机制得出的推荐。最新真单已证明普通日更能按这条路径完成;但全局 PRODUCER_ENGINE 的运行时值仍未直接读取,不把单条行为证据夸成所有任务的默认配置。
仓 / 线上版本
唯一职责
关键入口
本轮核对结论
Akkeprod 45dc69e
抓视频评论、意向分析、每日选题、只读 feed
video-material-digest
material-feed
/api/status 实测顶层、Vercel、Worker、Supabase 全部健康
store-workbenchprod=main 6c22f47
页面、提单、队列、状态机、预算、审片、发布队列;快车道和 B-roll 三级递进也在这里
auto-submit
runner/daemon.py
runner/express/
部署探针与 main 一致;2026-08-26 真单完成 33 秒成片并留下“3 格素材、0 格 H3”证据
Workflowmain e60d666
video-worker fb81e82*
老线 14 节点、共享素材库/向量检索、fal 客户端、n8n 调度定义、工厂机镜像;方案2收割机也在这里
pipeline/orchestrator.py
scripts/broll-library/
deploy-broll-harvester.yml
方案2每天北京时间 02:00 的定时器已 active;* worker SHA 是上次可验证值,不能拿 main SHA冒充已重部署

指定爆款复刻:老线 orchestrator

例外路径

适合:用户明确给出参考视频,并要求复刻结构、节奏或镜头组织。

代价:14 节点、需要多轮看图与工具调用,链更长,任何弱模型或输入缺失都可能整单失败。

边界:返修不得自动掉回老线;否则快车道修过的 B-roll 规则会全部失效。是否现为线上默认:没验成

生成视频:只补一个关键缺口

严格限量

触发:必须先有真实 B-roll 缺口,且方案1/2都没有合格匹配。

代价:H3 固定生成 5 秒,5 × $0.225 = $1.125;整条最多 1 格。

选择原则:真实素材优先;没有才生成;生成失败回主播。不是“先退主播、最后才生成”。

技术怎么选:按任务边界分工,不让一个模型包打天下

任务
当前选择
为什么
不用什么 / 边界
选题排序从评论里挑值得拍的
统一分 u1.2
求资料数、比例、中高意向、24h 增长可追账
不按播放量;热闹不等于购买意向
快车道写稿理解主题、生成口播
EXPRESS_SCRIPT_MODEL
默认 qwen3.7-flash
经 OpenRouter 直出结构化稿;最多三稿,仍不过就用合规兜底稿
env 可覆盖,线上实际值未验;不能把代码默认写成运行时事实
老线生产大脑拆参考、跨节点决策
qwen3.7-plus
由 store runner 显式传给云端生产会话,承担更长上下文与工具调用
不是快车道写稿模型;两条线的模型口径不能混写
看图与素材标注识别主体、动作、安全项
Qwen VL
输出固定标签 schema,直接服务检索与安全审
不让文案模型硬看图;能力不匹配会直接失败
快车道 B-roll给每句口播配画面
工序闸 + 动作闸 + 字面覆盖
在 store-workbench 内本机执行,可解释,配不上明确退主播镜
不等于 Workflow 的向量检索;两者用不同库入口、不同判据
老线 B-roll复杂复刻的语义找镜
Workflow 向量召回 + 及格线
bge-small-zh-v1.5 在本机 CPU 做几千段全量点积,并写缺货账/实战反馈
旧 v6 字面检索与 v7 影子脚本仍在;说“生产走哪版”必须看调用入口
配音 / 对口型生成声音与嘴型
fal:Minimax TTS + sync-lipsync pro
能力专用、按量计费;pro 已验证比标准档稳
只给主播格做口型,B-roll 秒数不付这笔钱
字幕与合成确定性媒体处理
ffmpeg + PIL
便宜、可复现、可本地量帧数和时长
不用大模型做本机就能精确完成的事
调度与存储队列、唤醒、交付
Supabase + n8n + Fly + R2
数据库做状态事实源;有任务才唤醒机器;大文件走对象存储
Fly 东京不直接发抖音,发布留给国内云电脑

一条单的六段契约:每段都有输入、产物和放行条件

01 · 选题

值得拍什么

输入:昨日视频与评论

产物:有版本号的选题台账

闸:四项分数齐全

02 · 写稿

具体说什么

输入:选题 + 品牌约束

产物:口播句 + 画面话

闸:结构、禁词、时长可用

03 · 配音

声音先定尺

输入:最终口播

产物:音频 + 真实时长

闸:可播、时长不过线

04 · 排画面

逐句配镜头

输入:画面话 + 素材标签

产物:A/B-roll 时间轴

闸:工序、动作、覆盖率

05 · 生成合成

只为必要部分付费

输入:主播格 + 音频

产物:口型片段、字幕、成片

闸:时长、帧数、黑帧

06 · 人审发布

人做最后责任人

输入:成片 + 逐句声画表

产物:交付 / 定点返修

闸:人批准后才入发布队列

三条总原则 先便宜后昂贵:写稿与素材判定先过,再调用配音、口型和生成视频。
先确定后智能:能用规则、状态机、ffmpeg 精确完成的,不交给模型猜。
失败要局部回退:素材配不上退主播镜,单步质量不合格只重做该步;不要让一处小问题整单作废。

明早照这个顺序讲:10 分钟讲完整条产线

先讲业务结果,再讲系统分工;先讲正常路径,再讲异常怎么兜。下面每格就是一段讲稿提纲。

第 1 分钟

先说目标

系统不是为了“自动做视频”,而是把同行爆款变成本店能用、能审、能追账的短视频。

结果:每天有选题、有成片、人只做终审
第 2 分钟

讲三仓分工

Akke 管数据和选题;Store 管任务、快车道和审片;Workflow 管老线、素材库、收割机与工厂镜像。

先定哪一站,再定查哪个仓
第 3–4 分钟

讲八站全景

抓视频评论 → 打分 → 挑选题 → 自动提单 → 唤醒机器 → 六步出片 → 人审 → 国内云电脑发布。

数据库状态是唯一事实源
第 5 分钟

讲六步出片

写稿 → 配音定尺 → 排画面 → 只给主播格对口型 → ffmpeg 合成 → 待审交付。

能局部重做,不因一格失败整单作废
第 6–7 分钟

重点讲 B-roll

方案1真实库存 → 方案2夜间补库 → 方案3原素材参考生成 → 主播兜底。

宁可少一个镜头,也不让画面提供错误证据
第 8 分钟

讲钱

方案1边际 API $0;方案2是后台机时/VL/存储;方案3一格 $1.125;主播口型约 $0.0833/秒。

每格只走一个成功出口,不重复收费
第 9 分钟

讲今天真单

33 秒成片用了 3 格真实素材、0 格 H3;总体对题,地砖/墙砖仍有轻微偏差。

结论:基本生效,不宣称彻底解决
第 10 分钟

用三句话收口

先真实、后生成、再主播;任何增强失败都不能拖垮主流程;最终效果必须看成片,不看开关名。

页面后半段是追问与排障资料
明早最重要的口径 方案2不是每条视频现场采素材,而是每天夜里给方案1补库存;方案3不是默认生成镜头,而是前两层都没货时只补一个关键缺口;主播不是失败画面,而是保证“人说什么、画面就是什么”的稳定兜底。

A先认十个词

这十个词在下面反复出现。看不懂它们,后面每张图都会卡住。

主播格A-roll

真人对着镜头说话的那几秒。嘴型是花钱对出来的($5/分钟)。

素材格B-roll

声音继续,画面换成素材库里的施工镜头。不花口型钱,但可能配错。

window

成片被切成的一段一段,每段几秒。要么是主播格,要么是素材格。

画面话shots

写稿时给每句配的一句「这一句该看到什么」,只拿去素材库搜画面,不念出来。

工序stage

素材被标成九类之一(拆除/水电/贴砖/腻子/油漆/美缝/木工/墙纸/柜类)。

认领claim

工厂机领走一条任务时拿的号牌。付了钱的记录挂在号牌上,手工改库会把它弄坏

心跳heartbeat

干活的机器每 60 秒报一次「我还活着」。5 分钟没动静判死。活着 ≠ 在干活

快车道express

现在这条产线:六步,全程只调一次大模型。2026-08-15 上线。

老线orchestrator

上一代产线:14 个节点,为「复刻爆款」设计。B-roll 是另一套实现

工厂机akke-video-worker

Fly 上做片子的那台机器。没活时自动停机——停着不是故障

B整条链,八站

Akke 仓 管数据 · store-workbench 仓 管屏、调度与快车道 · Workflow 仓 / 外部服务 管老线、素材库与工厂机镜像。颜色下面全篇通用。

站 1 · 每小时

抓同行视频与评论

号源账号的新视频、视频下的评论。

Akke · cron/scrape
站 2 · 每 2 分钟

给评论打意向分

判断这条评论是不是真有装修意向、是不是在要资料。

Akke · cron/analyze
站 3 · 每天 00:00

挑出今天的选题

昨日新入库的视频里按统一分排序,推飞书卡 + 落台账。

Akke · video-material-digest
站 4 · 0:30–6:30 每半小时

自动提单

把榜上前几条变成制作任务,一天目标 3 条。

n8n → runner/auto-submit
站 5 · 每 2 分钟

叫醒工厂机

有活就把停着的机器 start 起来。

n8n → Fly Machines API
站 6 · 约 6 分钟/条

把片子做出来

出稿→配音→排画面→对口型→烧字幕→交付。

daemon.py · runner/express
站 7 · 等人

店长审片

从头看一遍。只有人能点「交付」。

wb 视频看板
站 8 · 到点自动

发布到抖音

批准后由国内那台云电脑按时间发。

sw_publish_tasks → 云电脑
一句话 数据在 Akke;控制面和快车道在 store-workbench;老线、共享素材库和工厂机镜像在 Workflow;生成费在 fal。 出事第一步不是看代码,是判断卡在第几站——站定了,仓就定了,人也就定了。

C主播格 vs 素材格:这条产线唯一会「说的和画面不一样」的地方

这一节是理解所有画面类故障的支点。文档此前漏了它。

一条 33 秒的片子长什么样

主播格 开头两句固定给真人 素材格 贴砖镜头 素材格 柜体特写 主播格 没配到画面就退回这里 素材格 封边工序 主播格 结尾 CTA 固定给真人 同一条配音,从头贯到尾(声音不分格) 铜 = 主播格:按秒付口型钱,不可能对不上 青 = 素材格:不花口型钱,但可能配错 ← 所有「画面对不上」都在这 33 秒 · 主播占比中位 38%
口型按秒计费,只有主播格要对口型。按当前 $5/分钟计算:一条 33 秒的片子主播占 12 秒时,口型费约 $1.00;全程主播镜约 $2.75。
由此推出的三条「说的和画面不一样」100% 发生在素材格——主播格就是那个人在说那句话。
② 因此任何一格降回主播镜,这个毛病在那一格就被彻底消灭,代价只有钱。
③ 所以「宁缺毋滥」在这条产线上永远安全:一个不对题的空镜,比一个平淡的主播镜糟得多

D素材格是怎么填的:一段镜头身上的标签、调用它的四道闸、和一座没标注的金矿

上一节说了「画面对不上」只发生在素材格。这一节把素材格背后那座库掀开:一段镜头进库要盖哪些标签、生产如何按方案1/2/3递进,以及方案2现在怎样补库。大盘数字仍是 2026-08-24 的 broll-latest.db 历史快照;2026-08-26 首轮授权采集另列实测,不能混成同一时点。

一段素材进库,身上盖三类标签

一段 3–6 秒的镜头切出来后,会被盖上三组标签。三组各管一件事——语义决定「能不能配某句话」,安全决定「敢不敢用」,质量决定「清不清楚」。三关全过才进「可用池」。

① 语义标签 · 定「配哪句话」

它在拍什么

stage 工序(贴砖/封边/柜体安装…)· subject 主体 · action 动作 · visible_elements 可见元素 · visual_fact 画面事实

另有机器视觉四列(最干净的检索词):vl_subject · vl_action · vl_objects · vl_scene

出片时就靠这几列跟口播文字对齐
② 安全标签 · 定「敢不敢用」

画面里有没有雷

has_face 有没有人脸 · has_text 有没有字幕 · has_brand 有没有品牌 · has_watermark 有没有水印

四个必须全为 0 才进可用池——别人视频里的脸、字、logo、水印一旦混进我们的成片,就是事故。

这一关是抖音成片几乎全军覆没的原因
③ 质量标签 · 定「清不清楚」

拍得糊不糊

quality_sharpness 清晰度 · quality_stability 稳定度 · quality_lighting 光照 · narration_confidence 原声可信度

再加一个 needs_human:机器拿不准的,标出来等人复核。

抖动/太暗/太糊的在这一关被判废
标签存在 clips / segments 两张表上。「可用」= approved=1 且安全四列全 0 且有 R2 文件——三个条件缺一不可。

标签是怎么打上去的:收割机的六步流水线

步 1

切镜

TransNetV2 把长视频按镜头切成一段段。便宜、跑得快。

Workflow · 本地算
步 2

判型 + OCR

判 A/B 型、OCR 认出原字幕位置,为后面去字幕做准备。

Workflow
步 3

切段

把镜头切成 3–6 秒的可用镜头单元。

Workflow
步 4 · 花钱

VL 标注

qwen3-vl-235b 逐段看画面,产出上面所有语义标签。整条线唯一按段计费的一步。

Workflow → OpenRouter
步 5

安全审

盖 has_face/text/brand/watermark 四个安全标签。

Workflow
步 6

入 R2 + 入库

过关的传 R2、写进 segments,approved=1。

Workflow → R2 / DB
⚠️ 瓶颈在步 4:切镜(步 1)又便宜又快,跑在最前面;VL 标注(步 4)每段花钱,跟不上。于是切了一大堆镜头、卡在没标注——这正是下面「金矿」的成因。

出片时,机器拿哪些标签给一句口播配画面

一句口播文字 「墙砖要留 3mm 缝」 可用池 3,494 段 安全四关全过的干净镜头 闸 1 · 工序闸 候选的 stage 要落在这句判出的工序里(贴砖≠封边) 闸 2 · 动作闸 句子的动作词要落在候选的 vl_action/action 里 闸 3 · 字面覆盖 句子命中候选检索面多少字 闸 4 · 覆盖率阈值 不够就判「配不上」 ✓ 命中 → 配这段素材 ✗ 四闸任一不过 → 退主播镜
检索面(haystack)= 可见元素 + 动作 + 画面事实 + VL 四列 + 工序词表 + 主体词表,拼在一起做字面匹配。宁缺毋滥:任一道闸不过就退回主播镜,绝不硬配一个不对题的空镜(对应上一节第三条)。

库里现在有什么:2.7 万切片,只有 3,494 段真能用

可用 3,494
已标注没入池 2,207
未标注 21,033(79%)
可用池 3,494(过安全审) 标注了但没过关 2,207 切了镜但从没标注 21,033
总切片 26,734。真正能进成片的只有 3,494 段(13%)——不是库小,是绝大多数还没跑到 VL 标注那步。

那 21,033 未标注的,几乎全是自家干净生料

干净生料·未标注 20,963
干净生料·已标注 4,840
抖音采·已标注 861
抖音采·未标注 70
干净生料 = 门店自拍的施工空镜,没字幕没水印。这组 2026-08-24 快照里,可用池 3,494 全出自它,可用率 72%。当时那批未限定授权与镜头类型的抖音成片几乎全卡在安全审;这是旧批次事实,不等于“所有授权来源永远采不出可用镜头”。

拆开那 20,963 未标注干净生料:一半是「就差标注」的成品

ready 待入池 10,095
quarantine 隔离 8,266
phash 重复 1,157
pending 待标注 1,116
rejected 判废 229
时长 100% 落在 3–6 秒(均值 3.5s),全是合格镜头长度,没有碎片。
这是一座金矿,不是一堆垃圾 ready + pending ≈ 11,211 个干净生料切片,全 3–6 秒,跟现在可用池同源同质——已切好镜,只差最后一步「标注」没做。
补标注要用 VL(qwen3-vl)按现有 codex-v6 同款 schema 逐段标。按干净生料 72% 的历史可用率估算,可能新增 约 8,000 个可用镜头;这是容量估算,不是已完成结果。成本会随切片数、VL 调用和重试变化,需用小批实付再决定全量,页面不再展示会快速过期的账户余额。
另有 8,266 隔离待查原因、1,386 重复/判废确定丢弃。
方案2首轮实测 · 2026-08-26 明确授权队列当时只有 5 个来源,实际处理 5/5;共切出 28 个候选镜头,最终 3 段通过 B-roll 可用闸并进入检索池,另有 4 段被正确识别为主播讲述类,不冒充 B-roll。
结论不是“抖音素材都能用”,而是授权来源 + 镜头切分 + 安全/语义闸可以产出少量合格真实素材。采集上限 10 不等于承诺成功 10。
现在怎么自动跑 方案2已配置为每天北京时间 02:00启动,feed_limit=10source_limit=10。它只唤醒既有 Fly 收割机,不每晚重新部署;上一轮仍在运行就跳过,队列为空快速收工,完成后自动停机。GitHub 定时器已回读为 active,但高峰期可能延迟,不承诺 02:00:00 秒级准点。

E今天做哪条:选题走了三跳才到页面

数据从 Akke 到工作台的三跳

抓 + 打分 cron/scrape · analyze 每天 00:00 挑选题 飞书卡 + 写台账 material_digest_pushed 只读接口 /api/material-feed 只读台账,不重算 CF Worker 中转 工作台不碰那把钥匙 批量剪辑屏 #video-top 断在任何一跳,页面都是空的 / 还是昨天的 —— 而三处都不报错。 最快的判断:直接 curl 那条 feed(不用钥匙)。有数据 = 上游没断,问题在工作台侧。 2026-08-24 实测:返回 4 条统一榜条目,最新一天 08-24。
⚠️ 这个接口只读台账、一个数都不现算——现算必然和已经推出去的飞书卡打架,而运营分不清是「口径变了」还是「系统坏了」。

排序用的统一分 u1.2:四项归一加权

求资料条数 0.35
求资料比例 0.25
中高意向数 0.20
24h 增长 0.20
排序不按播放量、也不按评论量——热闹 ≠ 有意向。源码 src/lib/material-digest/unified-score.ts;改权重必须同时 bump 版本号,否则历史数据对不上账。

F出片产线:一条单在机器里的一生

七个状态(值域在数据库 CHECK 约束里钉着)

queued 排队等领 running 正在做 needs_input 等你补东西 failed 真失败 review 等人看一遍 revision_requested 说了有问题,返修中 done 已交付 只有人能点这一步 产线自己没有判交付的权限
⚠️ 别手工改这张表的状态。付费预留挂在认领号牌上,手工复位只复位了它的一半——2026-08-15 有条单口型已经跑完并计了 $1.35,就是这么废掉的。要重跑走看门狗重排或页面「作废重开」。

快车道六步:钱花在哪两步

出稿 唯一一次调模型 配音 💰 $0.10/千字 排画面 本机检索,不花钱 对口型 💰💰 $5/分钟 · 最贵 烧字幕合成 ffmpeg,不花钱 交付 转待审 每一步做完只「量」,量出来不理想就调一个数重做那一步(几分钱),绝不整单失败 老线的死法全在这条的反面:TTS 已扣 $0.0121,才被判「语速偏快」整单失败——钱花了、片子没有。
另一条线(老线 orchestrator)是 14 个节点,为「复刻某条具体爆款」设计。两条线的 B-roll 是两套完全不同的实现——这一点在下面「实战案例」里是关键。

G调了哪些模型

先分仓、再看模型:快车道写稿和老线生产大脑由 store runner 发起;Workflow 提供老线节点、素材 VL 与 fal 客户端;工作台里的分析/面客模型是另一组配置。表里的“默认”只代表代码回退值,env 是否覆盖要以运行时为准。

用在哪模型配在哪换的时候要注意
出稿(快车道唯一一次调模型)默认 qwen/qwen3.7-flash store · EXPRESS_SCRIPT_MODELenv 可覆盖;要同步补价格表,否则大脑费记 null。线上值本轮没验成
老线的「大脑」qwen/qwen3.7-plus store · daemon.py 常量必须同步改三处,漏一处整条部署直接红
拆参考视频结构(第 06 屏)deepseek/deepseek-v4-flash LLM_ANALYSIS_MODEL推理模型,会先想再出 JSON,token 上限别给太小
面客文案:标题、5 个标签qwen/qwen3-235b-a22b-2507 LLM_CHAT_MODEL与抖音私信通道同款,两仓刻意一致
看图:海报解析等qwen/qwen3-vl-32b-instruct RECALL_CAMPAIGN_VISION_MODEL文案模型只接文字,喂图直接 404
配音fal · minimax/speech-02-hd$0.10/千字
音色克隆fal · minimax/voice-clone$1.50/次登记出镜人时一次性,参考音频 ≥10 秒
对口型fal · sync-lipsync v2 pro$5.00/分钟最贵;标准档会嘴部涂抹,生产默认必须 pro
方案3参考生成minimax h3 ref2v$1.125 / 5秒参考来自当前原素材;前两层未命中才调用;整条最多 1 格

大脑换了四次,每次的理由

日期动作为什么
~08-08kimi-k3每条片大脑费约 $9,成本大头
08-09换 deepseek-v4-flash同为 1M 窗口、同样支持工具调用,入价便宜 33 倍
08-10换回 qwen 家v4-flash 不支持图像输入,而老线到处要看图,当晚首条真单就死在这。选模型时「能不能看图」和「窗口多大」同等重要
08-11升到 qwen3.7-plusflash 工具调用不稳。刻意只换档不换厂——好把「flash 太弱」和「qwen 不行」分开验
快车道 B-roll 检索不用向量,走中文二元组重叠 + 工序闸 + 动作闸;老线在 Workflow 另有 bge-small-zh-v1.5 向量召回 + 及格线。两套实现都存在,不能把其中一套说成整条视频系统的唯一选型。

H钱:两本账,永远不合并

画面出口什么时候花钱当前可证明的单价怎么控
方案1 · 库存命中本地检索 + R2 读取边际 API $0命中的秒数不用做主播口型,约少花 $0.0833/秒
方案2 · 夜间补库Fly 运行机时 + VL 标注 + 存储VL 代码估算约 $0.0005/张;20GB 卷约 $3/月10×10 上限、授权闸、去重、上一轮未完不并发、跑完自停
方案3 · H3 ref2v前两层无合格素材且存在关键缺口5秒 × $0.225 = $1.125整条最多 1 格;参考绑定幂等;预算不足不调用
主播兜底该格需要做口型$5/分钟 ≈ $0.0833/秒任何 B-roll 分支失败都能退回,不拖垮整条视频

每个字幕格只走到第一个成功出口,不是三个方案各收一遍钱。方案2每晚实付暂时不能给固定数:首轮没有留下独立的 OpenRouter 余额差值账,下面只写可以证明的单价与上限,不把估算冒充实付。

一条快车道片子的成本构成(08-15 首条真单,$1.62)

对口型 $1.58(97%)
出稿 $0.01 配音 $0.037 对口型 $1.58
降本只有一个靶子:减少主播出镜秒数。按当前 $5/分钟计算,34 秒全程主播约 $2.83;主播占 38% 时约 $1.08,节省约六成。反过来说:要求画面更对题 → 配不上就退主播镜 → 口型费上涨,这个跷跷板躲不掉。

但每条真交付实际是 $24.08(08-21 复核全表 53 条)

$52.23 沉在没人审的成片上(72%)
已交付 $13.72
失败 $6.28
review 29 条,出了片没人审 done 4 条 / 真交付 3 条 failed 20 条
失败其实不贵(20 条只烧 $6.28,说明闸门前置那套设计有效)。钱漏在「做出来没人看」上——瓶颈不在产线,在审片
是什么记在哪受预算拦截吗
生成费fal 的配音 / 口型 / 生图 / 图生视频cost_usd 超线 409
大脑费模型自己想事情 + 审片闸门llm_cost_usd 只记账

混成一本账的后果不是「数字大一点」:一单还没开始做画面,就先被自己的思考费打爆 $6 预算,然后连锁 409。

I实战:一次「说的和画面不一样」是怎么定位的

先看 2026-08-24 怎么定位根因,再看 2026-08-26 新三级递进上线后的第一条真单是否改善。两次证据连起来,才是完整验收。

2026-08-26 新真单验收:基本生效 题目《30秒讲清楚装修中各种胶的用途》,成片 32.8 秒、任务成本 $2.2582。运行日志明确写出 3 格真实素材、0 格 H3:柜体封边热熔胶、瓷砖缝美缝、厨卫吊顶边缘打胶三段总体与文稿一致,未再出现明显“说 A、演 B”。
仍有一处精度问题:文稿说“地砖”,画面更像墙砖施工,属于同类工序但不是严格一一对应,所以结论是基本生效,不是彻底解决。首轮口型质检曾失败,恢复后完成,说明稳定降级未被 B-roll 改动拖垮。
当前证据缺口:方案1和方案2还分不出来 方案2采集后并入方案1使用的同一审核素材池;这条任务的 alignment 来源记录又没有成功写回。因此能证明“真实素材池命中 3 段、方案3没调用”,但不能证明其中哪段来自旧库存、哪段来自当晚新补库。下一步必须把素材 asset_id / source / scheme 写入逐句声画表,才能按方案追账。

症状 → 三条独立的病

销售反馈:仍有一小段口播与画面不一致 ① 库不对口 3494 段可用素材里 柜类只有 109 段(3.1%) ② 词表放错档 板材/封边/打孔 归在「木工」 而木工 756 段几乎全是吊顶 ③ 打分只看字面覆盖 名词最多的那条永远赢 动作对不对,一个字没查 「板材封边收边」判定工序只有木工 → 从 756 段吊顶里挑 → 配到「安装灯槽周边的吊顶板」 匹配分 1.00(满分)
用真库(97MB 公开快照)原样跑产线的 pick() 复现,不是推测。

素材库的工序分布:这才是天花板

木工(多为吊顶)756
水电740
贴砖608
腻子304
美缝278
墙纸259
油漆253
拆除187
柜类 ← 我们的业务109
素材库是「装修施工库」,不是「定制柜库」。严格要求对题,结果自然逼近全程口播——销售倾向一个场景由一个人物讲完,不只是审美偏好,也是当前素材结构的必然结果。
画面话匹配分实际配上的画面
板材封边收边1.00安装灯槽周边的吊顶板
柜门封边压实0.67电钻固定柜体顶部构件
抽屉滑轨安装1.00依次开合高柜柜门
橱柜台面安装1.00调整木纹柜体隔板
柜门把手安装0.67摆弄绿色线材和橙色小工具

满分不等于对题。「封边」这个动作有没有真的出现在画面里,判据里一个字都没查。

为什么「修过又犯」——两条与算法无关的原因 ① 验收的尺子本身是错的。基准集里写着「板材封边特写」配到木工吊顶算对,所以 08-19 拿到 16/16 是真的,只是量的是「工序对不对」,不是「画面对不对题」。改判据前必须先改标准答案。

② 返修那一版根本没走修好的那条线。返修轮定位不到要改哪几格时会整单退回老线,而老线的 B-roll 是另一套实现,08-19 的修复一条都不生效。首版快车道 → 报问题 → 返修走老线 → 原样复发。
止损层:已上线(PR #529)返修不再退回老线,留在快车道整条重做,逃生开关保留。
逐句声画对照表接进审片页——产线每条片子都记录每句口播、对应画面和匹配证据,此前只留在工厂机上。现在每行一个「这句不对」,点了=跳到那句 + 打点 + 预选类型。
审片词表加「画面和说的对不上」一档。此前最接近的是「画面不自然」,修法是掏钱重做底片,方向反了;新档走「换素材/退回主播镜」,不花钱。
检索收紧(A):已做(PR #537)词表归位:板材/封边/打孔/开孔 从木工档挪到柜类档(木工那 756 段全是吊顶)。
动作闸:查询的动作词必须落在候选段的动作描述里,不是命中它一大袋名词的任意一个——这就是挡掉「满分 1.00 配吊顶」的那道闸。
真库验证:非柜类工序 10/10 零误伤、柜类最恶劣错配挡下、库里没有的题材正确退回;bench 在收紧后的尺子下仍 16/16/16/8。
天花板仍在库:A 保证「不再配错」,不保证「又对又有画面」 2026-08-24 快照里柜类只占素材库的 3%。严格对题会把一部分柜类查询退回主播镜(口型费上升)。现在的补法已经落地:方案2收割机只处理明确授权来源,每晚 02:00 自动补库;首轮 5 个来源产出 3 段合格 B-roll。它能逐步抬高天花板,但不是“一晚补齐所有柜类题材”。
全程口播开关(B)决定不做:工厂机多店共享,全局开关会误伤别的店;A 的动作闸已经在「配不对题就退主播镜」,等于按需自动做了 B 想做的事。

J出问题了:从上往下查,越靠前越便宜

四个信号源的查看顺序

① 看板 卡在哪个状态 + 人话原因 90% 到这就定位到「第几站」 ② 体检接口 pipeline-health · 8 项判据 每条对应一次真实事故 ③ 每天 08:00 自动体检 异常推 Lark 项目组群 周一必推一张(防定时器自己停) ④ 逐单日志 每步耗时、花了多少 前三步定位不了才来这 没配钥匙时体检接口回 401 —— 那是设计内的 fail-closed,说明「你没带钥匙」,不说明产线有问题。
你看到的现象第几站怎么查改哪个仓
选题列表空的 / 还是昨天的1–3直接 curl 那条 feed(不用钥匙)。有数据=上游没断Akke
今天一条都没自动提4体检 daily_submit。常见真因:僵尸单占满并行额度看门狗
单子一直 queued5工厂机没起来:看 n8n autoscaler、Fly 机器状态n8n
running 很久最后判死6逐单日志看死在哪步。心跳只证明进程活着,不等于在干活runner
一批单子全失败6多半是同一个 bug。近例:写稿撞 429 一秒判死,占一周失败 71%runner
说的和画面不一样6 · 排画面先看审片页的逐句对照表,找出是哪一句、分多少express/broll
片子后半黑屏但有人声6 · 合成容器时长 ≠ 视频轨时长,自检要同时查时长和帧数express/io
出了片但大脑费是 0记账看 warnings 是空还是有话——「缺价格表」和「压根没查表」是两件事usage_meter
成片堆着没人审7体检 review_backlog最大的钱漏,不是技术故障
批准发布了但抖音上没有8发布由国内云电脑拉走(Fly 东京 IP 被抖音挡着),先确认那台机在线发布队列
三条判断纪律取证失败 ≠ 事情为假:curl 超时、401、jq 报错,说明「没验成」,不说明「产线坏了」。
机器停着不是故障:工厂机 scale-to-zero,队列空时就该停机。
没坐实根因前别改环境:改开关本身就是一次变更,失败时你多了一个新变量。

常用命令

# 上游今天出没出选题?(不需要任何密钥,本机就能跑)
curl -s "https://akke-material-upload.softieaiorg.workers.dev/api/feed?days=3" \
  -H "X-Store-Code: demo-2026" -H "User-Agent: akke-workbench/1.0" | head -c 400

# 产线现状一把梭(钥匙从 fly secrets / GitHub secret 取,别手抄)
curl -sS -H "X-Producer-Key: $WB_PRODUCER_KEY" \
  "https://store-workbench.fly.dev/api/runner/pipeline-health?window_hours=720" \
  | jq '{level, checks: [.checks[] | select(.level != "ok")], stuck}'

谁改什么

负责怎么上线
Akke抓视频与评论、意向打分、每日选题、素材 feed PR → 合 main → Vercel
store-workbench店长看得见的一切、提单/审核台/看板/队列,以及快车道出片步骤 只能走 CI:push main → CI 绿 → fly-deploy
Workflow老线 14 节点、共享 B-roll 库与向量检索、fal 客户端、工厂机镜像、n8n 工作流 push main → CI → deploy-video-worker

判据一句话:抓取打分与选题 feed → Akke;页面/队列/审片/发布与快车道 → store-workbench;老线节点/共享素材库/工厂机镜像 → Workflow。 “片子本身变了”还要再问一句:这单实际走的是 express 还是 orchestrator,两条线不在同一个仓。 三仓共用同一个 Supabase,DDL 一律回 Akke 提(唯一例外是 video_jobs 这张队列表)。