SDK接入


1. 版本说明

SDK版本 v1服务(结构化语义) v2服务(星火交互认知大模型)
5.x 支持 不支持
6.x 支持 支持

v1和v2服务的结果格式不同,5.x升级6.x SDK需要修改解析代码。若不想修改解析代码,则修改aiui.cfg参数。示例:

{
    //aiui_ver:云端服务版本,1(v1服务) 2(v2服务)
    "global": {
        "aiui_ver": "1"
    }
}

2. 集成方法

6.x版本接口跟旧版本一样,但是配置和结果格式不同。集成参考官方文档

2.1 大模型aiui.cfg配置

{
    /* 鉴权参数 */
    "login":{
        "appid": "",  // 同老配置
        "key": "",    // 同老配置
        "api_secret": "" // api密钥,在AIUI开放平台我的应用中查看。
    },

    /* 大模型参数 */
    "cbmparams": {
        "nlp": {                // 语义参数,一般不用改
            "nlp": {"encoding": "utf8","compress": "raw","format": "json"},
            "sub_scene": "cbm_v45"
        }
    }

    /* 其他参数同老配置 */
}

其他参数详见参数配置

2.2 大模型json结果

{
    "data": [{
        "params": {"sub": "xxx",},
        "content": [{"dte": "utf8","dtf": "json","cnt_id": "0"}]
    }]
}

cnt_id字段获取内容数据,Android示例:

private void processResult(AIUIEvent event) {
    JSONObject data = new JSONObject(event.info).getJSONArray("data").getJSONObject(0);
    String sub = data.getJSONObject("params").optString("sub");
    JSONObject content = data.getJSONArray("content").getJSONObject(0);
    
    if (content.has("cnt_id")) {
        String cnt_id = content.getString("cnt_id");

        // 获取结果数据
        byte[] contentData = event.data.getByteArray(cnt_id);

        // 按sub值的不同,采取不同的方法来处理结果数据
        if ("iat".equals(sub)) {
        } else if ("tts".equals(sub)) {
        } else if ("cbm_tidy".equals(sub))
        } else if ("cbm_semantic".equals(sub)) {
        } else if ("nlp".equals(sub)) {
        }
    }
}

sub字段说明:

sub 说明 结果内容格式
iat 语音识别结果 json字符串
tts 语音合成结果 pcm音频、或url
cbm_tidy 语义规整:进行关键信息提取和意图拆分,判断用户一次说了多少个意图 json字符串
cbm_semantic 结构化语义结果 json字符串
nlp 大模型语义结果 json字符串
{
    "cbm_tidy":{
        "seq":0,       // 结果序号
        "status":3,    // 数据状态
        "text":"{\"query\":\"今天天气?明天呢?\",\"intent\":[
                    {\"index\":0,\"value\":\"今天天气怎样\"},
                    {\"index\":1,\"value\":\"明天天气怎样\"}]}"
    }
}

参数说明:

参数名 说明
seq 结果序号,0,1,2…
status 数据状态
0(长句开始)
1(长句中间结果)
2(长句结束)
3(短句结束,只有一个结果)
text 结构化语义结果,参考语义协议
query:用户输入文本
answer:结构化语义回复
intent:拆分后意图,例如”今天天气,明天呢?”被拆分成了两个意图。
  • cbm_semantic示例:
    {
      "cbm_meta":{
          "seq":0,
          "status":3,
          "text":"{\"cbm_semantic\":{\"intent\":1}}"  // intent是意图序号,对应cbm_tidy中的intent序号
      },
      "cbm_semantic":{
          "seq":0,
          "status":3,
          "text":"{\"answer\":{\"text\":\"明天小雨转阴......"}"
      }
    }
    

nlp结果示例:

{
     "cbm_meta":{
        "seq":0,
        "status":0,
        "text":"{\"cbm_reply\":{\"intent\":1,\"nlp_origin\":\"cbm_semantic\"}}"
    },
    "nlp":{
        "seq":0,
        "status":0,
        "text":"今天天气晴..."  // 应答文本
    }
}

大模型结果分多次返回,完整结果要拼接text,示例:

"nlp":{"seq":0,"status":0,"text":"今天"}
"nlp":{"seq":1,"status":1,"text":"天气"}
"nlp":{"seq":2,"status":1,"text":"多云,有"}
...
"nlp":{"seq":9,"status":2,"text":"。"}

Android结果处理示例代码参考SimpleDemo中的NlpDemo.java文件。


admin 2024年12月12日 18:57 收藏文档