2026年7月2日 周四晚上19:30,报名腾讯会议了解“如何构建自进化的动态知识库(Brain)”(限30人)
免费POC, 零成本试错
FDE知识库

FDE知识库

学习大模型的前沿技术与行业落地应用


收藏

Dify实战 - 自动生成播客

发布日期:2024-11-11 09:01:58 浏览次数: 3587
作者:考拉的Ai树屋

微信搜一搜,关注“考拉的Ai树屋”

需求

上传PDF文件,自动生成双人播客

Dify工作流编排

开始节点

上传PDF文件。

演示用PDF文件下载:青少年信奥赛大纲

下载地址https://personel-zhouxinle888-a66353926f9185cff28f2bd374a5c3a9dd89d5206.gitlab.io/dify/dify-21.html

文档提取器节点

PDF文件中的纯文本提取出来。

PDF文本处理节点

一般来说,由于字符、格式、Latex、表格等原因,PDF 提取出的内容可能会很凌乱。

PDF文本进行处理,删除原始数据中包含换行符、Latex 数学公式以及一些可以完全删除的冗余内容。请去掉对播客作者记录无用的信息。

使用gpt-4o-mini模型对文本进行处理。

播客讲稿撰写节点

使用gpt-4o-mini模型撰写播客讲稿。

播客讲稿润色节点

使用gpt-4o-mini模型润色播客讲稿。

生成播客讲稿结果:

[("Speaker 1", "欢迎来到我们的播客!今天我们要深入探讨全国青少年信息学奥林匹克竞赛,简称NOI。这个话题真是激动人心!自1984年创办以来,NOI已经吸引了超过十万名学生参与!这就像计算机界的超级碗一样热闹!我们将讨论这个竞赛的背景、目的,以及它如何帮助学生和教师。准备好了吗?"),("Speaker 2", "嗯,听起来太棒了!我很好奇,NOI是怎么开始的?它背后有什么故事吗?"),("Speaker 1", "哦,太好了!这个故事非常有趣。NOI起初是为了提升青少年的计算机科学技能。在1980年代,计算机还没有像今天这样普及。想象一下,那时只有少数人会编程。于是,一些热爱计算机的人决定举办比赛,激励更多学生参与。就像点燃了一把火,后来演变成了全国盛事!"),("Speaker 2", "哇,真的很有意思!我能想象那种激情,像是一场初创企业的发布会,大家都在为新事物欢呼!那么现在,NOI的目的是什么呢?"),("Speaker 1", "NOI的目的很明确。它不仅仅是比赛,更是一个教育平台,给学生展示才能的机会,也为教师提供指导方向。可以说,它就像连接学生和教师的桥梁,帮助他们更好地理解计算机科学的基本原理。就像经验丰富的教练指导年轻运动员如何发挥最佳状态。"),("Speaker 2", "哦,我明白了!这就像在体育运动中,教练不仅教技巧,还帮运动员建立信心和团队精神。那么这个大纲是如何帮助学生和老师的呢?"),("Speaker 1", "非常好的问题!大纲明确了知识层级,分为入门级、提高级和NOI级。这样,无论是刚入门的学生,还是准备参加高水平比赛的选手,都能找到合适的学习内容。就像学习乐器,先学会基础音阶,才能演奏复杂乐曲。"),("Speaker 2", "哈哈,这个比喻太好了!那么在这些级别中,有哪些具体知识点或技能特别重要呢?"),("Speaker 1", "当然有!在入门级,学生需要掌握C++程序设计、数据结构和算法基础,就像打地基,基础打好了,后面的建筑才能稳固。到了NOI级,学生需要掌握高级算法策略和数学知识,才能在比赛中脱颖而出。就像赛车手,只有掌握操控技巧,才能在比赛中超越对手。"),("Speaker 2", "哇,听起来像是在准备高强度比赛!那这些知识点和技能是如何评估的呢?"),("Speaker 1", "这是个好问题!NOI的评估不仅通过考试,而是通过实际编程比赛。学生在规定时间内解决算法问题,评估他们的思维和解决问题的能力。这就像马拉松比赛,他们需要在压力中保持冷静,找到最佳解决方案。"),("Speaker 2", "这真是太刺激了!我能想象学生在比赛中紧张的样子,像面临最后一局的决斗!那么对于老师来说,这个大纲有什么建议呢?"),("Speaker 1", "老师们可以根据大纲制定教学计划,确保教学内容与学生的比赛准备一致。就像音乐老师根据学生水平选择适合曲目指导。而且,大纲还强调避免对算法复杂度的常系数考察,集中考察经典内容,让学生更专注于核心知识学习。"),("Speaker 2", "这真是个好主意!您认为这个大纲未来会有什么变化吗?"),("Speaker 1", "正如任何优秀的教育体系,这个大纲会定期修订,以适应时代发展。想象一下,就像不断进化的游戏,随着新关卡解锁,玩家需要不断提升技能才能保持竞争力。"),("Speaker 2", "真的太棒了!这让我对NOI和计算机科学的未来充满期待!谢谢您分享的精彩内容,让我大开眼界!"),("Speaker 1", "不客气,我也很享受这个讨论!希望我们能激励更多年轻人投身计算机科学的世界!感谢大家收听今天的播客,期待下次再见!别忘了关注我们哦!")]

