DeerFlow Podcast Generation Skill:从文本内容到双主持播客音频的完整生成管线 DeerFlow Podcast Generation Skill从文本内容到双主持播客音频的完整生成管线【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow本篇介绍 deer-flow 仓库中 podcast-generation 技能 的技术实现它如何将文章、报告、文档等文本内容转换为“男女双主持、自然对谈”格式的播客音频。读完本文你可以掌握该技能的完整工作流需求确认 → 结构化脚本 JSON → 单次调用生成、脚本 JSON 的全部字段规范、写作准则以及底层 TTS 提供方Volcengine / MiniMax的自动选择、并发控制与重试机制的源码级原理。技能定位与触发条件Podcast Generation 是 deer-flow 内置于skills/public/目录下的一个公开技能其SKILL.md头部元数据定义了触发条件name: podcast-generation description: Use this skill when the user requests to generate, create, or produce podcasts from text content. Converts written content into a two-host conversational podcast audio format with natural dialogue.也就是说当用户请求“生成/制作/产出播客”时Agent 应加载该技能。技能的核心能力包括将任意文本内容文章、报告、文档转换为播客脚本生成自然的双主持男声 女声对谈脚本通过 TTS 合成语音将各音频分片混合为最终 MP3 文件同时支持英文与中文内容locale为en或zh。从后端测试 test_skill_catalog.py 可以看到该技能被收录进技能目录catalog并支持检索例如catalog.search(podcast)会精确命中podcast-generation——这说明技能以名称/描述为索引由 Agent 在运行期按需发现与调用而非硬编码路由。技能目录结构如下skills/public/podcast-generation/ ├── SKILL.md # 技能主文档触发条件、工作流、格式规范 ├── scripts/ │ └── generate.py # 端到端生成脚本TTS 混音 字幕 └── templates/ └── tech-explainer.md # 技术文档转播客的专用模板整体工作流三步走一次执行技能文档把工作流拆为三步其中第三步强调单次完整执行第 1 步理解需求收到播客生成请求后需要确认源内容要转换的文本/文章/报告语言英文或中文依据内容判断输出位置播客保存到哪里文档特别提示不需要检查/mnt/user-data下的文件夹。第 2 步创建结构化脚本 JSON在/mnt/user-data/workspace/下生成命名形如{descriptive-name}-script.json的脚本文件结构为{ locale: en, lines: [ {speaker: male, paragraph: dialogue text}, {speaker: female, paragraph: dialogue text} ] }第 3 步一次性执行生成python /mnt/skills/public/podcast-generation/scripts/generate.py \ --script-file /mnt/user-data/workspace/script-file.json \ --output-file /mnt/user-data/outputs/generated-podcast.mp3 \ --transcript-file /mnt/user-data/outputs/generated-podcast-transcript.md参数说明与 generate.py 中argparse定义一致参数是否必填说明--script-file必填脚本 JSON 文件的绝对路径--output-file必填输出 MP3 的绝对路径--transcript-file可选强烈建议输出字幕 Markdown 的绝对路径技能文档中的 IMPORTANT 约束值得逐条落实在单次调用中完整执行脚本不要把工作流拆成多个步骤脚本内部自行处理所有 TTS API 调用与音频生成不要去读 Python 源码直接带参数调用即可始终带上--transcript-file为用户生成可读字幕TTS 提供方及其并发度由环境变量自动决定调用方不需要也不应该调整。脚本 JSON 格式详解脚本 JSON 是整条管线的“合同”完整结构如下{ title: The History of Artificial Intelligence, locale: en, lines: [ {speaker: male, paragraph: Hello Deer! Welcome back to another episode.}, {speaker: female, paragraph: Hey everyone! Today we have an exciting topic to discuss.}, {speaker: male, paragraph: Thats right! Were going to talk about...} ] }字段规范title播客标题可选用作字幕文件的 Markdown 标题locale语言代码en或zhlines台词数组每项包含speaker只能是male或femaleparagraph该角色的台词文本。从 generate.py 的解析实现可以看到容错细节Script.from_dict对缺失字段有默认值——locale缺省为enspeaker缺省为maleparagraph缺省为空字符串而generate_podcast入口会校验顶层必须有lines键缺失时直接抛出带已有键列表的ValueErrorInvalid script format: missing lines key。这保证格式错误“响亮地失败”而不是产出残缺音频。脚本写作准则脚本写作质量直接决定音频效果文档给出三组准则格式要求只有两位主持male / female自然交替目标时长约10 分钟约40–60 句台词开场必须是男主持说包含“Hello Deer”的问候语。语气与风格自然、口语化的对谈——像两个朋友聊天使用随意表达与口语化过渡避免过于正式的语言或学术腔包含反应、追问与自然插入语。内容准则主持人间频繁互动句子短小便于听觉跟读纯文本——台词中不要出现 Markdown 格式技术概念要转译为通俗语言不要出现数学公式、代码或复杂符号让内容对“纯听觉听众”友好、有吸引力剔除日期、作者名、文档结构等元信息。端到端示例AI 历史播客文档给出了一个完整示例。用户请求“Generate a podcast about the history of artificial intelligence”。第 1 步创建脚本文件/mnt/user-data/workspace/ai-history-script.json{ title: The History of Artificial Intelligence, locale: en, lines: [ {speaker: male, paragraph: Hello Deer! Welcome back to another fascinating episode. Today were diving into something thats literally shaping our future - the history of artificial intelligence.}, {speaker: female, paragraph: Oh, I love this topic! You know, AI feels so modern, but it actually has roots going back over seventy years.}, {speaker: male, paragraph: Exactly! It all started back in the 1950s. The term artificial intelligence was actually coined by John McCarthy in 1956 at a famous conference at Dartmouth.}, {speaker: female, paragraph: Wait, so they were already thinking about machines that could think back then? Thats incredible!}, {speaker: male, paragraph: Right? The early pioneers were so optimistic. They thought wed have human-level AI within a generation.}, {speaker: female, paragraph: But things didnt quite work out that way, did they?}, {speaker: male, paragraph: No, not at all. The 1970s brought whats called the first AI winter...} ] }第 2 步执行生成python /mnt/skills/public/podcast-generation/scripts/generate.py \ --script-file /mnt/user-data/workspace/ai-history-script.json \ --output-file /mnt/user-data/outputs/ai-history-podcast.mp3 \ --transcript-file /mnt/user-data/outputs/ai-history-transcript.md生成产物ai-history-podcast.mp3播客音频文件ai-history-transcript.md可读的 Markdown 字幕。Tech Explainer 模板技术内容的专门化路径技能附带一个专门模板 templates/tech-explainer.md仅在用户请求与“技术文档/教程转播客”匹配时才读取。它规定了三项输入预处理简化代码示例用自然语言描述代码做什么聚焦概念而非语法移除复杂符号公式用文字解释API 端点按功能描述而非 URL 路径配置示例概括为设置说明补充上下文解释技术为何重要、给出真实用例、为抽象概念加类比。模板还给了一个“原文 → 播客化”的对照示例把POST /api/v1/users的 REST 请求示例改写成“用户创建功能允许应用向服务器提交姓名与邮箱成功后服务器确认创建”这类听觉友好的叙述并补充注册流程、管理后台、数据迁移等使用场景。模板给出的生成命令同样是三参数调用--script-file/--output-file/--transcript-file另附写作贴士单集聚焦一个核心概念、多用类比、包含“为什么重要”、不解释就不使用行话、面向初学者。输出格式与产物交付最终播客遵循固定的 “Hello Deer” 格式两位主持一男一女自然对谈以 “Hello Deer” 问候开场目标时长约 10 分钟交替发言以保持节奏。生成完成后的交付规范播客与字幕统一保存在/mnt/user-data/outputs/使用present_files工具同时把 MP3 与字幕 MD 分享给用户附上简短的结果描述主题、时长、主持配置主动提出可再生成regenerate以支持调整。TTS 提供方配置与自动选择机制环境变量总览技能支持两家 TTS 提供方全部通过环境变量驱动Volcengine火山引擎环境变量必填默认值VOLCENGINE_TTS_APPID是—VOLCENGINE_TTS_ACCESS_TOKEN是—VOLCENGINE_TTS_CLUSTER否volcano_ttsVOLCENGINE_TTS_VOICE_TYPE_MALE否zh_male_yangguangqingnian_moon_bigttsVOLCENGINE_TTS_VOICE_TYPE_FEMALE否zh_female_sajiaonvyou_moon_bigttsMiniMax环境变量必填默认值MINIMAX_API_KEY是—MINIMAX_API_HOST否https://api.minimaxi.comMINIMAX_TTS_MODEL否speech-2.6-hdMINIMAX_TTS_VOICE_MALE否male-qn-qingseMINIMAX_TTS_VOICE_FEMALE否female-tianmei声音类型的覆盖值会被strip()去除首尾空白未设置或为空白时回落到上述默认值见 generate.py 中DEFAULT_VOLCENGINE_TTS_VOICE_TYPE_*常量及_process_line的取值逻辑。提供方自动选择逻辑选择规则与_resolve_tts_provider的实现逐条对应若PODCAST_GENERATION_PROVIDER显式设置为volcengine或minimax则以该值为准大小写不敏感否则VOLCENGINE_TTS_APPID与VOLCENGINE_TTS_ACCESS_TOKEN均已设置 → 使用 Volcengine TTS默认仅设置了MINIMAX_API_KEY→ 使用 MiniMax TTS接口为/v1/t2a_v2两者皆无 → 抛出带修复指引的ValueError提供方取值非法非 volcengine/minimax同样报错。此外tts_node在执行前还会做凭证二次校验选中 Volcengine 但缺少 APPID/TOKEN、或选中 MiniMax 但缺少 API Key均直接抛错避免半途失败。generate.py 源码级实现剖析结合 scripts/generate.py整个管线可归纳为“解析脚本 → 并发 TTS → 顺序混音 → 写字幕/落盘”四段以下是关键设计。1. Volcengine TTS 调用细节text_to_speech_volcengine向https://openspeech.bytedance.com/api/v1/tts发送 POST 请求要点包括认证头为Authorization: Bearer;{access_token}请求体携带appappid/token/cluster、audiovoice_type、encoding: mp3、speed_ratio: 1.2——固定 1.2 倍速、request每次请求生成新的uuid作为 reqid成功判定HTTP 200 且业务码code 3000返回体data字段为base64 编码的 MP3解码后得到音频字节。2. MiniMax TTS 调用细节text_to_speech_minimax向{MINIMAX_API_HOST}/v1/t2a_v2发请求请求体中model由MINIMAX_TTS_MODEL控制默认speech-2.6-hdvoice_setting按说话人选择男/女 voice_id速度/音量/音高固定为1.0 / 1.0 / 0audio_setting固定为 32kHz 采样率、128kbps 比特率、单声道 MP3output_format: hex返回的data.audio为hex 字符串bytes.fromhex解码得到音频字节。MiniMax 的错误处理区分“可重试”与“不可重试”base_resp.status_code属于{1000, 1001, 1002, 1039}未知、超时、RPM 限流、TPM 限流时会重试鉴权、余额、入参等永久错误则直接失败不重试。3. 并发与退避重试并发度由提供方自持Volcengine 使用 4 个 workerDEFAULT_MAX_WORKERS 4MiniMax 固定单线程DEFAULT_MINIMAX_MAX_WORKERS 1以降低限流概率源码注释明确这是设计决策——没有面向调用方的并发旋钮。ThreadPoolExecutor按台词索引提交任务结果按原始行序重组保证音频顺序与脚本一致。指数退避 抖动_backoff_sleep以min(2 ** attempt, 30)秒为基数叠加 0–1 秒随机抖动并在服务器返回Retry-After头时优先采用该值。文档解释抖动的意义当并发 worker 同时被限流时抖动可以“去同步化”避免重试风暴thundering herd。默认重试 4 次DEFAULT_TTS_MAX_RETRIES 4可用MINIMAX_TTS_MAX_RETRIES覆盖。失败即整体失败tts_node收集所有失败行号若重试后仍有任意一行合成失败抛出ValueError并列出失败行号1 起始提示“通常是瞬时 API 限流稍等重试”——而不是悄悄输出缺句的播客。4. 混音与字幕生成mix_audio将按序的音频分片b.join拼接为单一字节流并校验非空直接写入--output-file自动创建父目录generate_markdown生成字幕以# {title}开头每行渲染为**Host (Male)**: 台词/**Host (Female)**: 台词的形式写入--transcript-file同样自动建目录。实战注意事项Notes 精读技能文档 Notes 部分给出四条落地经验均与源码行为互相印证始终一次性跑完整管线——无需单独测试各步骤也不必担心超时对应“单次调用”约束脚本 JSON 的locale应匹配内容语言en或zh技术内容应在脚本写作阶段就为听觉做简化公式、代码等复杂符号要在脚本中翻译为口语表达内容越长生成的播客越长——脚本行数即音量的直接来源每行一次 TTS。小结podcast-generation 技能把“文本 → 播客”这件事工程化为一个可复制的三段式流程先按写作准则产出结构化的双主持脚本 JSON再用一条命令端到端调用generate.py完成 TTS、混音与字幕生成。它的几个值得借鉴的设计点是提供方选择完全由环境凭证驱动且可显式强制并发与重试策略由提供方内部自持而非暴露给调用方以及“任何一行失败就整体失败”的响亮失败策略确保交付的 MP3 要么完整、要么明确报错。若你的 deer-flow 环境已配置 Volcengine 或 MiniMax 凭证即可按本文示例直接跑通从文章到 10 分钟双主持播客的完整生成。【免费下载链接】deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of tasks that could take minutes to hours.项目地址: https://gitcode.com/GitHub_Trending/de/deer-flow创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

