在语音助手、客服质检或情感监测系统中,我们经常需要从一段音频里完成两件事:提取说话内容,同时识别说话者的情绪状态。直接的做法是串联两个独立模型——先用自动语音识别(ASR)转文字,再用情感分析模型给文本打分。但这样不仅增加系统复杂度和延迟,还可能丢失文本之外的情绪线索,因为ASR转写的文字往往丢掉了语调、节奏、停顿等副语言信息。如果能让一个大语言模型(LLM)通过一个精心设计的Prompt,同时完成内容转写和情感推理,就可以用单次推理获得结构化结果。实现这一目标的关键,就在于音频推理提示词的设计。
设计这类Prompt的前提,是我们已经把音频信号转化成了某种文本表示。一种常见做法是先用ASR系统输出带时间戳的文字(甚至包含简单的力度标识),然后在Prompt中明确告知模型:你需要从以下语音转写结果中分析说话内容和情绪。也有一些方案会把音高、语速等声学特征离散化后拼接到文本中,使得纯文本的LLM也能接触到声学线索。无论采用哪种预处理方式,一个高质量的推理提示词都应该是多指令编排的,需要清晰界定任务、输出格式、推理步骤以及必要的上下文约束。
音频推理提示词的基本结构
一个能同时处理内容与情感的Prompt,至少应该包含四个层次:角色设定、输入描述、任务拆解和输出格式。角色设定让模型进入特定的“分析师”状态,例如“你是一位专业的语音分析师,擅长从转写文本中推断说话人的意图和情绪”。输入描述说明接下来给到的数据长什么样,比如“下面是一段对话的语音转写,包含说话人标签、起止时间和文字内容”。任务拆解是把“内容理解”和“情感推理”拆成两个明确的子任务,并说明它们之间的关系——例如要求模型先判断整段语音的主题,再逐句标注情绪,而不是把两者混在一起。输出格式要求JSON或特定标记的结构化文本,以便下游解析。
很多开发者容易忽略的一个点是,需要告诉模型“如何平衡内容与情感”。如果Prompt只写“请给出转写文本和情绪”,模型可能会过于侧重内容流利度,把原本充满愤怒的语句润色成中性表达。正确的做法是加入类似“保留原始转写的所有非语言特征(如重复、停顿、感叹词),并根据上下文推断每句话的准确情绪”这样的指令。此外,还应当给出情绪标签的取值标准和示例,例如使用“愤怒、悲伤、高兴、中性、惊讶”等类别,并说明如何根据文本线索(词汇、句式)和可能存在的副语言标注(如[语速加快]、[音调升高])综合判断。
构建内容与情感双重推理的Prompt示例
下面是一个可直接使用的Prompt模板,已经将上述原则内化。它假定输入是一段已经带说话人标识的文本,并允许在转写中嵌入部分声学标记。
你是一位语音分析师,任务是根据给定语音转写,完成两件事情:
1. 总结整段对话的核心内容,用一段连贯的文字描述发生了什么。
2. 以句子为单位,标注每个句子的情感,并给出简短理由。
输入格式:每条记录格式为“[说话人] [起始时间-结束时间] 文本”,文本中可能夹杂着[语速快]、[音量高]等副语言标记,请利用这些线索辅助情感判断。
情感标签只能从“愤怒、悲伤、高兴、中性、惊讶”中选择,若一句话包含复杂情绪,选占比最显著的一种。
输出格式:请严格按照如下JSON结构返回,不要添加额外注释:
{
"content_summary": "这里是内容总结",
"utterances": [
{
"speaker": "说话人",
"text": "原句文本",
"emotion": "情感标签",
"reason": "判断理由"
}
]
}
下面是转写文本:
[客服] [0.0-2.3] 您好请问有什么可以帮您[语速快]
[客户] [2.5-5.1] 我刚买的手机屏幕就坏了,你们这是什么质量[音量高]
[客服] [5.3-7.8] 非常抱歉给您带来不便,能否请您提供一下订单号
[客户] [8.0-10.5] 订单号是11223344,我希望立刻给我换新机
这个Prompt之所以有效,首先是因为它把“内容总结”和“逐句情感标注”做了明确分离,避免了模型把情感推理附着在总结上导致两者都模糊。其次,情感标签被限定为五个明确类别,并提供了利用副语言标记的指导,这使得模型能够结合文本语义和声学暗示共同做出判断。输出采用JSON格式,便于程序直接解析。在实际测试中,同样的转写输入,如果没有提供副语言标记和标签约束,模型可能会把“音量高”的那句话判断为中性陈述,但加入后能够准确输出“愤怒”。
如果输入音频经过更精细的声学特征提取,比如用专门的模型输出“每句话的平均音高、语速、音量归一化值”,我们可以把这些数值以文本形式拼入,例如改为“[客户] [2.5-5.1] 我刚买的手机屏幕就坏了,你们这是什么质量 [音高:68, 语速:1.4, 音量:85]”。此时只需要在Prompt的输入格式说明里解释这些数值的意义,并告诉模型高音高、高语速和高音量通常与激动情绪相关,模型就能做出更量化的推理。这一技巧让纯文本模型也具备了初步的多模态能力。
提升推理准确率的优化策略
仅有一个结构良好的Prompt还不足以应对现实场景的复杂性。在噪声环境或多人交叉抢话的情况下,ASR转写中可能充斥着乱码、重复和缺失片段。此时可以在Prompt中添加数据清洗指引,例如:“如果转写结果中含有明显无意义的重复词或识别错误,请先尝试修复后再进行分析;如果无法理解,则将对应句子的情感标注为‘未知’,并在理由中说明。”这样做的好处是防止模型被“脏数据”带偏,仍能输出部分有效结果。
对于较长对话,一次性推理可能超出模型上下文窗口,或者导致模型前面的记忆被稀释。优化方案是采用滑动窗口加记忆摘要的方式。可以把长对话按话题切分成若干段落,每段用相同的Prompt结构进行分析,但在每段Prompt的开头附上前一段的内容总结和情绪递进趋势,例如:“之前的对话中,客户从平静逐渐变为烦躁,目前问题尚未解决。”这种背景注入能让模型在推理当前段落时保持情绪状态的连续性,避免割裂判断。另外,如果业务场景中存在领域专有名词或情绪表达习惯,可以在系统角色设定中增加少量样本(few-shot),例如提供一两个完整的输入输出范例,这会显著提升领域内的推理稳定性。
还有一个实用技巧是要求模型输出“推理链条”,也就是在正式输出前先给出分析思路。可以在Prompt的任务部分增加一句:“在给出最终JSON之前,请先用一段文字描述你分析每个句子的推理过程。”然后让最终输出包含两个字段:reasoning和result。这种思维链引导能够提升模型在复杂情感识别时的准确率,尤其在讽刺、反语等需要深层语义理解的场景下效果明显。而代价仅仅是多消耗一些token,对于常规长度的语音,完全在可接受范围内。
进阶:融合声学特征的多模态推理思路
上面提到的方法主要依赖文本形式的副语言信息,但音频中还有很多细节难以用文字精确描述,比如颤音、音色变化、呼吸节奏等。为了让LLM更好地利用原生声学特征,我们可以训练一个小型编码器,将音频的短时频谱、梅尔频率倒谱系数等连续特征映射为一串离散token,然后把这些token像词汇一样拼接到转写文本之前或之后。设计的Prompt需要告诉模型:“前20个token是该句话的声学表示,请结合之后的文本推断情绪。”这种将连续特征离散化并融入语言模型的做法,借鉴了多模态大模型的思路,但实现代价远低于从头训练一个音频-语言大模型。
另一种更轻量的策略是让专门的语音情感识别模型输出“软标签”(概率分布),然后以文本形式注入Prompt,例如:“根据声学分析,该段语音的情绪概率分布为:愤怒0.7,中性0.2,高兴0.1。请结合文本内容给出最终判定。”这相当于用一个小模型给LLM提供了高级特征,Prompt中只需说明如何整合两种信源即可。无论采用哪种融合方式,核心依旧是提示词的设计——必须把异构信息统一在同一个指令框架下,让LLM知道每个组成部分的含义及使用优先级,才能真正释放多模态推理的潜力。
总之,音频推理提示词的设计远不止写几句要求那么简单。它需要兼顾任务定义、数据格式、输出规范和人类先验,并且不断在实际场景中迭代调优。当你下一次面对“让AI听录音并分析”的需求时,不妨先花点时间打磨你的Prompt,它很可能就是那个决定系统效果的隐形开关。