选择合适的模型
非实时模型:适合对音频质量要求高、可以接受几秒延迟的场景,例如播客、有声书、短视频配音等。使用DashScopeTTSModel 和 qwen3-tts-flash 模型,一次性发送完整文本,等待服务器处理完整个音频后返回,模型可以全局优化整段话的重音、语调和情感,获得最佳的音频质量。
实时模型:适合对响应速度要求高、需要边生成边播放的场景,例如 AI 助手、实时翻译等。使用 DashScopeRealtimeTTSModel 和 qwen3-tts-flash-realtime 模型,流式发送文本块片段,服务器实时返回音频块,延迟更低。虽然是分块合成,但模型也会保留上下文窗口来维持自然度。
使用方式
AgentScope 提供三种使用 TTS 的方式: ReActAgent 集成:通过在 ReActAgent 中添加 TTSHook,可以实现 Agent 所有回复的自动朗读,只需添加 TTSHook 就能实现边生成边播放的效果。 独立使用 TTSModel:不依赖 Agent,直接调用 TTSModel 进行独立语音合成,可以灵活使用,适合需要单独进行语音转换的场景。 作为工具使用 DashScopeMultiModalTool:将 TTS 作为多模态工具提供给 Agent,Agent 可以自行判断在需要时将文字转成语音。方式一:ReActAgent 集成
通过在 ReactAgent 添加 TTSHook 的方式,支持 ReactAgent 在回复时自动朗读。 工作原理:-
事件监听机制:TTSHook 实现了 Hook 接口,监听 Agent 执行过程中的事件。当 Agent 开始推理时触发
PreReasoningEvent,生成文本块时触发ReasoningChunkEvent,推理完成时触发PostReasoningEvent。 -
实时流式合成:在实时模式下,TTSHook 监听
ReasoningChunkEvent,每当 Agent 生成一个文本块时,立即通过 WebSocket 推送到 TTS 模型进行语音合成。这样实现了”边生成边播放”的效果,用户几乎感觉不到延迟。 -
会话生命周期管理:在第一次收到文本块时,TTSHook 会启动 TTS 会话(建立 WebSocket 连接)并订阅音频流。当 Agent 推理完成时,调用
finish()提交剩余文本并关闭会话,确保所有音频都被合成和播放。 -
音频分发机制:生成的音频块通过三种方式分发:1) 发送到响应式流(
audioSink),供 SSE/WebSocket 前端订阅;2) 调用audioCallback回调函数,用于自定义处理;3) 通过AudioPlayer本地播放,适用于 CLI/桌面应用。 -
播放中断处理:当新的推理开始时(
PreReasoningEvent),TTSHook 会中断当前正在播放的音频,关闭旧的 TTS 会话,确保新回复的音频能够立即开始播放,避免音频混乱。
本地播放模式(CLI/桌面应用)
使用 WebSocket 实时流式合成,支持边生成边播放:服务器模式(Web/SSE)
在 Web 应用中,音频需要发送到前端播放,可以将音频通过 SSE 发送到前端,或者使用响应式流,完整的代码可以参考agentscope-examples/documentation/chat-tts 模块,包含前后端交互。
方式二:独立使用 TTSModel
不依赖 Agent,直接调用 TTS 模型进行语音合成。2.1 非实时模式
适合一次性返回完整音频:2.2 实时模式 - 增量输入(Push/Finish 模式)
适用于 LLM 流式输出场景,边接收文本边合成:SessionMode 说明
方式三:DashScopeMultiModalTool(作为 Agent 工具)
Agent 通过工具方式调用 TTS,Agent 自行判断在需要时将文字转成语音完整示例
- 快速开始:
agentscope-examples/documentation/quickstart/TTSExample.java - 完整示例:
agentscope-examples/documentation/chat-tts模块,包含前后端交互