STT标准接口

实时工作流支持您使用标准协议来接入您自研的语音转文字(STT)模型。

自研STT标准接口

交互流程图

image

实现流程

您需要实现一个公网可访问并且支持WebSocket传输协议的语音转文字(STT)模型服务,并且按照我们定义的输入输出规范,即可将您的自研的STT模型添加到工作流中。

说明

如需接入自研语音转文字模型,请提交工单申请加白操作。

  1. 首先您需要在编排管理控制台中的STT 语音转文字节点中,配置以下参数:

    image

    名称

    类型

    必填

    描述

    示例值

    目标模型WebSocket地址

    String

    自研模型接口地址

    wss://example.com/asr/ws

    ApiKey

    String

    API鉴权信息

    AUJH-pf**************HBLKrI

    自定义参数

    String

    自定义参数列表

    key_a=value_a

  2. 配置完成后,阿里云将会按照以下规则与您的服务完成建链:

    假设您的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"     
        }
    }
  3. 建链完成后,阿里云将音频PCM数据按以下规格传入您的模型:

    支持格式

    数据格式

    声道数

    采样率

    接口协议

    PCM

    S16LE

    单声道

    16K

    wss

  4. 在您的自研模型完成语音识别后,您需要将数据按照以下规格转为JSON文本的形式返回阿里云:

    参数名

    参数类型

    是否必选

    说明

    session_id

    String

    本次asr链接标识,与建链请求保持一致.

    name

    String

    消息名称:

    • start:websocket建链成功后的通知消息

    • result:语音识别结果消息

    • error:服务器异常的通知消息

    code

    Int

    返回码:

    • 0: 成功

    • 其他:失败

    message

    String

    返回信息,失败时在此字段描述失败原因

    result_type

    Int

    nameresult时必选,您需要传入该值:

    • 0: 临时结果

    • 1: 最终结果

    payload

    Object

    nameresult时必选,payload中的字段都需要填写为实际值。

    • result

    String

    当前识别到的所有结果。

    • begin_time

    Int

    识别结果的语音起始时刻,相对于建链后收到首个音频包时刻的偏移量,单位ms。

    • end_time

    Int

    识别结果的语音结束时刻,相对于建链后收到首个音频包时刻的偏移量,单位ms。

  5. 结束传输,发送表示结束的binary message。

    ws.send(bytes("{\"stop_session\": true}", encoding='utf-8'))

Token计算方式

  1. session_id进行MD5。

  2. api_keyMD5后的session_id进行HmacSHA1加密。

  3. 加密后的数据base64编码。

  4. 最后进行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