实时工作流支持您使用标准协议来接入您自研的语音转文字(STT)模型。
自研STT标准接口
交互流程图
实现流程
您需要实现一个公网可访问并且支持WebSocket传输协议的语音转文字(STT)模型服务,并且按照我们定义的输入输出规范,即可将您的自研的STT模型添加到工作流中。
如需接入自研语音转文字模型,请提交工单申请加白操作。
首先您需要在编排管理控制台中的STT 语音转文字节点中,配置以下参数:
名称
类型
必填
描述
示例值
目标模型WebSocket地址
String
是
自研模型接口地址
wss://example.com/asr/ws
ApiKey
String
是
API鉴权信息
AUJH-pf**************HBLKrI
自定义参数
String
否
自定义参数列表
key_a=value_a
配置完成后,阿里云将会按照以下规则与您的服务完成建链:
假设您的wss地址为wss://example.com/asr/ws,我们会以
wss://example.com/asr/ws?{请求参数}
发送请求,请求参数如下:参数名
参数类型
是否必选
说明
session_id
string
是
本次语音识别链接标识。
token
string
是
将session_id经过一定运算后得到的签名字符串,详细内容,请参见Token计算方式。
language
string
否
语种类型,默认中英文。
请求示例如下:
未配置自定义参数
wss://example.com/asr/ws?session_id=992204bfdca241e78dca2872625cf99f&token=muebPMT%2BnLe*********UJY4%3D&language=cn
配置自定义参数
如果您在控制台上设置了自定义参数:key_a=value_a 和 key_b=value_b,则最终的URL为:
wss://example.com/asr/ws?session_id=992204bfdca241e78dca2872625cf99f&token=muebPMT%2BnLeTr**********4%3D&language=cn&key_a=value_a&key_b=value_b
您也可以在调用启动实例的接口时,设置自定义参数,这将覆盖您在工作流中的配置。您需要在启动实例的
AIAgentConfig.AsrConfig.CustomParams
来指定STT节点自定义参数,这些参数会放在URL参数中。{ "AsrConfig": { "CustomParams": "key1=value1&key2=value2&key3=value3" } }
建链完成后,阿里云将音频PCM数据按以下规格传入您的模型:
支持格式
数据格式
声道数
采样率
接口协议
PCM
S16LE
单声道
16K
wss
在您的自研模型完成语音识别后,您需要将数据按照以下规格转为JSON文本的形式返回阿里云:
参数名
参数类型
是否必选
说明
session_id
String
是
本次asr链接标识,与建链请求保持一致.
name
String
是
消息名称:
start:websocket建链成功后的通知消息
result:语音识别结果消息
error:服务器异常的通知消息
code
Int
是
返回码:
0: 成功
其他:失败
message
String
是
返回信息,失败时在此字段描述失败原因
result_type
Int
否
当name为result时必选,您需要传入该值:
0: 临时结果
1: 最终结果
payload
Object
否
name为result时必选,payload中的字段都需要填写为实际值。
result
String
是
当前识别到的所有结果。
begin_time
Int
是
识别结果的语音起始时刻,相对于建链后收到首个音频包时刻的偏移量,单位ms。
end_time
Int
是
识别结果的语音结束时刻,相对于建链后收到首个音频包时刻的偏移量,单位ms。
结束传输,发送表示结束的binary message。
ws.send(bytes("{\"stop_session\": true}", encoding='utf-8'))
Token计算方式
对
session_id
进行MD5。用api_key对MD5后的
session_id
进行HmacSHA1加密。加密后的数据base64编码。
最后进行url编码。
代码示例
import hashlib
import hmac
import base64
from urllib.parse import quote
def calc_token():
api_key = '12345678'
session_id = '992204bfdca241e78dca2872625cf99f'
sessionId = session_id.encode('utf-8')
md5 = hashlib.md5()
md5.update(sessionId)
baseString = md5.hexdigest()
baseString = bytes(baseString, encoding='utf-8')
# step 1: 对session_id进行MD5,参考结果 f481faf07ec18481bc275a3ef3d61ea0
apiKey = api_key.encode('utf-8')
token = hmac.new(apiKey, baseString, hashlib.sha1).digest()
# step 2: 用api_key对MD5后的session_id进行HmacSHA1加密,参考结果 b'\x9a\xe7\x9b<\xc4\xfe\x9c\xb7\x93\xae\xbaY\xc3\x91|!\x8b\x14%\x8e'
token = base64.b64encode(token)
# step 3: 加密后的数据base64编码,参考结果 muebPMT+nLeTrrpZw5F8IYsUJY4=
token = str(token, 'utf-8')
token = quote(token)
# step 4: 进行url编码,参考结果 muebPMT%2BnLeTrrpZw5F8IYsUJY4%3D
return token