移植自 mac-agent-os 的 mediacrawler_adapter:不起子进程、不开页面,用浏览器里那份
登录态直接调抖音 Web 接口。产物键名照抄 store/douyin,所以 ingest 那条链路一个字不用改。
**目前能用的(真环境实测,非推断)**:
profile/other : 200, 7075 字节 —— 博主主页指标(粉丝/获赞/作品数/昵称)
aweme/detail : 200, 45425 字节 —— 单条作品详情(含点赞/评论/收藏/分享)
**目前不能用的:作品列表 `aweme/post`。** 两个互相独立的原因:
1. 这个接口被抖音单独升级成了真校验:不带 x-tt-argus 回 403「Uifid Not Found」,
带上 dummy 值回 200 + **空 body**。也就是说「头在不在」骗得过,「真校验」过不了。
同一套头打 profile/other 和 aweme/detail 都是通的 —— 抖音是挑着接口加保护的,
挑中的恰好是「批量拉作品列表」这个最敏感的动作。
2. 改走页面截获也不行:CDP 浏览器打开博主主页会落到「验证码中间页」(当天大量探测的
代价,过几小时要重测)。
所以现在的边界是:**已知作品的指标刷新能做,自动发现新作品做不了**。
**排查中控住变量后得到的两条事实**(都写进注释了):
· `Accept` / `Accept-Language` / `Referer` 才是主页接口能返回真数据的原因 —— 只有
UA+client hints+Cookie 时是 200 但仅 121 字节的空壳,补上这三个头变 7074 字节。
(我先前猜的 sec-ch-ua 不是关键。)
· 因此 UA 与 client hints 必须**成套地取自同一个浏览器**,所以 BrowserIdentity 一次
从 CDP 取齐 cookie + UA + hints,而不是各自写死。
「200 + 空 body 必须当场报错」也是刻意写死的:放过去它会在下游变成「这个博主没作品」,
把一次失败伪装成一条正常结果 —— 爬虫那条路正是这么栽的,还被翻译成「账号被封」。
测试 +11:cookie 解析、请求头成套性(含 uifid 缺失/回退)、产物键名与 store 对齐、
以及 _get 的三条失败路径(空 body / 403 带网关原话 / 正常返回)。
6.5 KiB
6.5 KiB
基础能力治理与补强方案(提案)
2026-10-03 · 状态:待用户拍板 背景:用户提问"接着补基础能力,怎么加,也涉及以后基础能力如何增加调整"
一、诊断:能力体系已"半脱节"
已有基础(做得好的)
| 模块 | 位置 | 作用 |
|---|---|---|
| 能力登记 | 05_tools/09_ave/config/capabilities.yaml |
25 个能力,含 io / params_schema / providers |
| 缺口声明 | 05_tools/09_ave/config/feasibility_rules.yaml |
30 条可行性规则 + 10 个能力缺口映射 + 三色红线 |
| 匹配器 | 05_tools/09_ave/scripts/capability_matcher.py |
需求→能力匹配 + 目录指纹 + 升级检测 |
| 前端 | 导演台技术预检弹窗 | 显示每个镜头的技术预检与缺口汇总 |
⚠️ 实测发现的 5 处"清单 ≠ 实际"
| 能力 | 清单写的 | 实际 | 影响 |
|---|---|---|---|
lipsync 对口型 |
providers: fal / volcano / d_id · partial | 已用百炼 videoretalk 跑通 | 清单 provider 错误,无法据此排障 |
person_swap 人物置换 |
partial | 已实测跑通 | 状态偏保守 |
vfx_apply 特效 |
planned | 可灵 camera_control 已可用 |
状态偏保守 |
frame_chain 首尾帧 |
missing | kling_video.py:152 已实现 image_tail |
把已有能力报成缺口 |
voice_lock 声线锁 |
cap_id=None | 音色库已实现 | 未挂到能力,统计丢失 |
根因:能力登记、代码实现、缺口声明三者无联动 —— 加了功能忘登记、登记了没实现、实现了却仍报"缺失"。
二、机制方案:能力生命周期(4 步 + 1 台账)
① 登记 capabilities.yaml(唯一真相源)
新增字段:
cost: {unit: "元/秒", price: 0.08, note: "走免费额度优先"}
limits: ["正面近景 2~120s", "边长 640~2048"]
self_test: "python -m capabilities.selftest lipsync"
last_verified: "2026-10-03"
provider.state: ready | needs_key | broken
② 自检 scripts/capability_doctor.py(新)
一条命令验证"清单说的 ready 是不是真能跑"
--list 列出全部能力与最近验证状态
--capability X 单查(api_key 配置 / provider 可达 / limits 校验)
--live 真跑最小样例(产生费用,需显式开启)
--update 把验证结果写回 capabilities.yaml 的 last_verified
③ 接入 标准 4 步(写成 docs/CAPABILITY_GUIDE.md)
a. capabilities.yaml 登记(id/name/category/io/schema/provider/cost/limits)
b. 实现 provider(scripts/capabilities/<name>.py 或既有模块)
c. 写自检样例(让 doctor --live 能跑)
d. feasibility_rules.yaml 声明"什么技术需求触发它"
—— 与导演系统的"接新导演 3 步"对称
④ 台账 runtime/ave/capability_gaps.json(新)
缺口不再散落在规则里,而是有状态:
{id, name, first_seen, occurrences, affected_shots[], status,
blocking, resolved_at, resolved_by}
status: open → planned → in_progress → resolved
+ 能力升级 → 指纹变化 → 已出片方案自动提示"可重新生成更好版本"
设计取舍:先做 ①②(对账 + 体检),台账 ④ 可后置。 理由是 ①② 立刻消除"清单不可信"这个根本问题;④ 是统计增项。
三、本轮补什么(按性价比排序)
🥇 P0 能力对账 + 体检脚本(零成本 · 约 1 天)
- 修正上述 5 处脱节(尤其
frame_chain从 missing → ready) - 补
cost/limits字段(为报价与预算打基础) - 写
capability_doctor.py(--list与单查;--live可选) - 产出:一份可信的能力清单 + 一键体检
🥈 P1 首尾帧衔接 frame_chain(能力已有,只差接线)
- 前提:可灵
image_tail参数代码已实现(capabilities/kling_video.py:143-152) - 做:分镜
tech_requirements.chain_from_prev→ 生成时自动把上一镜尾帧作为本镜尾帧/首帧- 抽尾帧:ffmpeg 取上一镜最后一帧 → 存
chain/{shot_id}_tail.jpg - 生成时:
tail_image_path=上镜尾帧
- 抽尾帧:ffmpeg 取上一镜最后一帧 → 存
- 效果:长镜头分段生成无缝衔接;跨镜人物/光线不漂移
- 成本:0(只多一个参数;抽帧是本地 ffmpeg)
🥉 P2 多角色同框一致性(已发现的真实问题)
现状:图生视频只喂一张参考图 → 双人同框时只有主角保脸,配角随机。
| 方案 | 做法 | 成本 | 我的评价 |
|---|---|---|---|
| a. 首帧合成 | 生成前把多角色合成到一张首帧图 → 图生视频 | 一次图生图 | 效果最好,稍复杂 |
| b. 导演层规避 | 提示词要求避免"多角色同框近景",改用正反打/过肩 | 0 | 零成本先上,且更符合真实拍摄 |
| c. 多参考图 | 查即梦/万相是否支持多图输入 | ? | 需先验证 |
建议:先 b(零成本、马上见效)→ 再评估 a。
P3 表情微管理 expression_consistency
- 轻量:分镜
expression_detail(已有)+ 跨镜一致性提示词强化 - 中量:角色资产加"表情参考图"槽位 → 图生视频时带上
P4 口型质检辅助(用户提过的"微表情口型核对")
- 出片后自动抽关键帧 → 拼对比图 → 人工快速核对
- 进阶:接人脸检测,粗判嘴部开合与音频包络是否吻合
四、推荐执行顺序
P0 对账 + 体检脚本 ← 地基,零成本,先做
↓
P1 首尾帧接线 ← 能力已有,投入产出比最高
↓
P2b 多角色规避(提示词)→ P2a 首帧合成
↓
P3 表情 / P4 口型质检
五、待用户拍板
- P0 治理机制是否认可?(登记 + 自检 + 台账三件套;可精简为"对账 + doctor")
- P1 首尾帧是否本轮做?
- P2 多角色:先用提示词规避够不够,还是直接上首帧合成?
附:执行时需动的文件(预告)
05_tools/09_ave/config/capabilities.yaml(对账 + 补字段)05_tools/09_ave/config/feasibility_rules.yaml(缺口状态修正)05_tools/09_ave/scripts/capability_doctor.py(新建)05_tools/09_ave/scripts/capability_matcher.py(缺口台账读写)05_tools/09_ave/scripts/composer/pipeline.py(首尾帧接线)05_tools/09_ave/scripts/directors/*.py(多角色规避提示词)05_tools/10_dashboard/routes/ave.py+ 前端(缺口台账展示,可选)