哇,完美的生成一个双人播客讲稿结构化数据,它是一个数组结构的数据,里面包含多个元祖数据,Speaker 1Speaker 2就是播客的两位播者。完美的结构化数据,为了接下来生成播客音频做准备。

HTTP请求节点

请求部署在本地或者服务端的Python WEB API接口, 生成音频。至于如何生成音频?先别急。

结束节点

输出音频url和生成的播客文本。

音频生成

安装F5-TTS

我们使用最近大火的F5-TTSF5-TTS是由上海交通大学开源的一款高性能文本到语音(TTS)系统,基于流匹配的非自回归生成方法,结合扩散变换器(DiT)技术。系统在没有额外监督的情况下,基于零样本学习快速生成自然、流畅且忠实于原文的语音。F5-TTS支持多语言合成,包括中文和英文,能在长文本上进行有效的语音合成。

Github地址:https://github.com/SWivid/F5-TTS

注意:

F5-TTS不支持Mac架构,如果需要在Macbook上安装,可以安装F5-TTS的移植版本F5-TTS-MLX

Github地址:https://github.com/lucasnewman/f5-tts-mlx

根据Github说明,在本机Python虚拟环境中安装F5-TTS依赖库。我使用的是Python版本是3.11

编写Python API

使用PyCharm IDE创建一个依赖Fast APIPytyhon项目。Fast API就是给Pytyhon项目提供对外API访问的能力。用于我们在Dify中的HTTP请求节点调用。

代码流程:

接收上面播客讲稿润色节点生成的播客结构化数据。解析播客结构化数据,生成分段数据,每一个分段就是一句话。判断每一个分段的播者是谁。使用每一个分段中的Speaker 1Speaker 2标识去区分。Speaker 1 播者1 就使用女声参考音频生成音频结果;Speaker 2 播者2 就使用男声参考音频生成音频结果。拼接每一个分段生成的音频文件,生成最终的完整音频文件。

核心代码:

接收Dify``HTTP请求节点的播客结构化数据:

@app.post("/generate_podcast", response_model=PodcastResponse)async def generate_podcast(req: PodcastRequest):try:print(req.content)# 生成分段数据segments = ast.literal_eval(req.content)
# 生成音频片段audio_files = generate_podcast_segments(segments)
# 合并音频文件output_path = "./resources/_podcast.wav"duration = merge_audio_files(audio_files, output_path)
return PodcastResponse(audio_path=output_path,duration=duration)
except Exception as e:raise HTTPException(status_code=500, detail=str(e))

生成播客片段音频文件:

def generate_podcast_segments(segments: List[Tuple[str, str]], output_dir: str = "./resources/segments") -> List[str]:"""生成播客片段音频文件"""os.makedirs(output_dir, exist_ok=True)
audio_files = []for i, (speaker, text) in enumerate(segments, 1):output_path = f"{output_dir}/_podcast_segment_{i}.wav"
# 根据说话人选择生成函数if speaker == "Speaker 1":generate_speaker1_audio(text, output_path)else:# Speaker 2generate_speaker2_audio(text, output_path)
audio_files.append(output_path)
return audio_files

合并音频文件:

def merge_audio_files(audio_files: List[str], output_path: str) -> float:"""合并音频文件并返回总时长"""audio_data = []for file in audio_files:data, rate = sf.read(file)# 添加短暂停顿silence = np.zeros(int(SAMPLE_RATE * 0.5))# 0.5秒的停顿audio_data.append(data)audio_data.append(silence)
merged_audio = np.concatenate(audio_data)sf.write(output_path, merged_audio, SAMPLE_RATE)
duration = len(merged_audio) / SAMPLE_RATEreturn duration

始智AI平台部署F5-TTS

个人电脑配置有限,生成音频较慢。我们可以使用始智AI平台部署F5-TTS



53AI,企业落地大模型首选服务商

产品:场景落地咨询+大模型应用平台+行业解决方案

承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

添加专属顾问

回到顶部

加载中...

扫码咨询

扫码登录
登录即表示您同意《53AI网站服务协议》
服务协议

欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。

在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。

一、 定义

本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。

会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。

知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。

二、 账号注册与登录

登录方式:本网站支持以下登录方式,您可根据实际情况选择:

微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。

手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。

账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。

实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。

未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。

三、 服务内容与规范

知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。

服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。

禁止行为:您在使用服务时不得实施以下行为:

利用技术手段批量爬取、下载、转存知识库内容;

将知识库内容用于商业目的或未经授权地向第三方传播;

干扰本网站正常运行或侵犯其他用户合法权益;

发布违法违规信息或从事违反公序良俗的活动。

四、 知识产权声明

权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。

有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。

侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。

五、 个人信息保护

我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。

您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。

您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。

六、 免责声明

内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。

不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。

第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。

七、 违约责任

如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。

如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。

八、 法律适用与争议解决

本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。

因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。

九、 其他

本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。

本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。

我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。


已查阅