密级 | 公开 |
---|---|
版本 | 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. 能力URLAICP-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 | 出现严重错误,操作由服务器端中止 | 重新连接并访问 |