当您在调用DashScope的多模态模型时,可能需要传入图像、音频等文件的URL,这需要有相应的公网开放存储空间。为了降低文件URL的获取难度,DashScope提供了临时空间存储API。您只需在本地准备要上传的文件,即可通过API获取到对应的URL,从而完成对模型的调用。
背景介绍
DashScope上有许多能力需要用户提供一个文件进行输入。DashScope支持用户传入一个开放可访问的URL指向相应的文件作为输入参数提交API调用。这种方式的好处是简单直接,API调用输入传输数据量小速度快,但这种方式也存在一些局限性,比如:
需要用户有相应的公网开放存储空间;
用户的存储空间文件访问速度不稳定;
用户可能不希望将数据面向公网公开开放;
选择阿里云的OSS服务可以保证访问的时效性和稳定性,但是可能为用户带来额外消费;
功能概要
为了满足用户的要求,DashScope提供了帮助用户将文件上传到临时存储空间的功能,用户可以更安全地使用文件输入相关的API调用。
用户需要分三步完成具体的功能使用:
用户调用文件上传凭证获取接口,接口会返回文件上传凭证信息,凭证信息在一定时间内有效;
用户使用获取到的凭证信息调用阿里云OSS的文件上传接口完成文件上传工作;
文件上传完成后,用户需要通过凭证信息拼接出对应的OSS文件URL,并使用此URL提交API调用。
临时存储空间的优点
临时存储空间是DashScope提供的功能,平台会在内部调用上优化访问链路。使用该功能的优点为:
用户不用再自行准备公网访问空间,也不需要为此产生潜在的额外费用;
安全可控,相关文件不再有公网暴露风险;除了对应的目标调用算法,文件无法从外部访问;
对模型进行调用的时候,平台算法实例可以通过内部通路访问对应模型,相对外部链接文件获取速度快并且时延稳定;
用户可以相对独立且并行地处理文件传输和模型调用,更有利于用户协调自己的网络利用和业务逻辑。
临时存储空间的限制条件
出于安全合规的要求和用户信息的保护目的,对应功能有如下限制条件:
在上传凭证接口中需要指明具体调用的模型名称,不同的模型能力会有不同的文件大小限制;
上传的文件是用户隔离的,用户A上传的文件仅可以被用户A在获取凭证接口中指明的模型调用使用,不能被其他用户或者其他模型调用所使用;
文件上传之后的有效期是48小时,用户需要在48小时之内完成API调用,到期后文件会被清理失效;
文件一旦上传,则不能再以任何方式查询、修改和下载,平台外部也没有任何途径可以访问;仅仅在最终用户发起模型调用时经过安全校验后被算法内部获取以完成算法逻辑;
文件上传凭证获取接口的调用限流是用户在特定模型调用限流的10倍,超出对应限流的访问会因为限流失败。
文件上传凭证获取接口
功能描述
获取文件上传凭证,为实际的文件上传获取各种配置和凭证信息。
前提条件
已开通服务并获得API-KEY:API-KEY的获取与配置。
提交接口调用
GET https://dashscope.aliyuncs.com/api/v1/uploads
请求示例
以下示例展示如何通过CURL命令来访问上传文件凭证获取接口:
您需要使用API-KEY替换示例中的 your-dashscope-api-key ,代码才能正常运行。
curl --location 'https://dashscope.aliyuncs.com/api/v1/uploads?action=getPolicy&model=qwen-vl-plus' \
--header 'Authorization: Bearer your-dashscope-api-key' \
--header 'Content-Type: application/json'
入参描述
传参方式 | 字段 | 类型 | 必选 | 描述 | 示例值 |
Header | Content-Type | string | 是 | 请求类型:application/json 。 | application/json |
Authorization | string | 是 | API-Key,例如:Bearer d1**2a。 | Bearer d1**2a | |
Query | action | string | 是 | 操作类型,当前场景为getPolicy。 | getPolicy |
model | string | 是 | 指明数据准备完成后最终需要调用的模型名称。 | qwen-vl-plus |
出参描述
字段 | 类型 | 描述 | 示例值 |
request_id | string | 本次请求的系统唯一码。 | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
data | object | - | - |
data.policy | string | 上传凭证。 | eyJleHBpcmF0aW9 ... ... ... dHJ1ZSJ9XX0= |
data.signature | string | 上传凭证的签名。 | Sm/tv7DcZuTZftFVvt5yOoSETsc= |
data.upload_dir | string | 上传文件的目录。 | dashscope-instant/088726756f74fece22e2a645e2600c01/20xx-xx-xx/c0087628-5c77-90de-bf38-61ecc3a032bc |
data.upload_host | string | 上传的host地址。 | https://dashscope.oss-cn-beijing.aliyuncs.com |
data.expire_in_seconds | string | 上传凭证过期时间(单位秒)。 | 300 |
data.max_file_size_mb | string | 本次最大允许的上传文件的大小(单位MB),和用户需要访问的模型相关。 | 100 |
data.capacity_limit_mb | string | 同一个用户每天的上传容量限制(单位MB)。 | 999999999 |
data.oss_access_key_id | string | 用于上传的access key。 | LTAm5tHvsJAXf7ndvSyY**** |
data.x_oss_object_acl | string | 上传的文件访问权限,private意味着私有。 | private |
data.x_oss_forbid_overwrite | string | 文件同名时是否可以覆盖,true意味着不可覆盖。 | true |
响应示例
{
"request_id": "xxx",
"data": {
"policy": "eyJl...1ZSJ9XX0=",
"signature": "g5K...d40=",
"upload_dir": "dashscope-instant/xxx/2024-07-18/xxxx",
"upload_host": "https://dashscope-file-xxx.oss-cn-beijing.aliyuncs.com",
"expire_in_seconds": 300,
"max_file_size_mb": 100,
"capacity_limit_mb": 999999999,
"oss_access_key_id": "LTAxxx",
"x_oss_object_acl": "private",
"x_oss_forbid_overwrite": "true"
}
}
文件上传接口
功能描述
在使用文件上传凭证获取接口获取到对应的凭证之后,进行上传文件的接口。
前提条件
必须使用文件上传凭证接口提前获取对应的凭证;
相应的凭证信息在有效期之内。有效期时间请参考文件上传凭证接口输出参数的data.expire_in_seconds。
提交接口调用
请用您文件上传凭证接口输出参数的{data.upload_host}进行替换。
POST {data.upload_host}
请求示例
参数详情请参考入参描述。
curl --location 'https://dashscope.oss-cn-beijing.aliyuncs.com' \
--form 'OSSAccessKeyId="LTAm5xxx"' \
--form 'Signature="Sm/tv7DcZuTZftFVvt5yOoSETsc="' \
--form 'policy="eyJleHBpcmF0aW9 ... ... ... dHJ1ZSJ9XX0="' \
--form 'x-oss-object-acl="private"' \
--form 'x-oss-forbid-overwrite="true"' \
--form 'key="dashscope-instant/123/456/a.jpg"' \
--form 'success_action_status="200"' \
--form 'file=@"/tmp/a.jpg"'
入参描述
file必须为最后一个表单域,除file以外的其他表单域并无顺序要求。
传参方式 | 字段 | 类型 | 必选 | 描述 | 示例值 |
Header | Content-Type | String | 否 | Post操作提交表单编码必须为 | multipart/form-data; boundary=9431149156168 |
x-oss-object-acl | String | 否 | 在请求头中指定Object的访问权限,为凭证获取接口返回值中 x_oss_object_acl 的值。 | private | |
form-data | OSSAccessKeyId | Text | 是 | 凭证获取接口返回值中 oss_access_key_id 的值。 | LTAm5xxx |
policy | Text | 是 | 凭证获取接口返回值中 policy 的值。 | eyJleHBpcmF0aW9 ... ... ... dHJ1ZSJ9XX0= | |
Signature | Text | 是 | 凭证获取接口返回值中 signature 的值。 | Sm/tv7DcZuTZftFVvt5yOoSETsc= | |
key | Text | 是 | 凭证获取接口返回值中 upload_dir 的值拼接上'/'和需要上传文件的文件名。 | dashscope-instant/123/456/a.jpg | |
x-oss-object-acl | Text | 是 | 凭证获取接口返回值中 x_oss_object_acl 的值。 | private | |
x-oss-forbid-overwrite | Text | 是 | 凭证获取接口返回值中 x_oss_forbid_overwrite 的值。 | true | |
success_action_status | Text | 否 | 通常取值200,表示在文件上传结束后令接口返回http code 200指示成功。 | 200 | |
file | File | 是 | 文件或文本内容;需要注意的是,一次只支持一个文件的上传,并且file域必须放在所有表单域的最后。 | a.jpg的文件内容 |
出参描述
本接口无任何参数输出,文件传输完成之后会按照 success_action_status 的参数设置返回对应code。
使用已上传文件调用模型方式
功能描述
用户通过文件上传凭证获取接口与文件上传接口的调用完成文件的上传之后,便可以在接下来的模型调用中使用文件。值得注意的是,已经上传到临时暂存空间的文件的有效期是上传完成之后的48小时,超过这个时间之后,相应的文件就会被清除,同时对应的链接也将失效;如果用户希望以同样的文件再次调用模型,需要重新进行文件上传凭证获取和文件上传的操作。
前提条件
上传的文件仍然在有效期内;
调用模型接口的用户和获取上传文件凭证接口调用的用户必须保持一致;不能使用其他用户上传的文件;
调用模型的时候需要设置header参数X-DashScope-OssResourceResolve为enable,使得平台从临时存储空间获取文件。
拼接上传文件调用地址
将字符串"oss://"拼接在上传文件使用的key参数之前,就可以得到进行调用时所需的文件URL。例如key是dashscope-instant/aaa/bbb/xyz.jpg,那么实际进行模型调用的时候使用的URL为oss://dashscope-instant/aaa/bbb/xyz.jpg。
调用实例
此处我们使用qwen-vl-plus模型举例,演示实际的调用过程。
需要通过模型处理的文件命名为hand.jpg,存储在本地的/tmp目录下。
接下来调用文件上传凭证获取接口获取到相关的凭证信息,然后通过文件上传接口完成文件的上传。根据相关信息,最终拼接得到临时存储空间的URL为:oss://dashscope-instant/0887/2024-04-15/8bd2/hand.jpg
使用该链接进行模型调用,调用请求示例如下:
使用平台临时存储空间上的文件进行模型调用的时候,必须在请求的header中添加参数X-DashScope-OssResourceResolve并设置为enable,这样平台才会从临时存储空间中获取对应的文件参数完成调用。
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header 'Authorization: Bearer <api_key>' \
--header 'Content-Type: application/json' \
--header 'X-DashScope-OssResourceResolve: enable' \
--data '{
"model": "qwen-vl-plus",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"image": "oss://dashscope-instant/0887/2024-04-15/8bd2/hand.jpg"
},
{
"text": "请告诉我图片中手势所代表的数字"
}
]
}
]
}
}'
在调用发出后,平台会根据客户设置的参数,使用对应的链接从平台临时存储空间中获取到对应的文件并完成最终的调用,调用成功后我们会收到如下返回结果:
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"text": "图中所示的手势是“2”。这个手势通常用来表示数字2,其中食指和中指伸直,而其他手指则弯曲。这是国际上广泛接受的一种手语或符号来表达数字2。"
}
]
}
}
]
},
"usage": {
"output_tokens": 48,
"input_tokens": 1266,
"image_tokens": 1230
},
"request_id": "d3d1871f-f0aa-xx87-af60-8aeeac322799"
}