您可以通过指令标签(由 LLM 自动生成或业务实时注入),来控制 AI 播报的情绪(如欢快、伤心)、方言(如四川话、北京话)、语气(如撒娇、吵架)、语速、音量和音调等。同时,可将用户问题作为上下文传递给 TTS,能让 AI 的回复情感更贴合对话场景,实现富有情感的拟人化交互。
Replay
Play
00:00
/
00:00
Live
Fullscreen
Cssfullscreen
1x
- LLM 自动生成:LLM 实时分析语境,在回复文本中自动插入指定格式的标签。
- 业务实时注入:在对话过程中,业务端根据特定事件(如用户投诉、讲笑话等)动态发送指令,为 AI 的下一轮回复注入指定格式的标签。
- 标签解析(平台) :系统识别双大括号 {{ }} 标签(语音合成大模型)或 <cot> 标签(声音复刻大模型),将其转化为 TTS 参数。
- 2.0 模型:像理解对话一样理解标签里的“要求”,从而调整播报。
- 1.0 模型:严格执行标签里的“数值”,从而调整播报。
该功能仅在使用以下火山引擎 TTS 模型时生效:
调用 StartVoiceChat 时,配置 TTSConfig.Context:
QuoteUserQuestion :仅在使用火山语音合成大模型 2.0 时生效,且优先级低于指令标签。
"Provider": "volcano_bidirection",
"TagParse": true, // 设置为 true,开启标签解析
"QuoteUserQuestion": true // 默认 true,将用户问题传给 TTS,让模型根据对话语境自动匹配合适的回复语气,仅 2.0 模型支持
方式1:编写 Prompt 引导 LLM 生成标签
在 LLM(方舟模型、Coze 智能体或第三方大模型)的系统提示词中引导 LLM 根据语境自动生成标准格式的指令标签。
对于方舟或第三方大模型,需在 LLMConfig.SystemMessages 编写 Prompt。
火山语音合成大模型 2.0
火山语音合成大模型 1.0
通过自然语言指令标签,控制 AI 的情绪、方言、语气、语速、音量和音调等。
{{"additions":{"context_texts":["自然语言描述"]} }}
- 注意末尾 }} 前必须留一个空格。系统解析标签时,会以 {{ 和 }} 作为边界,缺少空格会导致解析失败。
- 标签须置于所需作用句子的前面,且标签只作用于所在的整个子句单元及之后所有子句,直到遇到新标签。
- 例如:下方示例,第一句中性 \-\> 第二句兴奋期待 \-\> 第三句温馨亲切
没问题,我已经为你预订好了周六去海边的行程。{{"additions":{"context_texts":["语气变得非常兴奋,充满期待"]} }} 那里的沙滩非常漂亮,你一定会玩得非常开心的!{{"additions":{"context_texts":["语速放慢,语气变得温馨亲切"]} }} 不过记得带上防晒霜和遮阳帽,海边的阳光可能会有些强烈。
- 为优化首帧速度,回复的第一句话建议不要携带标签(保持纯文本),从第二句开始按需插入。
- 任务:分析对话中的用户情绪,并在回复文本中嵌入情感指令标签,以引导下游 TTS 以匹配的语气、情感和节奏进行播报。
- 标签格式:{{"additions":{"context_texts":["描述"]} }}
- 为优化首帧速度,首句保持纯文本,从第二句开始添加标签。
- 标签须置于其所作用句子的前面,且标签的结束符 }} 前必须留一个空格。例如 `{{"additions":{"context_texts":["欢乐一点"]} }} 你好,我很高兴认识你。`。
- LLM 预期返回:{{"additions":{"context_texts":["你的语气再欢乐一点"]} }}太棒了,恭喜你!
通过结构化参数标签,精确控制 AI 的播报情绪及强度。
{{"audio_params":{"emotion":"情绪代号","emotion_scale":强度数值} }}
- emotion_scale:情绪强度,范围 1~5,默认值为 4。
- 特别注意:末尾 }} 前必须留一个空格。系统解析标签时,会以 {{ 和 }} 作为边界,缺少空格会导致解析失败。
- 标签须置于所需作用句子的前面,且标签只作用于所在的整个子句单元及之后所有子句,直到遇到新标签。
- 为优化首帧速度回复的第一句话建议不要携带标签(保持纯文本),从第二句开始按需插入。
- 任务:实时分析对话中的用户情绪,并在回复文本中嵌入情感指令标签,以引导下游 TTS 以匹配的情感播报。
- 标签格式:`{{"audio_params":{"emotion":"情绪代号(英文)","emotion_scale":强度数值} }}`。
- 支持的情绪(emotion):happy,sad,angry,surprised,fear,hate,excited。
- 情绪强度(emotion_scale):范围为 1-5。
- 为优化首帧速度,首句保持纯文本,从第二句开始添加标签。
- 标签须置于其所作用句子的前面,且标签的结束符 }} 前必须留一个空格。
- LLM 预期返回:天气真不错!{{"audio_params":{"emotion":"happy","emotion_scale":5} }}我们出去玩吧!
- AI 播报(第二句以高兴的语气):天气真不错!我们出去玩吧!
在对话过程中,您可以根据后端识别到的实时事件(如用户讲了个笑话、表达了不满等),动态地为 AI 的下一轮回复注入指令标签。该标签作用于下一轮回答的全局。
- 在您的后端业务逻辑中,识别需要改变 AI 情感的触发点(如通过 ASR 识别到关键词、或者业务逻辑触发)。
- Command:设为 SetTTSContext
- Message:传入一个序列化后的 JSON 字符串。不同模型,指令不同:
"{\"Tag\":{\"additions\":{\"context_texts\":[\"语气欢乐一点\"]}}}"
"{\"Tag\":{\"audio_params\":{\"emotion\":\"happy\",\"emotion_scale\":5}}}"
示例: 以火山语音合成大模型 2.0 为例
"RoomId": "YOUR_ROOM_ID",
"TaskId": "YOUR_TASK_ID",
"Command": "SetTTSContext",
"Message": "{\"Tag\":{\"additions\":{\"context_texts\":[\"语气欢乐一点\"]}}}"
系统遵循以下优先级:
- 通过 UpdateVoiceChat 发送的指令。
- LLM 文本标签:LLM 自动生成的嵌入式标签。
- QuoteUserQuestion:将用户问题作为上下文。
例如,当 LLM 返回了带有“伤心”情绪的标签,但您通过 UpdateVoiceChat 接口发送了“开心”的指令时,AI 最终会以“开心”的语气进行播报。
使用声音复刻大模型 2.0 时,可使用 COT 标签来控制 AI 情绪。此功能仅在 “参数透传” 模式下可用。
调用 StartVoiceChat 时,在 VolcanoTTSParameters 中传入以下参数:
- req_params.speaker:您的声音复刻ID。StartVoiceChat 接口版本不同,获取方式不同。具体请参见声音复刻。
- req_params.additions.use_tag_parser:设为 true。
- req_params.model:设为 seed-tts-2.0-expressive。
YOUR_VOICE_ID 替换为您的声音复刻ID。
"Provider": "volcano_bidirection",
"ResourceId": "seed-icl-2.0"
"VolcanoTTSParameters": "{\"req_params\":{\"speaker\":\"YOUR_VOICE_ID\",\"model\":\"seed-tts-2.0-expressive\"},\"additions\":{\"use_tag_parser\":true}}"
步骤 2:编写 Prompt 引导 LLM 生成标签
在 LLM(方舟模型、Coze 智能体或第三方大模型)的系统提示词中引导 LLM 根据语境自动生成 COT 标签。
对于方舟或第三方大模型,需在 LLMConfig.SystemMessages 编写 Prompt。
<cot text=风格描述>文本内容</cot>
- 文本内容长度:单句文本长度不可超过 64 个字符(包含 <cot> 标签)。
- 生效范围:仅限于 <cot> 与 </cot> 之间的文字。
- 任务:实时分析对话中的用户情绪,并在回复文本中嵌入 cot 标签,以引导下游 TTS 以匹配的情感播报。
- 格式:<cot text=风格描述>文本内容</cot>
- 约束:包含 <cot> 标签在内的单句文本长度不可超过 64 个字符。
- LLM 预期返回:<cot text=急促难耐>工作占据了生活的绝大部分</cot>,只有去做自己认为伟大的工作,才能获得满足感。
- AI 播报(以急促难耐的语气):工作占据了生活的绝大部分,只有去做自己认为伟大的工作,才能获得满足感。
- 字幕显示:<cot text=急促难耐>工作占据了生活的绝大部分</cot>,只有去做自己认为伟大的工作,才能获得满足感。
COT 标签(<cot>...</cot>)不会被过滤,它们会作为文本内容直接显示在字幕中。如果您需要展示或存储纯净的字幕,必须在自己的业务后端手动移除这些标签(例如,使用正则表达式)。
- 避免在首句添加标签:为获得最优的首帧音频生成时间(TTFT),建议在回复的首句使用纯文本,从第二句开始通过 Prompt 嵌入情感标签。
- 标签粒度:为确保情感和风格的准确应用,建议以完整的句子为单位添加标签,避免在句子中间插入标签,以确保语音合成韵律的连贯性。