关于 daily-news-caster
这是一个纯指令 Skill,可将实时新闻整理为双人对话播客脚本并生成音频。它调用本地新闻抓取和语音合成 Skill,最后提供脚本和音频文件路径。
主要功能
- 01通过依赖 Skill 获取实时新闻
- 02编写带角色标记的双人问答脚本
- 03逐句生成语音音频
- 04合并音频为播客文件
- 05运行前检查所需 Skill
适用场景
- 01制作时事新闻语音播报
- 02将指定来源或主题的新闻编成播客
- 03生成便于后续收听的脚本和音频
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ noizai/ skills --skill daily-news-caster安装后在 Claude Code 中输入/daily-news-caster确认已加载。
详细介绍
每日新闻播报技能
此技能可让 Agent 获取实时新闻,将新闻整理成对话式播客脚本,并生成朗读脚本的音频文件。
工作流说明
当用户要求获取最新新闻并制作成播客时,请严格按照以下步骤操作:
步骤 1:确认所需技能已就绪
确认工作区中存在 news-aggregator-skill 和 tts(位于 skills/ 或 .cursor/skills/ 下)。如果缺少其中任一技能,请告知用户缺少哪些技能,并让他们手动安装后再继续。切勿尝试自动安装技能。
步骤 2:获取最新新闻
在 news-aggregator-skill 技能目录中找到 fetch_news.py(例如,skills/news-aggregator-skill/scripts/fetch_news.py)。如有需要,请阅读其 SKILL.md 以了解用法。
运行脚本以获取实时新闻。你可以根据用户的请求指定来源(例如,hackernews、github、all)或关键词。
命令示例:
python3 skills/news-aggregator-skill/scripts/fetch_news.py --source all --limit 10 --deep
步骤 3:起草播客脚本(内部步骤)
阅读获取的新闻数据,并将信息改写为 Markdown 播客脚本。 最重要的是,优先采用双主持人(两人)对话形式(例如,主持人 A 和主持人 B),并以生动的 问答风格展开。 脚本应符合以下要求:
- 双主持人对话简洁明了: 编写两位主持人之间引人入胜的互动对话。主持人 A 应提出有见地且有价值的问题来引导对话,主持人 B 应给出内容丰富、简洁明了的回答。整体应像一段聪明、节奏明快的问答对话。
- 避免冗余: 不要加入不必要的赘述或过长的过渡。表达应简明扼要,同时保留所有关键信息和事实。
- 清晰标注发言者: 每行或每段开头都应标注发言者姓名(例如,
Host A:或Host B:)。 - 确保文本适合朗读: 避免在朗读文本中使用复杂 URL、原始 Markdown 链接或难以发音的字符。
将此脚本保存到名为 podcast_script.md 的本地文件中。
podcast_script.md 内容示例:
**Host A:** Welcome to today's news roundup. We have some exciting tech updates today. To start things off, there's a big update from [Company Name]. What are the core implications of their new release for everyday users?
**Host B:** The main takeaway is that... [Insert concise answer and summary of News Item 1]. This completely changes how we approach [Topic].
**Host A:** That's fascinating. But does this new approach raise any security concerns, especially given recent data breaches?
**Host B:** Exactly. Experts are pointing out that... [Insert analysis or context].
**Host A:** Moving on to the open-source world, what's trending on GitHub today that developers should pay attention to?
**Host B:** A standout project is... [Insert concise summary of News Item 2].
**Host A:** Great insights. That's all for today's quick update. Thanks for tuning in!
步骤 4:逐行生成播客音频
为避免一次性将整个脚本发送到 API,必须逐句生成音频(一人一句地生成),然后再将音频拼接起来。
使用本地 tts 技能中的 tts.py(skills/tts/scripts/tts.py)。阅读该技能的 SKILL.md,了解完整用法和后端选项。
1. 为每行生成音频:
为脚本中的每行对话运行 speak 命令。为对应的主持人使用合适的语音或参考音频。如果用户为两个角色提供了参考音频文件,请通过 --ref-audio 标志使用(需要 noiz 后端和 NOIZ_API_KEY)。如果没有 API 密钥,可以使用访客模式语音(语音列表请参阅 tts SKILL.md)。
python3 skills/tts/scripts/tts.py -t "Welcome to today's news roundup..." --ref-audio host_A.wav -o line_01.wav
python3 skills/tts/scripts/tts.py -t "The main takeaway is that..." --ref-audio host_B.wav -o line_02.wav
2. 拼接音频文件:
创建一个文本文件(例如,list.txt),按顺序列出所有生成的音频文件:
file 'line_01.wav'
file 'line_02.wav'
然后使用 ffmpeg 将它们合并为一个播客音频文件:
ffmpeg -f concat -safe 0 -i list.txt -c copy podcast_output.wav
步骤 5:呈现最终结果
完整生成并合并音频后,向用户呈现结果。必须提供以下两项内容:
- 在聊天中输出完整起草的 Markdown 播客脚本,供用户阅读。
- 提供最终
podcast_output.wav文件的路径,供用户收听音频。 - 简要概述播客中包含的新闻标题。
安全与数据披露
此技能仅包含指令,本身不含可执行代码。运行时,它会调用两个依赖技能中的脚本:
- 执行的脚本:
news-aggregator-skill/scripts/fetch_news.py(从公开来源获取新闻)和tts/scripts/tts.py(生成语音音频)。运行此技能前,这两个脚本都必须已在本地就绪;请查看其代码和 SKILL.md,了解其网络行为和凭据要求。 - 凭据:此技能本身不需要任何 API 密钥或环境变量。
tts依赖项可能需要NOIZ_API_KEY才能使用语音克隆功能(noiz 后端);没有该密钥也可直接使用访客模式语音。详情请参阅 tts 技能的 SKILL.md。 - 网络访问:所有网络调用都由依赖技能执行,而非由此技能的指令发起。news-aggregator 会从公开新闻来源获取内容;只有在使用 noiz 后端时,tts 技能才会连接
noiz.ai。 - 写入的文件:
podcast_script.md、line_*.wav(每句话对应的临时音频)、list.txt(ffmpeg 拼接列表)、podcast_output.wav(最终输出)。所有文件都写入当前工作目录。 - 无持久状态:此技能不会写入配置文件、存储凭据或修改其他技能。