在Coze使用开放平台接口-【2】创建工作流-语音伪造检测工作流,我们已经成功运用Coze使用开放平台接口-【1】创建插件创建的插件,创建了语音伪造检测的工作流。本文档基于稍微复杂一点的通话语音结果分析工作流
,结合大模型,来实现通话语音识别结果分析的工作流。
我们就不针对如何创建工作流做赘述,就根据业务流,以及创建好的工作流来描述节点和步骤。
对通话语音内容总结,有时候会需要处理单声道的历史通话数据语音(现在也有保存成单声道的),所以我们也把 人声分割 接口加入到插件内,当然要分析就要有语音识别,这两个插件都已经在 快商通AI开放平台插件里面了,直接用即可。
大致的流程分为:鉴权->人声分割->语音识别->大模型分析->结果规整输出
用大模型来分析的原因也主要是可以,降低因为语音识别错误导致识别结果偏差的几率。传统把文字都识别出来,专业名词,或者识别不准,出来的结果并不是很好。但是使用大模型,可以根据上下文来分析,这样就可以降低语音识别错误带来的影响。
我们通过分析节点做了什么事情来描述这个流程,前面的开始节点和鉴权节点就不赘述了。
1. 创建工作流
1.1. 人声分割节点和处理节点
正常这边如果通话语音是双声道的,也不用做人声分割,更多是为了一些单声道的通话语音。
人声分割,我们主要看下输出结果:
- download url prefix:这个是用于下载语音文件的接口前缀。
- merge_file_key:这个是分割后的语音文件key,用来传给语音识别用的,后面会说明为什么要用这个语音。
其实主要是用这两个参数,人声分割接口会把分割后的数据合并在一条语音里面,用 2 个声道。因为要传给语音识别,肯定不会是在工作流里面下载,或者读取语音文件,因此需要拼接 url 给语音识别获取。获取的规则,就是 download_url_prefix 拼上 merge_file_key。
在处理人声分割结果节点,处理好后,传给语音识别节点。
1.2. 语音识别节点以及处理节点
语音识别顾名思义,把语音内容转成文字。我们在人声分割节点,已经分割好了数据,这时候传给语音识别节点的就是一条 2 个声道的语音。那为什么用这个接口呢,因为这个语音转文本接口可以独立返回声道的识别结果。语音转文本,让我们看下输出就知道了:
- result_str:原本有个result,这个是一个二维数组,对应传入语音的声道下标。估计是因为 coze 不支持二维数组,所以直接把 result 序列话之后用 result_str 返回回来。这个接口返回的不只是文字,也会分句,分句的开始时间和结束时间。这样子,可以给大模型一个时间维度上的判断。分开声道的返回方式,也可以在拼成一个对话文本的时候,有了明确的顺序。而不是 2 段单纯的文字丢给大模型。
不可能直接把 result_str 的结果直接传给大模型分析,这样既浪费 token,也很冗余。所以再用代码节点,把语音识别的结果,按照分句开始时间顺序,拼接成一个对话文本。因为我的场景,默认是客服和客户,所以拼接上了角色。具体的拼接结果,可以看处理语音识别后的结果
节点的最终输出的样式。
除了把分句按照时间顺序拼接成一个对话文本,也会用数组的方式返回,这样可以给调用者看到说话的内容,也就是 call_record_array。
1.3. 大模型节点
大模型我这边用是 Kimi,其实我们之前用的 deepseek 效果也是不错的。
把处理语音识别后的结果
节点的 call_record_array
赋值给大模型的参数 asrResult
,这样在写 prompt 的时候就可以引用(我不会告诉你我之前天真的以为,它会自己加进去)。提示词其实挺简单,告诉大模型干嘛,然后通话记录在 【】里面,这样大模型就会去分析,结果见 1.4 。
coze 的大模型里面的批处理挺实用的,有时候需要多条处理的时候,很方便(但是小心调用次数)
1.4. 结果节点
大模型的结果通过 agent_result
输出出来,大模型就会整理出来客户问题,总结客服的回答,客服的处理结果。
除了返回大模型分析结果,也会返回刚才分割出来的语音,以及语音转文本的结果。返回这些结果,会给下一篇创建 bot 的时候,更加丰富。
总结
这个工作流,把开放平台接口以及大模型整合起来,构建了一个大模型的工作流。比较简单,但是思路是这么个思路。在上一篇以及这一篇,我们创建了 2 个工作流,工作流直接给客户用肯定是不现实,因此需要一个机器人,一个简单的界面也好,或者可视化界面。这样,才可以让工作流能用起来(API 也是可以的)。因此,下一篇讲描述一下 Bot 里面添加这两个工作流的实现,Coze使用开放平台接口-【4】创建机器人。