最新新闻

IPADS主导RISC-V指令集扩展写入国际标准:系统软件视角的里程碑

IPADS主导RISC-V指令集扩展写入国际标准:系统软件视角的里程碑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 8:28:12
HK32F030M驱动TM1624数码管显示完整实战

HK32F030M驱动TM1624数码管显示完整实战

简介:一套完整可用的数码管显示驱动源码,围绕HK32F030M微控制器与TM1624驱动芯片,面向嵌入式初学者与项目开发者,适用于工业仪表、智能家居等需要数字或字符显示的设备。压缩包共380个文件,以C源码、H头文件、Keil工程…

2026/9/7 8:28:12
TMS320F28027例程实战:从GPIO到ePWM/ADC/SCI的配置与调试指南

TMS320F28027例程实战:从GPIO到ePWM/ADC/SCI的配置与调试指南

简介:TMS320F28027 例程包面向TI C2000系列嵌入式开发者,适合学习数字信号处理与实时控制的人员使用。内容围绕SCI、ADC、EPWM、TIMER、SPI五大外设展开,涵盖串口通信收发、模拟量采集、PWM波形生成、定时器中断以及SPI主从机通信等典型场景&…

2026/9/7 8:28:12
开源ZigBee协议栈C源码解析:从原理到移植实战

开源ZigBee协议栈C源码解析:从原理到移植实战

简介:一套完整的开源ZigBee协议栈C语言实现,面向嵌入式系统工程师与物联网开发者,适合学习协议原理、移植协议栈或定制无线网络功能时参考。协议栈按PHY、MAC、NWK、APS等分层组织,清晰展示了帧收发、信道访问、路由选择与设备管理…

2026/9/7 8:28:12
ZigBee协议栈C语言源码解析:从Z-Stack结构到组网调试实践

ZigBee协议栈C语言源码解析:从Z-Stack结构到组网调试实践

简介:这份资源是完整的开源ZigBee协议栈C语言实现,基于IEEE 802.15.4标准,面向嵌入式系统工程师和IoT开发者,可用于研究、定制和扩展ZigBee网络功能。压缩包共995个文件,约6.04MB,以C源码(187个…

2026/9/7 8:28:12
梅达焊接控制器中文说明书解读:参数、报警与现场调试实战

梅达焊接控制器中文说明书解读:参数、报警与现场调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/7 8:23:12