當您在調用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"
}