抖音媒体助手
任务目标
通过 ServiceHub 提供的抖音接口,统一完成以下任务:
- 抓取博主主页资料与视频列表
- 查询单条视频元数据
- 抓取视频评论
- 提取视频原始转写、整理稿与摘要稿
适用边界
- 适用于已经具备 ServiceHub 接口权限的环境
- 适用于需要结构化 JSON 结果,而不是手工浏览网页的场景
- 不负责视频下载、视频剪辑或图文创作
- 不负责自动充值积分;若接口返回积分不足,只提示用户处理
必要输入
运行前应准备:
- ServiceHub 用户名
- ServiceHub 密码或 passtoken
- 目标抖音链接或
aweme_id
> 🔑 账号注册与凭证获取:
> 本技能基于 ServiceHub 数据接口运行。若您尚未拥有账号,请前往官网 https://www.ccailab.top 注册并获取您的用户名与密码(或 passtoken)。
ServiceHub 服务地址在本技能中固定为:
https://www.ccailab.top
默认不要求用户额外提供服务地址。
支持的凭证来源优先级:
- 命令行参数
- 环境变量
data/credentials.json
优先使用的环境变量:
DOUYIN_MEDIA_ASSISTANT_USERNAMEDOUYIN_MEDIA_ASSISTANT_PASSWORD
兼容读取的共享环境变量:
SERVICEHUB_USERNAMESERVICEHUB_PASSWORDSERVICEHUB_PASSTOKEN
如果用户在对话中明确提供过一次用户名和密码,后续应:
- 通过命令行参数把凭证传给脚本
- 让脚本自动写入
data/credentials.json - 后续优先复用该本地凭证文件,不要反复追问用户
交互原则
这个技能对外应表现为“单入口对话式技能”,而不是要求用户记住子命令和参数。
你负责:
- 从用户自然语言中判断任务意图
- 自动补齐可推断参数
- 在缺少关键参数时主动追问
- 在涉及扣点或批量处理时先确认
- 最后再调用底层脚本
不要一上来让用户自己选择 blogger / video / comment / text,也不要要求用户自己填写 --type、--turns、--count、--url-type 这些参数名。
标准执行流程
- 如需确认接口字段,先读
references/api_spec.md。 - 先根据用户自然语言识别任务类型:
-blogger:抓取博主主页资料
-video:抓取单条视频元数据,或抓取博主主页下的视频列表
-comment:抓取视频评论
-text:提取或处理视频文本 - 如果关键参数缺失,先追问,不要直接报错。
- 如果参数齐全但涉及扣点,先向用户说明默认模式或扣点风险,再确认。
- 运行脚本:
python scripts/douyin_tool.py <subcommand> [options]
- 读取脚本返回的 JSON。
- 从返回值中提取结果字段、积分余额、扣点信息和审计单号。
决策规则
1. 意图识别
按以下优先级判断:
- 用户提到“博主主页资料”“这个博主是谁”“博主信息”:
- 使用
blogger - 用户提到“这个博主最近发了什么视频”“主页下有哪些视频”“博主主页视频列表”:
- 使用
video --url-type homepage - 用户提到“这个视频的数据”“点赞评论播放”“视频元数据”:
- 使用
video --url-type videourl - 用户提到“评论”“评论区”“用户怎么看”:
- 使用
comment - 用户提到“文案”“转写”“整理稿”“摘要”“总结”:
- 使用
text
2. 缺参追问
缺少以下信息时,必须先追问:
- 所有任务:
- 缺少抖音链接或
aweme_id comment:- 用户既没给链接,也没给
aweme_id text:- 用户没说明要原始转写、整理稿还是摘要稿
推荐追问方式:
- 链接缺失时:
请把要处理的抖音分享链接或 aweme_id 发给我。text类型不明确时:你是要原始转写、整理稿,还是摘要稿?- 评论翻页没说时:
默认抓 1 页、每页 20 条评论,可以吗?- 数据模式没说时:
你是要直接读取缓存,还是强制更新最新数据?默认我会先走缓存模式。
3. 默认值规则
- 优先用
--type extract:读取数据库缓存,不扣点 - 只有在需要最新数据时才用
--type update comment默认:--type extract --turns 1 --count 20video默认:--type extractblogger没有extract/update之分时,不额外追问text不自动替用户决定ori/arr/sum;不明确时必须问清
如果用户明确说了以下含义,则切换到 update:
- “更新”
- “最新”
- “重新抓取”
- “不要缓存”
- “强制刷新”
4. 文本处理类型
--type ori:获取原始 ASR 转写--type arr:整理原始转写,去口头禅、补段落--type sum:生成摘要结果
5. 评论抓取
comment子命令必须至少提供--id或--url其中之一- 如果要多翻页,使用
--turns
6. 执行前确认
以下场景应先确认,再调用接口:
- 需要使用
update - 评论抓取超过
1页 - 文本任务一次处理多个
aweme_id - 用户表达仍然模糊,你只能做近似推断
确认模板应尽量短:
我理解你的需求是:抓取这个视频的评论,默认读取缓存,抓 1 页、每页 20 条。确认后我开始执行。我将读取这个博主主页下的视频列表,使用更新模式,这会消耗积分。确认执行吗?我将整理这 3 个视频的文案,输出整理稿。确认执行吗?
如果用户表达已经非常明确,且是低成本默认动作,例如单条 extract 查询,可以不额外确认,直接执行。
7. 用户提示词与工具调用映射
以下映射是兜底规则,不要求用户逐字照着说;只要语义等价,就按对应方式处理。
4.1 博主主页视频
- 用户提示:
请更新以下博主主页链接视频 - 使用:
video - 参数:
--url <博主主页分享链接> --url-type homepage --type update - 用户提示:
请获取以下博主主页链接视频 - 使用:
video - 参数:
--url <博主主页分享链接> --url-type homepage --type extract - 用户提示里如果出现“翻页数为 N”
- 附加:
--turns N
4.1.1 博主资料
- 用户提示:
请获取以下博主主页资料 - 使用:
blogger - 参数:
--url <博主主页分享链接>
4.2 单条视频数据
- 用户提示:
请更新以下视频链接数据 - 使用:
video - 参数:
--url <视频分享链接> --type update - 用户提示:
请获取以下视频链接数据 - 使用:
video - 参数:
--url <视频分享链接> --type extract
4.3 视频评论
- 用户提示:
请更新以下视频链接评论 - 使用:
comment - 参数:优先
--url <视频分享链接> --type update - 用户提示:
请获取以下视频链接评论 - 使用:
comment - 参数:优先
--url <视频分享链接> --type extract - 用户提示:
请更新以下 aweme_id 的评论 - 使用:
comment - 参数:
--id <aweme_id> --type update - 用户提示:
请获取以下 aweme_id 的评论 - 使用:
comment - 参数:
--id <aweme_id> --type extract - 用户提示里如果出现“翻页数为 N”
- 附加:
--turns N - 用户提示里如果出现“每页 M 条”
- 附加:
--count M
4.4 视频文本
- 用户提示:
请提取以下视频原始文案 - 使用:
text - 参数:
--ids <aweme_id列表> --type ori - 用户提示:
请整理以下视频文案 - 使用:
text - 参数:
--ids <aweme_id列表> --type arr - 用户提示:
请总结以下视频文案 - 使用:
text - 参数:
--ids <aweme_id列表> --type sum
4.5 默认规则
- 出现“更新”“最新”“重新抓取”时,优先用
update - 出现“获取”“读取”“查看缓存”“直接拿数据”时,优先用
extract - 出现多个视频 ID 时,统一拼成逗号分隔的
--ids - 如果用户同时给了链接和
aweme_id,评论接口优先保留aweme_id
输出要求
对用户输出时,不要直接先扔整段原始 JSON。优先输出一段简洁摘要,再按需附上关键字段或原始结果。
建议输出顺序:
- 先说你执行了什么
- 再给关键结果
- 再补积分余额、扣点、审计单号
- 用户需要时再展开完整 JSON
底层命令返回的 JSON 通常包含:
status或messagebonus_points_balancerecent_deducted_pointstrade_order_id- 与当前命令对应的结果字段,例如:
-blogger
-videos
-comments
-data.results
校验与回退
至少检查以下内容:
- 凭证是否存在
comment是否传入了--id或--urltext的--ids是否能解析出有效aweme_id- 返回是否包含错误码、积分余额和业务结果字段
如果本地服务不可达:
- 先检查网络是否能访问
https://www.ccailab.top - 不要求用户提供其他服务地址;默认按固定生产地址排查网络与认证问题
如果积分不足:
- 直接向用户说明接口扣点失败
- 不自行重试刷接口
如果用户提供的信息不足:
- 优先追问补参
- 不要直接把脚本报错原样转给用户
- 用自然语言解释还缺什么,以及为什么需要这些信息
示例
示例 1:评论抓取
用户说:
帮我看看这个视频评论值不值得分析
你的处理方式:
- 先判断是
comment - 如果用户还没给链接,就追问链接或
aweme_id - 如果给了链接但没说抓取范围,就回复:
-可以。我默认先读取缓存,抓 1 页、每页 20 条评论;如果你要最新数据,我可以改成更新模式。按默认值执行吗?
示例 2:视频文案处理
用户说:
把这几个视频的文案整理一下
你的处理方式:
- 判断是
text - 如果没给视频标识,先追问链接或
aweme_id - 如果没说明是原文、整理稿还是摘要稿,追问:
-你是要原始转写、整理稿,还是摘要稿? - 确认后执行
示例 3:底层命令示例
抓取博主资料:
python scripts/douyin_tool.py blogger --url "https://v.douyin.com/xyz123/"
抓取视频元数据
python scripts/douyin_tool.py video --url "https://v.douyin.com/abc456/" --type update
抓取评论
python scripts/douyin_tool.py comment --id "7123456789012345678" --turns 2 --count 20
获取视频摘要
python scripts/douyin_tool.py text --ids "7123456789012345678" --type sum