| 密级 | 公开 |
|---|---|
| 版本 | 10D.2 |
AICP 10 通用规范
1. 概述#
本文档描述 AICP-10 HTTP/WebSocket 接口的一些通用规范。
2. 语言编码#
在 AICP-10 平台的接口使用过程中,经常需要指明所涉及的语言种类。为了规范语种信息的表示,我们使用国际标准 ISO 639 及其衍生标准对语言进行编码。
但要注意的是:在标准中,中文的语言代码为 zh。CN 仅表示区域代码。为保证和之前全智能能力服务平台的一致性,在 AICP 中,我们还是沿用 cn表示中文的语言代码。但其它语言代码会符合 ISO 639-1 (2字母) 或者 ISO 639-2 / ISO 639-3 (3字母) 的标准。
在 AICP-10 中,常见语种的编码如下:
| 语言 | 编码 | 语言 | 编码 |
|---|---|---|---|
| 中文、汉语 | cn | 英语 | en |
| 维吾尔语 | ug | 法语 | fr |
| 藏语 | bo | 德语 | de |
| 彝语 | ii | 俄语 | ru |
| 哈萨克语 | kk | 西班牙语 | es |
| 蒙语 | mn | 葡萄牙语 | pt |
| 壮语 | za | 意大利语 | it |
| 粤语 | yue | 阿拉伯语 | ar |
| 闽南语 | nan | 波斯语 | fa |
| 吴语 | wuu | 日语 | ja |
| 客家话 | hak | 朝鲜语、韩语 | ko |
对于一些方言,或者在标准中没有定义,或者其定义不一定适合,因此在 AICP-10 中,会自定义一些语种编码,自定义的语种编码都会带 x- 前缀。例如:
| 语言 | 编码 |
|---|---|
| 四川话 | x-sichuan |
3. 模型特征串#
在 AICP-10 平台提供的能力接口 URL 中,通常都会包含模型特征串(简写为 property),用于标识在处理过程中不同的模型。网关服务会根据 URL 中的模型特征串,将请求转发到相应的支持此种模型的后端服务,后端服务也会使用正确的模型进行处理。
例如,在 ASR 接口中,模型特征串形式为:{lang}_{samplerate}_{domain}。{lang}表示语言编码,
{samplarate} 可以是 8K 或者16K,表示识别模型的训练时所用的采样率,{domain}表示领域编码。则 cn_16k_common 就表示中文16K的通用领域模型。
每一种 AI 能力都有不同的模型特征串的形式,具体请参考不同能力的开发手册。
4. 开发者账号#
针对每个开发者,有一个开发者账号。每个开发者账号下,可以有多个应用,不同的应用以 appkey 区分。每个 appkey 都有一个对应的秘钥 secret,用于获取认证用的访问令牌。
目前在私有云环境下,只有一个开发者账号和一个 appkey,缺省的 appkey 和 secret 已经预置:
| appkey | secret |
|---|---|
aicp_app | QWxhZGRpbjpvcGVuIHNlc2FtZQ |
部署时可以更改 appkey 和 secret 配置,但需要注意在访问时也需要使用新的配置。
5. 能力URL#
AICP-10 平台提供的能力接口 URL 通常为下述方式:
http(s)://ip:port/v10/asr/freetalk/{property}/short_audio?appkey={appkey}
asr一节表示使用的 AI 能力freetalk一节表示子能力,例如语音识别包括freetalk(自由说),grammar(语法识别),trans(离线转写)等。property一节即前面描述的“模型特征串”short_audio是指具体功能,通常服务于一个特定的目的或场景。
WebSocket 接口基本类似,但多一个可选的 access-token 参数。
ws(s)://ip:port/v10/asr/freetalk/{property}/short_stream?appkey={appkey}[&access-token={token}]
6. 访问认证#
访问 AICP-10 平台提供的能力接口,都需要要客户端事先已通过云端的认证接口(get-access-token),给出分配好的 appkey 和 secret 参数,获取对应的访问令牌(access token)。
然后在访问能力URL时,客户端需要在 URL 中给出 appkey 参数,并设置 X-Hci-Access-Token HTTP 头,将获取的令牌传入。
在 HTML5 中,由于 Javascript 在创建 WebSocket 对象时,无法设置 HTTP 头域,此时可以通过 URL 中的 access-token 参数来传入。
访问令牌有过期时间,需要定期刷新。关于如何获取令牌和刷新令牌,请参阅 《系统服务 HTTP开发手册》。
7. 接口响应#
7.1 HTTP 接口响应#
AICP-10 平台中,HTTP 接口的响应通常遵循标准的 HTTP 状态码(HTTP Response Code)规范。
当接口调用成功时,HTTP 状态码为200 OK (也有可能是其它 2xx,比如 201 Created, 202 Accepted等)。此时包体里一般没有 error 字段。
当接口调用失败时,一般返回 4xx 或者 5xx 的状态码,同时响应消息体中一般是 JSON 格式的内容,并包含 error 字段,其下又包括具体的错误码 code 和错误信息 message。
在错误时,HTTP 状态码和 error 字段中的 code(错误码)也有一定的对应关系,具体参见下表。
| HTTP 状态码 | 错误码 | 说明 | 解决方案 |
|---|---|---|---|
| 400 Bad Request | 3 INVALID_ARGUMENT | 请求参数异常 | 检查请求参数字段,修改正确后重试 |
| 400 Bad Request | 11 OUT_OF_RANGE | 请求参数超出范围 | 检查请求参数字段,修改正确后重试 |
| 401 Unauthorized | 16 UNAUTHENTICATED | 认证失败,没有给出令牌或令牌无效、过期 | 检查认证参数,修改正确后重试 |
| 403 Forbidden | 7 PERMISSION_DENIED | 无访问权限,就算通过身份验证也禁止访问。例如访问有白名单机制 | 检查请求的资源是否有访问权限,或联系厂商 |
| 404 Not Found | 5 NOT_FOUND | 未找到访问资源, 例如URL错误 | 检查发送的URL等是否正确,修改正确后重试 |
| 409 Conflict | 9 FAILED_PRECONDITION | 某些预置条件不满足, 例如被删除的某个资源还在被使用。 | 用户先解决冲突问题,然后进行重试 |
| 429 Too Many Requests | 8 RESOURCE_EXHAUSTED | 某种资源耗尽,或者由于限流原因拒绝服务 | 检查是否超过了并发连接数或者限流上限 |
| 501 Not Implemented | 12 UNIMPLEMENTED | 合理的请求,但当前尚未支持 | 当前并不支持,不应该重试 |
| 500 Internal Server Error | 13 INTERNAL | 内部服务异常,主要是一些内部逻辑错误等 | 过一段时间重试, 如果偶现可以忽略,否则请联系厂商 |
| 503 Service Unavailable | 14 UNAVAILABLE | 无法找到支持的服务, 用户可以过一段时间重试 | 过一段时间重试, 如果偶现可以忽略,否则请联系厂商 |
下面一些错误当前的HTTP接口访问时可能不会发生,暂时列在这里:
| HTTP状态码 | 错误码 | 说明 |
|---|---|---|
| 409 Conflict | 6 ALREADY_EXISTS | 客户端试图创建的资源已存在 |
| 499 Client Closed Request | 1 CANCELLED | 操作被用户取消 |
| 409 Conflict | 10 ABORTED | 操作中止,通常由于事务中断等 |
| 500 Internal Server Error | 2 UNKNOWN | 未知内部错误 |
| 500 Internal Server Error | 15 DATA_LOSS | 不可恢复的数据丢失或损坏 |
| 504 Gateway Timeout | 4 DEADLINE_EXCEEDED | 访问超时 |
7.2 WebSocket 接口响应#
WebSocket 接口的调用分为握手阶段和连接阶段两个部分。
7.2.1 握手阶段#
在握手阶段,实际上还是以 HTTP 形式发送握手信息,因此其响应也遵循标准的 HTTP 状态码规范。
当握手接口调用成功时,HTTP 状态码为 101 Switching Protocols,包体中无内容。
当握手失败时,HTTP 状态码为其它值,其消息体中一般都会包含错误码 errCode 和错误信息 errMessage,表示具体的错误。
HTTP状态码和错误码可能如下:
| HTTP 状态码 | 错误码 | 说明 | 解决方案 |
|---|---|---|---|
| 401 Unauthorized | 16 UNAUTHENTICATED | 认证失败,不是合法用户 | 检查认证参数,修改正确后重试 |
| 403 Forbidden | 7 PERMISSION_DENIED | 无访问权限,就算通过身份验证也禁止访问。例如访问有白名单机制 | 检查请求的资源是否有访问权限,或联系厂商 |
| 404 Not Found | 5 NOT_FOUND | 未找到访问资源, 例如URL错误 | 检查发送的URL等是否正确,修改正确后重试 |
7.2.2 连接阶段#
在连接建立之后发生错误时,是通过响应的内容来返回的。除了正常的响应外,一般都会定义 错误响应 或者 严重错误响应。
- 错误响应,一般是业务上的错误,通常会关闭当前会话,但不关闭连接。
- 严重错误响应,是指流程无法继续的情况,一般此时服务器端会主动断连。
在错误响应或严重错误响应时,其消息体中一般都会包含错误码 errCode 和错误信息 errMessage,表示具体的错误。
此时可能的错误码如下:
| 错误码 | 说明 | 解决方案 |
|---|---|---|
| 3 INVALID_ARGUMENT | 请求参数异常 | 检查请求参数字段,修改正确后重试 |
| 11 OUT_OF_RANGE | 请求参数超出范围 | 检查请求参数字段,修改正确后重试 |
| 8 RESOURCE_EXHAUSTED | 某种资源耗尽,或者由于限流原因拒绝服务 | 检查是否超过了并发连接数或者限流上限 |
| 14 UNAVAILABLE | 无法找到支持的服务, 用户可以过一段时间重试 | 过一段时间重试, 如果偶现可以忽略,否则请联系厂商 |
| 10 ABORTED | 出现严重错误,操作由服务器端中止 | 重新连接并访问 |