PaiFlow集成千问TTS:超拟人语音合成新方案
PaiFlow 之前的 TTS 能力,主要是围绕讯飞的超拟人语音合成来做的。效果没毛病,链路也跑得通,讯飞也给新人提供了免费的额度,但无奈我购买的额度用完了,再购买好贵,于是就又被迫接入了阿里的千问 TTS。😄
接下来,我会通过 qwen-tts 的接入全过程,带大家搞清楚在 PaiFlow 现有的架构上,如何集成一个新的 TTS 服务(大家可以尝试接入其他厂商的 TTS,比如说智谱)。
1.千问TTS内置插件的整体设计
回到上一篇插件节点执行器。PluginNodeExecutor 只做插件节点的执行,具体怎么调工具完全由 PluginServiceClient 接管。

在 PluginServiceClient 中,我们注入了 List
TtsIntegration 接口定义的比较简单,source 方法返回插件的标识符,call 方法规定了所有 TTS 实现都必须接收 NodeState 和 inputs 作为参数,并返回一个包含结果的 Map。确保无论底层调用哪个厂商的服务,对于上层调用者 PluginServiceClient 来说,调用方式都是一致的。
public interface TtsIntegration {
// 返回插件标识符(如"spark"、"qwen")
String source();
// 执行TTS合成
Map call(NodeState nodeState, Map inputs) throws Exception;
}
source 的配置在 application.yml 文件中,可选项目前有 spark 和 qwen,通过这个配置就能切换到 SmartTTSIntegration 或者 QwenTTSIntegration 来完成超拟人音频内置插件的执行。

接下来,我们在 toolCall 方法执行的过程中调用 getTtsIntegration 方法判断 ttsSource 的值,如果是 qwen 就会执行 QwenTTSIntegratoin 的 call 方法。

通过流程图来表示就是下图这样。
[MISSING IMAGE: , ] 不同厂商需要不同的配置参数,千问的 tts 需要配置 apiKey、model、url 等参数。

其值我们放...
企业级Agent工作流编排项目PaiFlow
Vibe Coding版本的PaiAgent
派聪明RAG AI知识库Java版本+Go版本
微服务 PmHub、技术派、MYDB
求职派JobClaw(OpenClaw/Hermes架构
PaiCLI(类似Claude Code的Agent
派简历(代码已完成)
等实战项目。
1. 微信扫右侧的优惠券加入知识星球
2. 解锁星球的实战项目教程和源码: 项目源码+教程获取
1 条评论
回复