535 次查看 |

2023年5月22日 11:19

如何使用 AIGCaaS API

如何使用 AIGCaaS API

AIGCaaS 是 AIGC 领域的 API 平台,如何使用 AIGCaaS 的 API 是核心关键点,本文将会从接口角度,分享使用 AIGCaaS API 的使用方法。

参数分类

在 AIGCaaS 平台,分为两种参数:

系统参数

所谓系统参数指的是和你使用具体的 API 无关的参数,主要用户进行系统鉴权使用,这部分参数主要包括:

参数名 类型 位置 解释
Nonce string headers 防重放配置 随机字符串(最大长度64位,推荐20位)且10秒内不可重复
Timestamp string headers 发起请求时间戳 与服务器时间差小于10秒
SecretID string headers 密钥信息 密钥配置中的 secret_id 配置
Token string headers 签名结果 sha256(Timestamp, SecretKey, Nonce)
Aigcaas-Async string headers 【选填】是否以异步请求方式发起,异步请求相关内容可以参考异步请求文档
Aigcaas-Async-Callback string headers 【选填】异步请求的回调地址/通知地址,异步请求相关内容可以参考考异步请求文档

关于参数说明:

  1. 请求级安全防护:

Nonce 参数是防重放配置,本质是随机字符串(最大长度64位,推荐20位,且10秒内不可重复;

Timestamp 参数是发起请求时间戳,与服务器时间差小于10秒;

Token 签名结果sha256(Timestamp, SecretKey, Nonce)

所以可以认为,在10秒内,每个用户的 Nonce 是唯一的,所以 Token 也是唯一的(出现重复的概率极低,可以趋近于无穷小),此时即便你的 API 请求被别人抓包所获取,他也没办法多次盗用请求,因为每个请求只能被服务器认可一次,如果:

  • 10秒内重复请求,会因为 Nonce 参数重复而拒绝响应;
  • 10秒外再发起重复请求,会因为 Timestamp 参数过期而拒绝响应;
  1. 账号信息安全防护:

SecretID 密钥信息,密钥配置中的 secret_id 配置;

Token 签名结果sha256(Timestamp, SecretKey, Nonce)

在服务端获取到的 SecretId与SecretKey两个信息,分别用于参数传输与参与签名,通过sha256算法签名后的结果极难通过撞库等方法进行逆向,所以相对拉说也是进行账号信息防护;

综上所述,SecretIDToken组合是用于身份信息验证的使用;NonceTimestampToken组合,是用户请求防盗使用;

API 参数

所谓的 API 参数,指的是具体的应用 API 所需要的参数信息,以“胶片质感扩散生成模型”为例:

参数名 类型 位置 解释
text string body 文本 绘画的文本描述(仅支持英文描述)
width integer body 图片宽度 需要为8的倍数,最大800
height integer body 图片高度 需要为8的倍数,最大800
negative_prompt string body 反面描述内容 反面描述内容
guidance_scale number body CFG 控制图片与提示词的相关程度
seed integer body 随机种子数 控制生成图片是否可复现
numinferencesteps integer body 推理步数 推理过程给图想去噪音,数值越大效果越好,速度越慢,本平台限制(5,40)
eta number body 噪声种子 噪声种子(取值范围0.0-1.0)

请求方法

AIGCaaS 平台所接入的 AIGC 应用 API,其地址格式为:

https://api.aigcaas.cn/v2/application/${应用名}/api/${接口名}

以胶片质感扩散生成模型为例,可以在产品页面和 API Explorer 页面查看到具体的 API 内容:

image-20230524174238755

所有的 AIGC 应用 API 的请求方法均是 POST方法,所以,可以这样做总结:

请求地址https://api.aigcaas.cn/v2/application/${应用名}/api/${接口名}

请求方法:POST

入参

参数名 类型 位置 解释
Nonce string headers 防重放配置 随机字符串(最大长度64位,推荐20位)且10秒内不可重复
Timestamp string headers 发起请求时间戳 与服务器时间差小于10秒
SecretID string headers 密钥信息 密钥配置中的 secret_id 配置
Token string headers 签名结果 sha256(Timestamp, SecretKey, Nonce)
api 参数 string body API 参数

以 Python 语言为例:

import time
import json
import hashlib
import random
import requests

# 签名对象
getSha256 = lambda content: hashlib.sha256(content.encode("utf-8")).hexdigest()

# 密钥信息获取与帮助文档:https://www.aigcaas.cn/article/16.html

secret_id = '<请替换为自己的密钥信息: SecretId>'  # 密钥信息
secret_key = '<请替换为自己的密钥信息: SecretKey>'  # 密钥信息
application_name = 'analog'  # 应用名称
api_name = 'analog'  # 接口名称

# 请求地址
url = "https://api.aigcaas.cn/v2/application/%s/api/%s" % (application_name, api_name)
# 构建请求头
nonce = str(random.randint(1, 10000))
timestamp = str(int(time.time()))
token = getSha256(("%s%s%s" % (timestamp, secret_key, nonce)))
headers = {
    'SecretID': secret_id,
    'Nonce': nonce,
    'Token': token,
    'Timestamp': timestamp,
    'Content-Type': 'application/json'
}
# 构建请求 body
data = {
    "text": ""
}

# 获取响应
response = requests.request("POST", url, headers=headers, data=json.dumps(data))
print(response.text)

关于异步调用,可以参考文档:https://www.aigcaas.cn/article/18.html

响应结果

在 AIGCaaS 平台中,平台级响应结果主要体现在 Response Header 中,API 的响应结果主要体现在 Response Body 中。

例如,某次失败的请求,响应结果:

Headers

X-Forwarded-For: 172.17.0.9
Host: api.aigcaas.cn
X-Nginx-Proxy: true
Connection: upgrade
Content-Length: 22
Sec-Ch-Ua: ".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Secretid: x.temp.id.cibqLMAKuyKkUBABVPbDdpJlGbuqwNtZhnNTiyjHxuiDfPOHCz
Accept: application/json, text/plain, */*
Content-Type: application/json
Sec-Ch-Ua-Platform: "macOS"
Origin: https://www.aigcaas.cn
Sec-Fetch-Site: same-site
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://www.aigcaas.cn/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Aigcaas-Request-Id: 354ea732-6402-4614-a83b-81cbbd37f148
Aigcaas-Timestamp: 1684898592
Aigcaas-Backed-Status: False

其中,平台级结果为Aigcaas-XXXX,例如:

Aigcaas-Request-Id: 354ea732-6402-4614-a83b-81cbbd37f148
Aigcaas-Timestamp: 1684898592
Aigcaas-Statue: False

对应的是请求 ID(用于错误追踪等)以及接收到请求的时间戳等。值得注意的是,Aigcaas-Statue参数决定当前请求是否成功,如果为 True,表示成功,并进行计费,如果为 False 表示失败,不进行计费。

成功的定义:成功获取到了结果;

失败的定义:没有成功获得到结果,出现了错误信息;

特殊的情况:由于安全限制等原因,导致模型已经响应结果,但是被安全隔离,尽管没有获得到预期结果,但是也算是成功请求;

Body

{
  "error": "APIError",
  "message": "API Server Error, the system failed to obtain a correct return of the model.",
  "help": "https://www.aigcaas.cn/article/35.html"
}

该响应结果,为最终的结果。通常情况下,包括两个层面:

  1. 平台级错误:主要有statusmessage以及help三个参数,用于表示状态,信息以及帮助文档;
  2. 模型自定义响应结果:此处不做规约;

代码生成

您只需要在中间的列表中,输入对应的参数即可:

image-20230426224052619

例如,我填写了文本参数,然后选择右边的在线调用选项,并点击发送请求:

image-20230426224235581

此时可以看到右侧已经输出了对应的信息:

image-20230426224316196

此时即完成了接口的体验,接下来点击案例代码:

image-20230426224346311

通过选择对应的编程语言,即可获得到当前应用的对应测试案例,您只需要修改:

image-20230426224428865

  1. 密钥信息:填写密钥信息(或许密钥信息方法见下文)
  2. 请求Body:根据需要对请求 Body 参数进行调整即可

温馨提示:
1. 本平台所提供 API 会产生相对应的金币消耗,这部分金币消耗是用于 API 调用时的 GPU 资源消耗,并非模型服务本身费用,模型均为开源模型,由第三方免费托管至本平台,如由第三方存在侵权行为等,请联系客服微信(B063-1206)进行处理;
2. 本平台在文章中可能会涉及到最佳实践,最佳案例以及相关带有"最"的描述,均指的是限定在本平台内,而非行业,不具有排他性;例如某文章如果说"这个实践操作可以算是最佳实践了"指的是仅限在当前平台内(AIGCaaS)中算是最佳实践,所以请各位在阅读时仔细辨别。另外,此处所说的"最佳"、"最"仅为举例,并不仅局限于这几个词,而是所有的类似词汇。

标签