语音合成(TTS)
让回复开口说话:引擎选择、音色配置、情绪与语速
最小配置
json
{
"text_to_voice": "edge",
"tts_voice_id": "zh-CN-XiaoxiaoNeural",
"voice_reply_voice": true
}| 配置项 | 作用 |
|---|---|
text_to_voice |
合成引擎(见下表) |
tts_voice_id |
音色 ID(各家命名不同,填错会静默回退到默认音色) |
voice_reply_voice |
收到语音消息时用语音回复 |
always_reply_voice |
所有回复都用语音(适合陪伴/播报场景,注意成本) |
text_to_voice_model |
部分引擎需要(如 OpenAI 的 tts-1 / tts-1-hd) |
引擎对比
| 引擎 | 是否需要 Key | 适合场景 |
|---|---|---|
edge |
❌ 免费 | 试水、内部演示、预算敏感 |
ali(阿里云 CosyVoice 等) |
✅ | 中文音色多、效果自然,国内推荐 |
minimax |
✅ | 音色丰富、支持情感参数,中文表现好 |
openai |
✅ | 多语种,音色自然 |
azure |
✅ | 音色库极大、可控性强(SSML 支持好) |
elevenlabs |
✅ | 英文/克隆音色的天花板 |
tencent / baidu / xunfei / zhipuai |
✅ | 国内传统方案,稳定 |
pytts |
❌ | 完全离线,音质一般,适合内网无外网环境 |
custom |
自建 | 接你自己的 TTS 服务(含私有化模型) |
同一家厂商的语音 Key 通常在识别与合成间通用(如阿里云), 因此选定一家后,ASR + TTS 一起配,Key 管理最省事。
让音色"像人"的几个要点
- 音色要匹配人设:给"专业顾问"配活泼少年音会很出戏。音色与人格设定要一起定。
- 文本侧比音色更影响"AI 味":口语化的措辞、短句、语气词,比换更贵的音色更有效。
- 语速是角色的属性,不是每次调参的对象。定好一种语速,全站统一。
- 情绪(情感标签):部分引擎支持情感参数(如开心/低落/平静)。做法是让模型在正文前输出情绪标签, 后端解析后剥离标签、把情绪传给 TTS——用户听到的是有起伏的声音,而不是念稿。
注意
成本:always_reply_voice 会把每条回复都合成成音频,长回答可能几十秒/条。
计费按字符或时长,先算单价再全量开。多数场景用 voice_reply_voice(来语音才回语音)就够。
排障速查
| 现象 | 原因 |
|---|---|
| 有文字没声音 | 引擎 Key 未配 / voice_reply_voice 与 always_reply_voice 都为 false |
| 声音是默认音色 | tts_voice_id 填错,引擎静默回退(不报错,很容易漏) |
| 只念了一半 | 文本里有引擎不支持的字符/表情,或超长文本被截断 |
| 通道里没语音 | 该通道不支持语音消息类型(如部分机器人 API),需改用链接/文件形式 |
与通道的关系
- 网页控制台:可直接播放合成音频。
- 微信 / 企业微信:以语音消息(或文件)形式发送,苹果/安卓均可播放。
- 飞书 / 钉钉:受各自 API 限制,通常以音频文件或卡片形式呈现。
各通道的限制见通道文档。