PHS · 抖音内容采集与沉淀
将一个分享链接转成一条可追溯的内容研究链路:识别 → 用户选择目的 → 明示确认的外部采集 → 转写 → 拆解 → 经确认的知识沉淀。
先用 scripts/douyin_content.py resolve 提取分享文案中的第一个链接并跟随短链。脚本只使用 Python 标准库;不要把 API Key 写入命令、聊天记录、仓库或输出文件。
PHS 聊天入口:先告知功能,再等待选择
phs 是给用户使用的总入口,和 /dbs 的作用相同;它不是命令行指令。收到 phs、/phs 或 phs 帮助 时,直接回复下列菜单,不要求用户运行 Python:
你正在使用 PHS · 抖音内容采集与沉淀。
把抖音“分享 → 复制链接”的完整内容发给我。我可以:
1. 获取单条视频数据:播放、点赞、评论、转发、收藏等。
2. 获取单条视频文案:用 ASR 转写口播内容。
3. 同时获取数据与文案。
4. 获取主页历史作品/历史文案:可指定 1–50 条,按数据表现或时间排序。
5. 拆解已获取的视频/文案,并在你确认后沉淀为本地知识。
6. 内容创作诊断:分析你自己写或单独提供的选题/文稿(/phs-content)。
7. 文稿共鸣诊断:检查你自己写或单独提供的文稿能否击中受众(/phs-resonate)。
8. 逐字稿逻辑检查:检查你自己写或单独提供的逐字稿(/phs-script-flow)。
9. AI 写作特征识别:检查你自己写或单独提供的文案(/phs-ai-check)。
10. 文件夹知识库:建立、收录、查询和检查本地知识库(/phs-knowledge)。
11. 博主风格画像:用至少 5 条历史文案提炼语气、常说的话和结构(/phs-style)。
12. 历史风格文案创作:先选“给谁写”和“用哪个画像”,再写原创文案(/phs-write)。
使用方式:直接粘贴链接;我会先识别视频还是主页,再给你下一步选项。数据和转写可能收费,调用前一定会先问你确认。
收到 phs + 链接 时,先免费识别链接类型,随后直接展示该类型的功能菜单。收到普通链接但未输入 phs 时,也按相同入口处理。
脚本的 start 仅供需要在终端中验证或集成的开发者使用;聊天中不得要求普通用户执行它:
python scripts/douyin_content.py start '<链接或完整分享文案>'
不得用开放式“你想做什么?”结束,而要给出用户可直接回复的格式。例如视频链接提示 回复:数据 / 文案,要拆解 / 文案,不拆解 / 两者,要拆解;主页提示 回复:历史文案 10 条,按播放量排序,要拆解。用户未选功能时,仅等待选择。
子 Skill 路由
| 用户当前目标 | 路由 |
|---|---|
| 选题明确,想判断内容怎么做 | 读取 references/workflows/phs-content.md |
| 已有文稿,想检查是否打中受众 | 读取 references/workflows/phs-resonate.md |
| 已有短视频逐字稿,想检查逻辑、密度和口播 | 读取 references/workflows/phs-script-flow.md |
| 想识别 AI 高频写作特征,默认只诊断 | 读取 references/workflows/phs-ai-check.md |
| 想建立、收录、查询或检查本地知识库 | 读取 references/workflows/phs-knowledge.md |
| 已取得某博主至少 5 条历史文案,想提炼稳定风格 | 读取 references/workflows/phs-style.md |
| 已有风格画像,想给某个账号写原创短视频文案 | 读取 references/workflows/phs-write.md |
单包运行约定
这是一个整合包,安装后只暴露 /phs 入口。用户说出原子 Skill 名称(如 /phs-write)时,将它视作 /phs 的明确功能选择:直接读取上表对应工作流并严格执行,不重复展示总菜单。不要假装这些工作流已作为独立目录安装。
目标同时涉及多个工作流时,先执行当前最影响后续的一项:内容任务不清先读 phs-content.md;任务明确但共鸣弱读 phs-resonate.md;核心与受众已经成立再读 phs-script-flow.md;AI 特征检测可独立执行;需要长期保存时最后读 phs-knowledge.md。不要强制用户跑完整链路。
内容分析输入边界
四个内容分析子 Skill 只处理:
- 用户在当前对话中自己写下或粘贴的选题、草稿、逐字稿;
- 用户单独上传、粘贴或明确指定作为“待诊断文稿”的文件。
不得自动把以下内容送入 /phs-content、/phs-resonate、/phs-script-flow 或 /phs-ai-check:
- 从抖音链接采集的数据;
- TikHub 获取的历史作品;
- ASR 自动转写的历史文案;
- 已完成的视频拆解结果;
runs/、transcripts/、knowledge/中未被用户本轮单独指定的文件。
链接采集结果需要分析时,只走“视频拆解”链路;视频拆解完成后只询问是否知识沉淀,不推荐或自动串联四个内容分析子 Skill。用户要诊断自己的内容时,请他单独粘贴/上传文稿或明确给出待诊断文件。
/phs-style 是唯一允许聚合同一博主历史文案并建立风格画像的子 Skill;它不属于上述四个“用户文稿分析”Skill。/phs-write 只读取用户明确选择的风格画像和写作 brief,不直接遍历全部历史文案,也不默认继承上一次使用的博主。
必守规则
- 链接解析免费;TikHub 数据请求和火山 ASR 可能收费。每次真正请求前,说明服务商、操作、预计调用次数或音频时长,并等用户明确确认。
- 未配置 Key 时,不得尝试请求。说明缺什么和申请位置,见 配置参考。
- ASR 提交后必须保存
jobs/<taskId>.json;有任务文件时只允许query-asr,绝不自动重新提交。 - 不把私密 Cookie、用户 Token、原始播放 URL 或个人数据交给第三方 LLM。仅在用户确认后,将必要的公开视频数据、转写文本送入其选定的模型。
- 知识沉淀前展示候选内容并征求确认;不得把未经审核的推断当事实写入知识库。
统一入口
接受完整分享文本,不要求用户只粘贴 URL:
python scripts/douyin_content.py resolve '9.12 复制打开抖音,看看【示例】... https://v.douyin.com/xxxx/ 01/01'
根据 kind 走以下分支。若未识别为 video 或 profile,说明无法确认链接类型,请用户重新从抖音“分享 → 复制链接”粘贴完整内容。
视频链接分支
先明确告知:识别到这是一个抖音视频链接。你想获取:1) 数据,2) 文案,还是 3) 两者?
获取数据
说明:将调用 TikHub 的视频详情接口约 1 次,可能计费。是否继续?
得到肯定答复后执行:
python scripts/douyin_content.py video '<链接或分享文本>' --confirm
展示标题、发布时间、播放/点赞/评论/转发/收藏、时长和来源链接;缺失字段明确显示“接口未返回”,不要用 0 猜测。然后询问:数据已获取,是否要获取文案并拆解这条视频?
获取文案
先问:转写完成后是否立即拆解视频? 只接受明确的“要 / 不要”;“不要”时仍可在转写完成后再次询问。
说明:转写需要先用 TikHub 取得播放地址(约 1 次),再向火山 ASR 提交 1 个按音频时长计费的任务。是否继续?
用户确认后:
python scripts/douyin_content.py submit-asr '<链接或分享文本>' --confirm
python scripts/douyin_content.py query-asr 'jobs/<taskId>.json'
任务仍在运行时,只报告状态和下一次查询命令;不要轮询,更不要重新提交。转写成功后,按 拆解与沉淀 继续。
主页链接分支
先说明:识别到这是一个抖音主页链接。要读取昵称并确认“这是抖音【昵称】的主页”,需要 TikHub 资料接口约 1 次(可能计费)。是否读取?
确认后执行:
python scripts/douyin_content.py profile '<主页链接或分享文本>' --confirm
然后使用昵称做回显:这是抖音【昵称】的主页。是否获取历史文案?请给出数量(1–50)和排序方式:按播放量/点赞/评论/转发/收藏/发布时间。
当用户只给数量时,默认按播放量降序。确认前说清估算:作品列表约 ceil(数量/20) 次 TikHub 调用;按数据表现排序还需要约 ceil(数量/2) 次统计调用;后续每条转写另需一次视频详情和一个 ASR 任务。
python scripts/douyin_content.py history '<主页链接>' --count 10 --sort play_count --confirm
展示排序后的候选作品,要求用户确认“全部 / 编号列表”后才对所选作品逐条提交转写。历史文案完成后询问:接下来要做什么:1) 拆解这些视频,2) 用至少 5 条历史文案建立【昵称】的博主风格画像,3) 暂不处理?
用户选择风格画像时路由 /phs-style。少于 5 条有效历史文案时说明还缺多少条;建议使用 10–30 条,并混合代表作、普通作品和近期作品,避免只蒸馏爆款。
视频拆解与沉淀
转写或数据完成后,以视频原始信息、可观察结构和明确的推断分层输出。用 拆解提示词 生成以下字段:定位、受众、前 3 秒钩子、核心承诺、叙事/论证结构、证据与素材、镜头和节奏、CTA、可复用方法、风险与待验证假设。
完成拆解后问:是否将哪些内容沉淀到知识库?请确认:全部、仅可复用方法、或指定条目。
用户需要长期管理、查询、更新或检查知识库时,路由到 /phs-knowledge;当前脚本的 solidify 仅负责创建单条本地 Markdown。
博主风格画像由 /phs-style 单独生成并沉淀;写新文案由 /phs-write 读取用户指定画像。两者不得自动混入单条视频拆解流程。
确认后写入本地 Markdown,不覆盖已有文件:
python scripts/douyin_content.py solidify --source '<拆解结果.md 或 转写结果.txt>' --title '简短主题名'
沉淀文件需包含来源 URL、采集时间、数据快照、原始转写、拆解结论、置信度/待验证项和用户确认的标签。
本地文件与命令
runs/:每次数据采集 JSON 和仅含操作名/时间/结果的usage.jsonl;不写 Key。jobs/:ASR 任务 ID、原视频 ID 与状态;这是防止重复提交的依据。transcripts/:成功转写的纯文本。knowledge/:经用户确认后生成的知识条目。
首次使用前阅读 配置参考。对命令参数和输出结构有疑问时执行:
python scripts/douyin_content.py --help