AIUI文档中心
AIUI文档导览
1. AIUI平台服务
1.1 AIUI平台介绍
1.2 AIUI应用介绍
1.3 AIUI服务链路介绍
1.4 AIUI平台能力概述
1.5 快速体验
2. AIUI应用配置
2.1 应用发布
2.2 语义精简协议介绍
2.3 基础配置
2.4 语义模型配置
2.5 回复角色配置
2.6 语音识别配置
2.7 结构化语义配置
2.8 星火大模型配置
2.9 语音合成配置
2.10 应用后处理配置
2.11 三方大模型配置
3. AIUI SDK开发
3.1 AIUI SDK接入流程
3.2 AIUI SDK基础信息
3.2.1 SDK接口说明
3.2.2 参数配置说明
3.2.3 消息事件说明
3.2.4 SDK状态说明
3.2.5 数据发送方式
3.2.6 回调解析说明
3.2.7 交互结果协议说明
3.3 AIUI SDK基础能力
3.3.1 流式识别
3.3.2 离线识别
3.3.3 语音唤醒
3.3.4 语音合成
3.3.5 用户个性化
3.3.6 自定义参数
3.4 传统语义链路接入
3.4.1 链路配置说明
3.4.2 个性化数据使用
3.5 通用大模型链路接入
3.5.1 链路配置说明
3.5.2 个性化数据使用
3.5.3 超拟人合成
3.5.4 声音复刻
3.6 极速超拟人链路接入
3.6.1 链路配置说明
3.6.2 个性化数据使用
3.6.3 流式合成
3.6.4 声音复刻
3.6.5 RTOS系统SDK接入
3.7 错误码列表
3.8 发音人列表
4. AIUI API开发
4.1 传统语义链路
4.1.1 交互API
4.1.2 用户个性化API
4.1.3 合成能力使用
4.2 通用大模型链路
4.2.1. 服务鉴权
4.2.2 交互API
4.2.3 用户个性化API
4.2.4 声音复刻API
4.2.5 合成能力使用
4.3 极速超拟人链路
4.3.1 服务鉴权
4.3.2 交互API
4.3.3 用户个性化API
4.3.4 声音复刻API
4.3.5 合成能力使用
5. 自定义业务
技能工作室概述
名词解析
技能
意图和语料
实体
动态实体
模糊匹配
填槽对话
技能设计规范
语音技能设计规范
开放技能接入审核规范
开放技能图标图片规范
技能开发
创建技能和意图
意图配置
技能测试
技能发布
技能后处理
技能导入导出
云函数APIv2.1
云函数APIv2.0
智能体开发
智能体对接
问答库开发
语句问答
关键词问答
文档问答
设备人设开发
技能协议
语义协议:重要字段和通用字段
技能后处理协议:标准请求
技能后处理协议:请求校验
技能后处理协议:Request_v2.1协议
技能后处理协议:Response_v2.1协议
技能资源限制
6. 硬件模组
RK3328 降噪板
RK3328降噪板白皮书
RK3328降噪板使用手册
RK3328降噪板规格书
RK3328降噪板协议手册
RK3328 AIUI评估板开发套件
RK3328评估板白皮书
RK3328评估板使用手册
RK3328评估板规格书
RK3328评估板开发手册
RK3588 AIUI多模态开发套件
RK3588一体机多模态产品规格书
RK3588多模态套件使用手册
视频传输协议
识别语义传输协议
音频传输协议
ZG803 离线语音识别套件
ZG803 产品白皮书
USB声卡套件
USB声卡产品白皮书
USB声卡使用指南
AC7911B AIUI语音开发套件
AC7911B-产品白皮书
AC7911B-快速体验指南
AIUI评估板接入
集成方式
软件包说明
AIUIServiceKitSDK
串口SDK
评估板参数配置
调试升级
7. 常见问题处理
7.1 AIUI常见问题
7.2 评估板常见问题
7.3 动态实体常见问题
8. 联系方式
9. 服务条款
AIUI开放平台服务协议
AIUI开放平台隐私政策
小飞在家用户协议
小飞在家隐私政策
小飞在家开源软件使用许可
讯飞账号隐私政策
讯飞账号用户协议
讯飞带屏音箱用户协议
讯飞带屏音箱隐私政策
AIUI SDK隐私政策
AIUI SDK合规使用说明
本文档使用 MrDoc 发布
-
+
首页
2.10 应用后处理配置
<div style="max-width: 100%; margin: 20px auto;"> <!-- 便签卡片容器 --> <div style="background-color: #ffffff; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); overflow: hidden; font-family: 'Comic Sans MS', cursive, sans-serif;"> <!-- 便签头部 --> <div style="background-color: #F4F8FA; padding: 1px 10px; border-bottom: 1px solid #dee2e6; display: flex; justify-content: space-between; align-items: center;"> <div style="color: #0E42D2; font-weight: bold;font-size: 1.3rem;">应用后处理配置概述</div> <div> </div> </div> <!-- 带横线的内容区域 --> <div style="padding: 25px; line-height: 27px; background-image: linear-gradient(transparent 26px, #dee2e6 27px, #dee2e6 27px, transparent 27px); background-size: 100% 28px; min-height: 100px; color: #333;"> <div>该配置项,是AIUI服务链路提供开发者做云端结果接受处理的服务通道,不区分AIUI应用类型,配置方式都是一样的。其中包括:</div> <div style="margin-left: 20px; margin-top: 5px;font-size: 0.95rem;"><strong>-配置说明:</strong></div> <div style="margin-left: 40px; margin-top: 5px;"> <a href="#后处理链接" style="color: #6f42c1; font-weight: 500;"> <strong>- 1、后处理链接>>>点击跳转</strong></a> </div> <div style="margin-left: 40px;"> <a href="#重试次数和超时时间" style="color: #6f42c1; font-weight: 500;"> <strong>- 2、重试次数和超时时间>>>点击跳转</strong></a> </div> <div style="margin-left: 20px; margin-top: 5px;font-size: 0.95rem;"><strong>-协议说明:</strong></div> <div style="margin-left: 40px;"> <a href="#服务器验证-GET" style="color: #6f42c1; font-weight: 500;"> <strong>- 1、服务器验证-GET>>>点击跳转</strong></a> </div> <div style="margin-left: 40px;"> <a href="#接收消息-POST" style="color: #6f42c1; font-weight: 500;"> <strong>- 2、接收消息-POST>>>点击跳转</strong></a> </div> <div style="margin-left: 40px;"> <a href="#接入指引" style="color: #6f42c1; font-weight: 500;"> <strong>- 3、接入指引>>>点击跳转</strong></a> </div> <div></div> </div> <!-- 便签底部 --> </div> </div> </div> ## 1. 配置说明 应用后处理提供能力开关项,操作能力配置时,AIUI平台会主动发起一次GET校验请求。 内容配置主要分4大块 - 云服务和备用地址填写 - 超时或出错尝试次数 - 服务请求超时时间限制 - 消息是否加密开关  <div id="后处理链接"> </div> ### 1.1. 后处理链接 这里配置开发者自己的云服务地址,开发者可通过该地址在对话交互中接受服务转发结果,关于服务地址基础要求有: - 支持公网访问 - 推荐域名方式配置 - 服务支持POST和GET请求【详见第2节协议配置说明】 <div id="重试次数和超时时间"> </div> ### 1.2. 重试次数和超时时间 交互链路中AIUI做服务转发,可以配置异常重试次数。重试次数和超时时间之间有信息关联。 请求超时最大时长是依赖尝试次数来决定的,即 **最大时长 * 尝试次数 ≤ 9000ms** ## 2. 协议说明 AIUI 后处理能够根据识别、语义结果,提供个性化的服务。 <div id="服务器验证-GET"> </div> ### 2.1. 服务器验证-GET 1. 提交信息后,AIUI发送GET请求到开发者服务器URL,请求参数如下: <table border="0" class="docutils" style="width: 100%;"> <colgroup> <col width="15%" /> <col width="50%" /> </colgroup> <tbody valign="top"> <tr class="row-odd"> <td><b>参数</b></td> <td><b>描述</b></td> </tr> <tr class="row-even"> <td>signature</td> <td>加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、rand参数。</td> </tr> <tr class="row-even"> <td>timestamp</td> <td>时间戳</td> </tr> <tr class="row-even"> <td>rand</td> <td>随机数</td> </tr> </tbody> </table> 2. 开发者校验signature(下面有校验方式),返回开放平台中token值的sha1加密内容,则接入成功。 <div style="display: flex; gap: 5px; max-width: 100%; margin: 5px auto; flex-wrap: wrap;"> <!-- 左侧卡片 --> <div style="flex: 1; min-width: 300px; padding: 15px 15px 0px; background-color: #; border-radius: 8px; box-shadow: inset 0 1px 2px rgba(0,0,0,0.15), 0 1px 1px rgba(255,255,255,0.1);"> <p style="color: #666; line-height: 2;font-size: 1rem;"><strong>👤加密/校验流程</strong> <br>- 将token、timestamp、rand三个参数值进行字典序排序 <br>- 将三个参数字符串拼接成一个字符串进行sha1加密 <br>- 开发者获得加密后的字符串可与signature对比,标识该请求来源于AIUI服务 </div> <!-- 右侧卡片 --> <div style="flex: 1; min-width: 300px; padding: 15px 15px 0px; background-color: #; border-radius: 8px; box-shadow: inset 0 1px 2px rgba(0,0,0,0.15), 0 1px 1px rgba(255,255,255,0.1);"> <p style="color: #666; line-height: 1.6;font-size: 1rem;"><strong>🔍响应消息:</strong> </p> <p style="color: #666; line-height: 2;font-size: 1rem;">- 将token进行sha1加密,放在响应的body中返回</p></div> </div> <div style="display: flex; align-items: center; background-color: #fff3cd; border-left: 6px solid #ffc107; border-radius: 4px; padding: 12px 16px; gap: 8px;"> <div style="width: 30px; height: 30px; flex-shrink: 0;"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/> </svg> </div> <div style="flex: 1; line-height: 1.6;"> <h3 style="margin: 0 0 6px 0; font-weight: 600;">注意:</h3> <p style="margin: 0; font-size: 0.95rem;">校验流程是可选操作,但消息返回必须正确才能校验成功</p> </div> </div> 示例: ``` java Map<String, String[]> parameterMap = request.getParameterMap(); String rand = parameterMap.get("rand")[0]; String timestamp = parameterMap.get("timestamp")[0]; String signature = parameterMap.get("signature")[0]; // 字典序排序 ArrayList<String> signList = new ArrayList<>(); signList.add(aiuiToken); signList.add(rand); signList.add(timestamp); Collections.sort(signList); // 校验 String sign = StringUtils .strip(signList.toString(), "[]") .replace(" ", "") .replace(",", ""); if (StringUtils.compare(signature, DigestUtils.sha1Hex(sign)) != 0) { return "authentication failed"; } else { return DigestUtils.sha1Hex(aiuiToken); } ``` <div id="接收消息-POST"> </div> ### 2.2. 接收消息-POST AIUI正常完成服务后,把结果POST到开发者的URL上。 注意: 1. **消息重试**:每条消息最长超时时间为3秒,3秒后将会断开连接并重试1次,如果2次均无响应将返回超时消息。 2. **消息排重**:每条消息有一个id,请根据消息主体中的MsgId和CreateTime两者结合进行排重。(MsgId为字符串,CreateTime为整数) 3. **消息响应**:AIUI透传开发者数据到设备。 4. **消息签名**:用于检验AIUI消息的完整性,不用于校验开发者服务响应消息。签名是由token+timestamp+rand+postbody 进行字典排序,然后sha1生成的。 url中的`msgsignature`参数存储了签名信息。timestamp和rand参数也在url里。 <table border="0" class="docutils" style="width: 100%;"> <colgroup> <col width="15%" /> <col width="15%" /> </colgroup> <tbody valign="top"> <tr class="row-odd"> <td><b>参数</b></td> <td><b>描述</b></td> </tr> <tr class="row-even"> <td>token</td> <td>开发者设定的唯一标识</td> </tr> <tr class="row-even"> <td>timestamp</td> <td>时间戳</td> </tr> <tr class="row-even"> <td>srand</td> <td>固定字节随机串</td> </tr> <tr class="row-even"> <td>postbody</td> <td>post接收到的body信息</td> </tr> </tbody> </table> 5. **消息加密**:开启加密后,会生成一个AES KEY,此时数据是加密的,且请求url中的`encrypttype`参数值为`aes`(未加密为`raw`)。解析消息前要解密。同时开发者服务器的响应也要用AES KEY加密。AIUI返给客户端的数据是解密的。 6. **消息格式**: HTTP消息格式定义: ``` java POST /yourserveruri?xx=xx HTTP 1.1 Connection: close Host:xxx.xxx.xxx Content-Type: application/json Content-Length: 111 {消息主体} ``` <div style="display: flex; align-items: center; background-color: #fff3cd; border-left: 6px solid #ffc107; border-radius: 4px; padding: 12px 16px; gap: 8px;"> <div style="width: 30px; height: 30px; flex-shrink: 0;"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/> </svg> </div> <div style="flex: 1; line-height: 1.6;"> <h3 style="margin: 0 0 6px 0; font-weight: 600;">注意:</h3> <p style="margin: 0; font-size: 0.95rem;">可以根据Content-Type的类型来解析相应的消息主体。例如:当POST请求的Content-Type为application/json时,要根据Json格式解析消息主体。</p> </div> </div> - 消息主体格式 ``` json { "MsgId":"1234567", "CreateTime":1348831860, "AppId":"12345678", "UserId":"d123455", "SessionParams":"Y21kPXNzYixzdWI9aWF0LHBsYXRmb3JtPWFuZG9yaWQ=", "UserParams":"PG5hbWU+eGlhb2JpYW5iaWFuPC9uYW1lPg==", "FromSub":"iat", "Msg":{}, } ``` - 格式说明 <table border="0" class="docutils" style="width: 100%;"> <colgroup> <col width="15%" /> <col width="50%" /> </colgroup> <tbody valign="top"> <tr class="row-odd"> <td><b>参数</b></td> <td><b>描述</b></td> </tr> <tr class="row-even"> <td>MsgId</td> <td>消息id,字符串类型</td> </tr> <tr class="row-even"> <td>CreateTime</td> <td>消息创建时间,整型</td> </tr> <tr class="row-even"> <td>AppId</td> <td>开发者应用Id,字符串类型</td> </tr> <tr class="row-even"> <td>UserId</td> <td>AIUI唯一用户标注,字符串类型</td> </tr> <tr class="row-even"> <td>UserParams</td> <td>开发者自定义参数,通过客户端的userparams参数上传,Base64格式字符串</td> </tr> <tr class="row-even"> <td>FromSub</td> <td>上游业务类型,目前包括两种(iat:听写结果,kc:语义结果),字符串类型</td> </tr> <tr class="row-even"> <td>Msg</td> <td>消息内容,json object参考Msg消息内容格式</td> </tr> <tr class="row-even"> <td>SessionParams</td> <td>本次会话交互参数,Base64格式字符串,解码后为json格式</td> </tr> </tbody> </table> - Msg消息内容格式 ```json 文本内容 { "Type":"text", "ContentType":"Json", "Content":"eyJzbiI6MiwibHMiOnRydWUsImJnIjowLCJlZCI6MCwid3MiOlt7ImJnIjowLCJjdyI6W3sic2MiOjAsInciOiLvvJ8ifV19XX0=" } ``` <table border="0" class="docutils" style="width: 100%;"> <colgroup> <col width="15%" /> <col width="15%" /> </colgroup> <tbody valign="top"> <tr class="row-odd"> <td><b>参数</b></td> <td><b>描述</b></td> </tr> <tr class="row-even"> <td>Type</td> <td>text</td> </tr> <tr class="row-even"> <td>ContentType</td> <td>内容格式<br />Json:JSON格式<br />plain:无格式文本<br />xml:XML格式</td> </tr> <tr class="row-even"> <td>Content</td> <td>Base64内容字符串</td> </tr> </tbody> </table> <div id="接入指引"> </div> ### 2.3. 接入指引 #### 2.3.1. 消息校验使用方法 - 消息响应的url参数中有四个字符串类型参数,用于校验完整性 <table border="0" class="docutils" style="width: 100%;"> <colgroup> <col width="15%" /> <col width="15%" /> <col width="15%" /> </colgroup> <tbody valign="top"> <tr class="row-odd"> <td><b>参数</b></td> <td><b>描述</b></td> <td><b>来源</b></td> </tr> <tr class="row-even"> <td>msgsignature</td> <td>签名信息</td> <td>存储消息的签名</td> </tr> <tr class="row-even"> <td>timestamp</td> <td>时间戳</td> <td>由平台生成</td> </tr> <tr class="row-even"> <td>rand</td> <td>随机字符串</td> <td>平台随机生成的随机串</td> </tr> <tr class="row-even"> <td>encrypttype</td> <td>加密类型</td> <td>由页面配置决定(目前支持raw和aes)</td> </tr> </tbody> </table> - 校验过程(伪代码) ```c int message_sigcheck(token ,msgsignature ,timestamp ,srand ,data) { //对参数进行字典排序 vector<std::string> s(4); for (){ // 将参数token,timestamp,srand,data放入字典} //字典排序 sort(s.begin(), s.end()); //链接字符 std::string str; for (){ // 将四个s里的值按顺序链接到str里} //对str进行sha1 std::string signature = Sha1(str.c_str()); //校验签名字符串 0为一致,-1为不一致 return signature.compare(msgsignature)?-1:0; } ``` <div style="display: flex; align-items: center; background-color: #fff3cd; border-left: 6px solid #ffc107; border-radius: 4px; padding: 12px 16px; gap: 8px;"> <div style="width: 30px; height: 30px; flex-shrink: 0;"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"/> </svg> </div> <div style="flex: 1; line-height: 1.6;"> <h3 style="margin: 0 0 6px 0; font-weight: 600;">注意:</h3> <p style="margin: 0; font-size: 0.95rem;">为了消息的安全,建议校验。</p> </div> </div> #### 2.3.2. 消息加解密说明  勾选加密后,发给开发者服务器的body是加密的。需要用AES秘钥解密。 1. 加密采用AES的CBC加密方式,秘钥为16字节(128bit),初始化向量IV复用秘钥AESKEY,填充方式为PKCS7Padding。 2. 返回的消息要以同样的方式加密。 <IflyHeader />
admin
2025年9月12日 15:57
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码