关于 podcast
podcast 是一项技能,可根据主题、URL 或提供的文本,由一至两位 AI 主播生成音频节目。支持简短概述、深度分析和辩论对话,并提供节目音频与字幕。
主要功能
- 01输入主题、URL 或文本
- 02生成单人或双人节目
- 03支持简短、深度和辩论模式
- 04根据输入推断语言
- 05输出音频和字幕
适用场景
- 01将文章改编成讨论节目
- 02制作主题概述播客
- 03生成辩论形式的节目
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ marswaveai/ skills --skill podcast安装后在 Claude Code 中输入/podcast确认已加载。
附带文件references/mode-guide.md
详细介绍
适用场景
- 用户想围绕任意主题制作一期播客
- 用户提供 URL 或文本,并希望将其改编成播客讨论
- 用户要求采用“辩论”“对话”或“讨论”形式
- 用户提到“播客”“播客节目”或“录一期节目”
不适用场景
- 用户想要文本转语音朗读(使用
/speech) - 用户想要制作带有视觉内容的讲解视频(使用
/explainer) - 用户想要生成图片(使用
/image-gen) - 用户只想从 URL 提取内容,不需要生成音频(使用
/content-parser)
用途
生成由 1-2 位 AI 发言者讨论某个主题的播客节目。支持快速概述、深度分析和辩论形式。输入可以是主题描述、URL,或文本。输出是包含文字稿的完整音频节目。
严格约束
- 始终按照
shared/cli-authentication.md检查 CLI 身份验证 - 按照
shared/cli-patterns.md执行命令并处理错误 - 不要在 API 调用中硬编码发言者 ID——仅在需要回退时使用
shared/speaker-selection.md中的内置默认值;用户想更换语音时,从 speakers API 获取 - 不要捏造 CLI 命令或参数
- 任何交互前,始终按照
shared/config-pattern.md读取配置 - 始终按照
shared/speaker-selection.md选择发言者(文本表格 + 自由文本输入) - 不要将文件保存到
~/Downloads/或.listenhub/——将生成内容保存到当前工作目录,并使用易识别的主题名称(参见shared/config-pattern.md§ Artifact Naming)
步骤 -1:CLI 身份验证检查
按照 shared/cli-authentication.md § Auth Check 执行。如果未安装 CLI 或用户尚未登录,则自动安装并自动登录——不要让用户手动运行命令。
然后按照 shared/cli-authentication.md § Auth Mode Detection 确定 AUTH_MODE 并设置:
if [ "$AUTH_MODE" = "openapi" ]; then
CMD_PREFIX="listenhub openapi podcast"
else
CMD_PREFIX="listenhub podcast"
fi
后续所有 CLI 调用都使用 $CMD_PREFIX,而不是硬编码的 listenhub podcast。
步骤 0:配置设置
按照 shared/config-pattern.md 中的步骤 0(零问题启动)执行。
如果文件不存在——静默创建默认配置并继续:
mkdir -p ".listenhub/podcast"
echo '{"outputMode":"inline","language":null,"defaultMode":"quick","defaultSpeakers":{}}' > ".listenhub/podcast/config.json"
CONFIG_PATH=".listenhub/podcast/config.json"
CONFIG=$(cat "$CONFIG_PATH")
不要询问任何设置问题。 直接进入交互流程。
如果文件存在——静默读取配置并继续:
CONFIG_PATH=".listenhub/podcast/config.json"
[ ! -f "$CONFIG_PATH" ] && CONFIG_PATH="$HOME/.listenhub/podcast/config.json"
CONFIG=$(cat "$CONFIG_PATH")
设置流程(仅在用户主动要求重新配置时)
仅在用户明确要求重新配置时执行。显示当前设置:
当前配置 (podcast):
输出方式:{inline / download / both}
语言偏好:{zh / en / 未设置}
默认模式:{quick / deep / debate / 未设置}
默认主播:{speakerName(s) / 使用内置默认}
然后按顺序提出以下问题并保存:
-
outputMode:按照
shared/output-mode.md§ Setup Flow Question 执行。 -
语言(可选):“默认语言?”
- “中文 (zh)”
- “English (en)”
- “每次手动选择” → 保留
null
-
模式(可选):“默认播客模式?”
- “Quick — 简短概述”
- “Deep — 深度分析”
- “Debate — 辩论对话”
- “每次手动选择” → 保留
null
收集完答案后,立即保存:
NEW_CONFIG=$(echo "$CONFIG" | jq --arg m "$OUTPUT_MODE" '. + {"outputMode": $m}')
# Save language if user chose one (not "每次手动选择")
if [ "$LANGUAGE" != "null" ]; then
NEW_CONFIG=$(echo "$NEW_CONFIG" | jq --arg lang "$LANGUAGE" '. + {"language": $lang}')
fi
# Save mode if user chose one
if [ "$MODE" != "null" ]; then
NEW_CONFIG=$(echo "$NEW_CONFIG" | jq --arg mode "$MODE" '. + {"defaultMode": $mode}')
fi
echo "$NEW_CONFIG" > "$CONFIG_PATH"
CONFIG=$(cat "$CONFIG_PATH")
交互流程
步骤 1:主题 + 参考资料
使用 AskUserQuestion 一次提出两个子问题,或使用单个自由文本提示,同时询问主题和可选参考资料:
你想把什么主题改编成播客?如果有参考资料(URL 或文本),也请一并提供。
接受:主题描述、URL、粘贴的文本,或以上内容的任意组合。
有效输入示例:
- “2026 年的 AI 发展”
- “https://example.com/article — 讨论这篇文章”
- “远程办公的利弊。参考资料:https://study.com/remote-work-2026”
第 2 步:模式
默认:“quick”——跳过此问题,除非:
config.defaultMode被设置为其他值 → 静默使用该值- 用户在第 1 步明确提到了某种模式(例如“深入探讨”“辩论”“深入分析”)→ 根据意图推断模式
只有当用户的意图不明确且未配置默认值时,才询问此问题。大多数情况下,直接使用“quick”。
第 3 步:语言
默认:匹配用户的交互语言。 根据用户在第 1 步使用的语言进行判断:
- 如果用户用中文书写 →
zh - 如果用户用英文书写 →
en - 如果设置了
config.language→ 使用该值
绝不询问此问题。 始终静默推断。将语言显示在确认摘要中,供用户按需更改。
第 4 步:说话人数
默认:2 位说话人(对话)——这是最常见且最吸引人的形式。
跳过此问题。辩论模式需要 2 位说话人。对于 quick/deep,也默认使用 2 位说话人。
只有当用户明确要求独白或单人形式时,才使用 1 位说话人。
第 5 步:说话人选择
遵循 shared/speaker-selection.md:
- 如果设置了
config.defaultSpeakers.{language}→ 静默使用已保存的说话人 - 如果未设置 → 使用
shared/speaker-selection.md中的内置默认值(不询问) - 在确认摘要中显示说话人,用户可以按需更改
- 只有当用户明确要求更换声音时,才显示完整的说话人列表
对于 2 位说话人模式(对话/辩论):使用该语言的主要和次要默认说话人。
第 5.5 步:生成速度
默认:1.0x(原始速度)。绝不询问此问题。
只有当用户明确提出速度要求时才设置速度——“慢一点”、“快一点”、“1.25 倍速”、
“read it faster”、“slow it down”。否则完全省略 --speed,以保持请求的
历史行为。
- 范围:
0.5到2.0之间的任意值,最多保留两位小数——这是一个连续范围, 而不是固定的几个档位。 - 常见值:
0.5、0.75、1(默认)、1.25、1.5、2。0.85或1.35等 中间值同样有效。 - 含义:生成音频的语速,而非播放器的播放速率。同一集中的所有说话人共用相同的任务级速度。
- 对模糊表述采取保守映射:“慢一点” →
0.85,“快一点” →1.25,“慢很多” →0.5, “快很多” →1.75。用户指定数值时,原样传递该数值。
只有当速度不为 1 时,才在确认摘要中显示速度。
第 6 步:确认并生成
汇总所有选项:
Ready to generate podcast:
Topic: {topic}
Mode: {mode}
Language: {language}
Speakers: {speaker name(s)}
Speed: {speed}x # omit this line when speed is 1
References: {yes/no + brief description}
Proceed?
调用任何 CLI 命令前,等待用户明确确认。用户可以在此处确认前调整任何参数。
工作流
生成
-
提交(后台):运行 CLI 命令,并设置
run_in_background: true和timeout: 360000:$CMD_PREFIX create \ --query "{topic}" \ --source-url "{url}" \ --source-text "{text}" \ --mode {quick|deep|debate} \ --lang {en|zh|ja} \ --speaker "{name}" \ --speaker "{name2}" \ --speed {0.5-2.0} \ --json参数说明:
--query— 要讨论的主题或问题--source-url— 每个 URL 引用重复指定一次--source-text— 每个文本块引用重复指定一次--mode— 可选quick、deep或debate--lang— 语言代码--speaker— 可重复指定(最多 2 个);使用说话人的显示名称--speaker-id—--speaker的替代选项;使用说话人 ID,而非名称--speed— 生成速度倍数,范围为0.5–2.0(最多两位小数,默认为1);除非用户要求更改速度,否则省略此参数- 如果用户未提供引用,则省略
--source-url/--source-text
CLI 会在内部轮询,并在生成完成后返回最终结果。
-
告知用户任务已提交,完成后会收到通知。
-
收到完成通知后,呈现结果:
解析 CLI JSON 输出,提取以下字段:
audioUrl、subtitlesUrl、audioDuration、credits。从配置中读取
OUTPUT_MODE。按照shared/output-mode.md中的说明操作。inline或both:将audioUrl显示为可点击链接。呈现:
播客已生成! 在线收听:{audioUrl} 字幕:{subtitlesUrl}(如有) 时长:{audioDuration / 1000}s 消耗积分:{credits}download或both:同时下载文件。按照shared/config-pattern.md§ Artifact Naming 生成主题 slug。SLUG="{topic-slug}" # e.g. "ai-developments" NAME="${SLUG}-podcast.mp3" # Dedup: if file exists, append -2, -3, etc. BASE="${NAME%.*}"; EXT="${NAME##*.}"; i=2 while [ -e "$NAME" ]; do NAME="${BASE}-${i}.${EXT}"; i=$((i+1)); done curl -sS -o "$NAME" "{audioUrl}"呈现:
已保存到当前目录: {NAME} -
提供查看转录文本或按需获取下载 URL 的选项
成功生成后
根据本次会话中的选择更新配置:
NEW_CONFIG=$(echo "$CONFIG" | jq \
--arg lang "{language}" \
--arg mode "{mode}" \
--argjson speakers '{"{language}": ["{speakerId}"]}' \
'. + {"language": $lang, "defaultMode": $mode, "defaultSpeakers": (.defaultSpeakers + $speakers)}')
echo "$NEW_CONFIG" > "$CONFIG_PATH"
API 参考
- 说话人列表:
shared/cli-speakers.md - 说话人选择指南:
shared/speaker-selection.md - CLI 模式:
shared/cli-patterns.md - CLI 身份验证:
shared/cli-authentication.md - 配置模式:
shared/config-pattern.md
可组合性
- 调用:speakers API(用于选择说话人)
- 由以下内容调用:content-planner(阶段 3)
示例
用户:“制作一期关于最新 AI 发展的播客”
Agent 工作流:
- 检测:播客请求,主题 = “最新 AI 发展”,无引用
- 推断:模式 =
quick(默认),语言 =en(用户使用英语),2 位说话人(默认) - 显示确认摘要 → 用户确认
$CMD_PREFIX create \
--query "The latest AI developments" \
--mode deep \
--lang en \
--speaker "Mars" \
--speaker "Mia" \
--json
等待 CLI 返回结果,然后呈现标题和收听链接。