您與大模型的對話(輸入和輸出)會受到模型上下文長度的限制。對于128K以內的長上下文場景,通義千問Plus或通義千問Turbo均能滿足需求;而對于超過128K的超長上下文場景,建議使用Qwen-Long模型。Qwen-Long提供長達1,000萬Token(約1,500萬字)的上下文長度,支持上傳文檔并基于文檔進行問答,且使用成本極低,每1元可處理200萬Token(約300萬字)。
場景示例
Qwen-Long可以用于快速分析代碼、網頁、論文、報告、合同、書籍、規范手冊、技術文檔等。示例場景如下:
為對Qwen-Long模型在長文本處理方面的能力進行全面評估,此示例上傳了某公司2015年至2024年的10-K公司財務業績詳細報告文件。以下是相關信息:
文件數量:共10份
文件類型:PDF
每份文件頁數:約200頁
這些報告涵蓋了每一年的詳細財務數據和業務信息,所提供的10-K報告為提交給紐約證券交易所的正式官方文件。這些報告經過嚴格的審計和驗證,由于這些報告涵蓋了詳細的財務和業務信息,它們能夠為實際應用場景提供真實且有價值的參考
Prompt |
|
模型輸出 |
|
輸入tokens: 1,648,530 輸出tokens: 423 預估成本: 0.83元
在當前編程輔助工具中,盡管許多生成式AI插件(如Copilot)提供了代碼片段的生成和建議,但大多數工具的功能限制在單個代碼文件的范圍內,難以宏觀地審視整個代碼庫。Qwen-Long模型通過處理長上下文窗口,能夠對大型代碼倉庫進行全面分析和優化建議。此示例將一個GitHub項目的代碼庫轉寫為TXT文件并交給Qwen-Long模型
Prompt |
|
模型輸出 |
|
輸入tokens: 290,766 輸出tokens: 251 預估成本: 0.15元
在內容發布場景中,利用Qwen-Long模型長上下文窗口實現自動化分類與標簽添加,不僅能減少內容創作者的手動工作量,還能提高平臺內容的管理效率與用戶體驗。此示例提供給Qwen-Long模型一系列不同主題的文章。要求模型自動分析每篇文章的主題和關鍵信息,為每篇文章分配一個主題分類,并生成相關的標簽,最后格式化為JSON結構的數據。
Prompt |
|
模型輸出 |
|
輸入tokens: 53,038 輸出tokens: 557 預估成本: 0.03元
支持的模型
模型名稱 | 上下文長度 | 最大輸入 | 最大輸出 | 輸入成本 | 輸出成本 | 免費額度 |
(Token數) | (每千Token) | |||||
qwen-long | 10,000,000 | 10,000,000 | 6,000 | 0.0005元 Batch調用:0.00025元 | 0.002元 Batch調用:0.001元 | 100萬Token 有效期:百煉開通后180天內 |
在Qwen-Long模型體驗頁面,您可以上傳文檔,在線提問。
通過API使用
前提條件
已安裝OpenAI的Python SDK。
文檔上傳方式選擇
在選擇文檔上傳方式時,請考慮以下因素:
通過 file-id 上傳
推薦:適合需要頻繁引用和管理的文檔。可以有效減少文本輸入錯誤,操作簡便。
文件格式僅限于純文本文件類型,包括 txt、docx、pdf、epub、mobi、md 等,目前不支持圖片或掃描文檔等本質是圖片形式的內容。每個文件的大小限制為 150MB,最多可以上傳1萬個文件,總文件大小不得超過 100GB。
通過純文本上傳
適用場景:適合小規模文檔或臨時內容。如果文檔較短且不需要長期存儲,可以選擇此方式。受限于API調用請求體大小,如果您的文本內容長度超過1M Tokens,請參考,通過
file-id
傳入。
通過 JSON 字符串上傳
適用場景:適合需要傳遞復雜數據結構的情況。如果您的文檔包含多層次信息,使用 JSON 字符串可以確保數據的完整性。
請根據您的具體需求和文檔特性選擇最合適的上傳方式。我們建議優先考慮 file-id 上傳,以獲得最佳體驗。
通過file-id傳入文檔信息
您可以通過OpenAI兼容接口上傳文檔,并將返回的file-id
輸入到System Message中,使得模型在回復時參考文檔信息。
簡單示例
Qwen-Long模型可以基于您上傳的文檔進行回復。此處以百煉系列手機產品介紹.docx作為示例文件。
將文件通過OpenAI兼容接口上傳到百煉平臺,獲取
file-id
。有關文檔上傳接口的詳細參數解釋及調用方式,請參考API文檔頁面進行了解。Python
import os from pathlib import Path from openai import OpenAI client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) file_object = client.files.create(file=Path("百煉系列手機產品介紹.docx"), purpose="file-extract") print(file_object.id)
curl
curl --location --request POST 'https://dashscope.aliyuncs.com/compatible-mode/v1/files' \ --header "Authorization: Bearer $DASHSCOPE_API_KEY" \ --form 'file=@"百煉系列手機產品介紹.docx"' \ --form 'purpose="file-extract"'
運行以上代碼,您可以得到本次上傳文件對應的
file-id
。將
file-id
傳入System Message中且數量不超過 100 個,并在User Message中輸入問題。在通過
system message
提供文檔信息時,建議同時設置一個正常role-play的system message,如默認的 “You are a helpful assistant.”,角色設定會對文檔的處理效果產生影響,因此建議在消息中明確設定自己的角色。Python
import os from openai import OpenAI client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", ) completion = client.chat.completions.create( model="qwen-long", messages=[ {'role': 'system', 'content': 'You are a helpful assistant.'}, {'role': 'system', 'content': 'fileid://file-fe-xxx'}, {'role': 'user', 'content': '這篇文章講了什么?'} ], stream=True, stream_options={"include_usage": True} ) full_content = "" for chunk in completion: if chunk.choices and chunk.choices[0].delta.content: full_content += chunk.choices[0].delta.content print(chunk.model_dump()) print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \ --header "Authorization: Bearer $DASHSCOPE_API_KEY" \ --header "Content-Type: application/json" \ --data '{ "model": "qwen-long", "messages": [ {"role": "system","content": "You are a helpful assistant."}, {"role": "system","content": "fileid://file-fe-xxx"}, {"role": "user","content": "這篇文章講了什么?"} ], "stream": true, "stream_options": { "include_usage": true } }'
通過配置
stream
及stream_options
參數,Qwen-Long模型會流式輸出回復,并在最后返回的對象中通過usage字段展示Token使用情況。本文中的所有代碼示例均采用流式輸出,以清晰和直觀地展示模型輸出過程。如果您希望查看非流式輸出的案例,請參見此處的非流式輸出案例。
Python
{'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'','function_call':null,'role':'assistant','tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'這篇文章','function_call':null,'role':null,'tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'介紹了','function_call':null,'role':null,'tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'百','function_call':null,'role':null,'tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} ...... {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'滿足不同的使用需求','function_call':null,'role':null,'tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'。','function_call':null,'role':null,'tool_calls':null},'finish_reason':null,'index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[{'delta':{'content':'','function_call':null,'role':null,'tool_calls':null},'finish_reason':'stop','index':0,'logprobs':null}],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':null} {'id':'chatcmpl-565151e8-7b41-9a78-ae88-472edbad8c47','choices':[],'created':1726023099,'model':'qwen-long','object':'chat.completion.chunk','service_tier':null,'system_fingerprint':null,'usage':{'completion_tokens':93,'prompt_tokens':5395,'total_tokens':5488}} {'這篇文章是關于百煉系列手機的產品介紹,詳細描述了六款不同型號的手機特點和賣點:.....每款手機都有其獨特的特點和目標用戶群體,旨在滿足不同消費者的需求。'}
curl
data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"finish_reason":null,"delta":{"content":"這篇文章"},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"delta":{"content":"是"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"delta":{"content":"關于"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} ..... data: {"choices":[{"delta":{"content":"描述了每款"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"delta":{"content":"手機的主要特點和"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"delta":{"content":"規格,并提供了參考"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"delta":{"content":"售價信息。"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":5395,"completion_tokens":71,"total_tokens":5466},"created":1728649489,"system_fingerprint":null,"model":"qwen-long","id":"chatcmpl-e2434284-140a-9e3a-8ca5-f81e65e98d01"} data: [DONE]
除了傳入單個file-id
外,您還可以通過傳入多個file-id
來向模型傳入多個文檔,或在對話過程中追加file-id
使模型能夠參考新的文檔信息。
傳入多文檔
您可以在一條System Message中傳入多個file-id
,在一次請求中處理多個文檔。使用方式請參考示例代碼。
示例代碼
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
# 請將 'file-fe-xxx1' 和 'file-fe-xxx2' 替換為您實際對話場景所使用的 file-id。
{'role': 'system', 'content': f"fileid://file-fe-xxx1,fileid://file-fe-xxx2"},
{'role': 'user', 'content': '這幾篇文章講了什么?'}
],
stream=True,
stream_options={"include_usage": True}
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system","content": "You are a helpful assistant."},
{"role": "system","content": "fileid://file-fe-xxx1"},
{"role": "system","content": "fileid://file-fe-xxx2"},
{"role": "user","content": "這兩篇文章講了什么?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
追加文檔
在您與模型的交互過程中,可能需要補充新的文檔信息。您可以在Messages 數組中添加新的file-id
到System Message中來實現這一效果。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您沒有配置環境變量,請在此處替換您的API-KEY
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填寫DashScope服務base_url
)
# 初始化messages列表
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
# 請將 'file-fe-xxx1' 替換為您實際對話場景所使用的 file-id。
{'role': 'system', 'content': f'fileid://file-fe-xxx1'},
{'role': 'user', 'content': '這篇文章講了什么?'}
]
# 第一輪響應
completion_1 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=False
)
# 打印出第一輪響應
# 如果需要流式輸出第一輪的響應,需要將stream設置為True,并拼接每一段輸出內容,在構造assistant_message的content時傳入拼接后的字符
print(f"第一輪響應:{completion_1.choices[0].message.model_dump()}")
# 構造assistant_message
assistant_message = {
"role": "assistant",
"content": completion_1.choices[0].message.content}
# 將assistant_message添加到messages中
messages.append(assistant_message)
# 將追加文檔的fileid添加到messages中
# 請將 'file-fe-xxx2' 替換為您實際對話場景所使用的 file-id。
system_message = {'role': 'system', 'content': f'fileid://file-fe-xxx2'}
messages.append(system_message)
# 添加用戶問題
messages.append({'role': 'user', 'content': '這兩篇文章討論的方法有什么異同點?'})
# 追加文檔后的響應
completion_2 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=True,
stream_options={
"include_usage": True
}
)
# 流式打印出追加文檔后的響應
print("追加文檔后的響應:")
for chunk in completion_2:
print(chunk.model_dump())
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system","content": "You are a helpful assistant."},
{"role": "system","content": "fileid://file-fe-xxx1"},
{"role": "user","content": "這篇文章講了什么?"},
{"role": "system","content": "fileid://file-fe-xxx2"},
{"role": "user","content": "這兩篇文章討論的方法有什么異同點?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
通過純文本傳入信息
除了通過 file-id 傳入文檔信息外,您還可以直接使用字符串傳入文檔內容。在此方法下,為避免模型混淆角色設定與文檔內容,請確保在 messages
的第一條消息中添加用于角色設定的信息。
受限于API調用請求體大小,如果您的文本內容長度超過1M Tokens,請參考通過file-id傳入文檔信息,通過file-id
傳入。
簡單示例
您可以直接將文檔內容輸入System Message中。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填寫DashScope服務endpoint
)
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': '百煉手機產品介紹 百煉X1 ——————暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕...'},
{'role': 'user', 'content': '文章講了什么?'}
],
stream=True,
stream_options={"include_usage": True}
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system","content": "You are a helpful assistant."},
{"role": "system","content": "百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率,..."},
{"role": "user","content": "這篇文章講了什么?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
傳入多文檔
當您在本輪對話需要傳入多個文檔時,可以將文檔內容放在不同的System Message中。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': '百煉X1————暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...'},
{'role': 'system', 'content': '星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計...'},
{'role': 'user', 'content': '這兩篇文章討論的產品有什么異同點?'}
],
stream=True,
stream_options={"include_usage": True}
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system","content": "You are a helpful assistant."},
{"role": "system","content": "百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率..."},
{"role": "system","content": "星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計..."},
{"role": "user","content": "這兩篇文章討論的產品有什么異同點?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
追加文檔
在您與模型的交互過程中,可能需要補充新的文檔信息。您可以在Messages 數組中添加新的文檔內容到System Message中來實現這一效果。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您沒有配置環境變量,請在此處替換您的API-KEY
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填寫DashScope服務base_url
)
# 初始化messages列表
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': '百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...'},
{'role': 'user', 'content': '這篇文章講了什么?'}
]
# 第一輪響應
completion_1 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=False
)
# 打印出第一輪響應
# 如果需要流式輸出第一輪的響應,需要將stream設置為True,并拼接每一段輸出內容,在構造assistant_message的content時傳入拼接后的字符
print(f"第一輪響應:{completion_1.choices[0].message.model_dump()}")
# 構造assistant_message
assistant_message = {
"role": "assistant",
"content": completion_1.choices[0].message.content}
# 將assistant_message添加到messages中
messages.append(assistant_message)
# 將追加文檔內容添加到messages中
system_message = {
'role': 'system',
'content': '星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計,帶來無界視覺享受...'
}
messages.append(system_message)
# 添加用戶問題
messages.append({
'role': 'user',
'content': '這兩篇文章討論的產品有什么異同點?'
})
# 追加文檔后的響應
completion_2 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=True,
stream_options={"include_usage": True}
)
# 流式打印出追加文檔后的響應
print("追加文檔后的響應:")
for chunk in completion_2:
print(chunk.model_dump())
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system","content": "You are a helpful assistant."},
{"role": "system","content": "百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率..."},
{"role": "user","content": "這篇文章講了什么?"},
{"role": "system","content": "星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計,帶來無界視覺享受..."},
{"role": "user","content": "這兩篇文章討論的產品有什么異同點"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
通過JSON字符串傳入文檔信息
您可以通過JSON字符串傳入文檔的內容、類型、名稱與標題,使模型在本輪對話中可以參考這些信息。
JSON格式的文檔信息需要按照文檔內容(content)、文檔類型(file_type)、文檔名稱(filename)、文檔標題(title)的格式進行組織。請先將結構化的文檔信息轉換為JSON 字符串,再輸入System Message中。
簡單示例
Python
import os
import json
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 替換成真實DashScope的API_KEY,如已配置API-KEY到環境變量請使用變量名(推薦)
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填寫DashScope服務endpoint
)
file_info = {
# 全文內容省略,只做格式示意
'content': '百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...',
'file_type': 'docx',
'filename': '百煉系列手機產品介紹',
'title': '百煉手機產品介紹'
}
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
# 通過json.dumps方法將JSON object轉化為字符串
{'role': 'system', 'content': json.dumps(file_info, ensure_ascii=False)},
{'role': 'user', 'content': '文章講了什么?'}
],
stream=True
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "system",
"content": "{\"content\": \"百煉X1 搭載6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"docx\", \"filename\": \"百煉系列手機產品介紹\", \"title\": \"百煉手機產品介紹\"}"
},
{"role": "user", "content": "文章講了什么?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
傳入多文檔
Python
import os
import json
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
file_info_1 = {
'content': '百煉X1————暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率...',
'file_type': 'pdf',
'filename': 'test_case_1',
'title': 'test_case_1'
}
file_info_2 = {
'content': '星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計:...',
'file_type': 'pdf',
'filename': 'test_case_2',
'title': 'test_case_2'
}
# 首次對話會等待文檔解析完成,首輪響應時間可能較長
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': json.dumps(file_info_1, ensure_ascii=False)},
{'role': 'system', 'content': json.dumps(file_info_2, ensure_ascii=False)},
{'role': 'user', 'content': '這兩篇文章討論的產品有什么異同點?'},
],
stream=True,
stream_options={"include_usage": True}
)
full_content = ""
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
full_content += chunk.choices[0].delta.content
print(chunk.model_dump())
print({full_content})
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "system",
"content": "{\"content\": \"百煉X1 搭載6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_1\", \"title\": \"test_case_1\"}"
},
{
"role": "system",
"content": "{\"content\": \"星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_2\", \"title\": \"test_case_2\"}"
},
{"role": "user", "content": "這兩篇文章討論的產品有什么異同點?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
追加文檔
在您與模型的交互過程中,可能需要補充新的文檔信息。您可以在Messages 數組中添加新的JSON格式化后的文檔內容到System Message中,來實現這一效果。
Python
import os
import json
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您沒有配置環境變量,請在此處替換您的API-KEY
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # 填寫DashScope服務base_url
)
# 初始化messages列表
file_info_1 = {
'content': '星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素屏下攝像頭設計,帶來無界視覺享受。',
'file_type': 'pdf',
'filename': 'test_case_1',
'title': 'test_case_1'
}
file_info_2 = {
'content': '百煉X1 —— 暢享極致視界:搭載6.7英寸1440 x 3200像素超清屏幕,搭配120Hz刷新率,流暢視覺體驗躍然眼前。',
'file_type': 'pdf',
'filename': 'test_case_2',
'title': 'test_case_2'
}
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': json.dumps(file_info_1, ensure_ascii=False)},
{'role': 'user', 'content': '這篇文章講了什么?'},
]
# 第一輪響應
completion_1 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=False
)
# 打印出第一輪響應
# 如果需要流式輸出第一輪的響應,需要將stream設置為True,并拼接每一段輸出內容,在構造assistant_message的content時傳入拼接后的字符
print(f"第一輪響應:{completion_1.choices[0].message.model_dump()}")
# 構造assistant_message
assistant_message = {
"role": "assistant",
"content": completion_1.choices[0].message.content}
# 將assistant_message添加到messages中
messages.append(assistant_message)
# 將追加文檔的信息添加到messages中
system_message = {
'role': 'system',
'content': json.dumps(file_info_2, ensure_ascii=False)
}
messages.append(system_message)
# 添加用戶問題
messages.append({
'role': 'user',
'content': '這兩篇文章討論的產品有什么異同點?'
})
# 追加文檔后的響應
completion_2 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=True,
stream_options={"include_usage": True}
)
# 流式打印出追加文檔后的響應
print("追加文檔后的響應:")
for chunk in completion_2:
print(chunk.model_dump())
curl
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "qwen-long",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{
"role": "system",
"content": "{\"content\": \"百煉X1 搭載6.7英寸1440 x 3200像素超清屏幕...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_1\", \"title\": \"test_case_1\"}"
},
{"role": "user", "content": "這篇文章講了什么?"},
{
"role": "system",
"content": "{\"content\": \"星塵S9 Pro —— 創新視覺盛宴:突破性6.9英寸1440 x 3088像素...\n\", \"file_type\": \"pdf\", \"filename\": \"test_case_2\", \"title\": \"test_case_2\"}"
},
{"role": "user", "content": "這兩篇文章討論的產品有什么異同點?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
限制
文件上傳限制:文件格式支持常見的文本文件(txt、doc、docx、pdf、epub、mobi、md),單文件大小限制為150M,總量限制為1萬個文件,總文件大小限制為100G。更多文件上傳相關內容請參見上傳文件。
輸入限制:
請避免直接將文檔內容放在
role
為user
的message中,用于role-play的system
和user
的message限制輸入最長為9,000 Token(連續多條user message視為一條user message且長度限制在9,000 Token內)。通過
file-id
傳入文檔信息,并在system
消息中使用返回的file-id
時,content 的最大輸入限制可擴展至 10,000,000 Token,但file-id
的數量限制為不超過 100 個。此外,文件的傳入順序將直接影響模型返回結果的順序。
輸出限制:最大輸出為 6,000 Token。
免費額度:100萬Token的免費額度僅在百煉開通后的180天內有效。使用超出免費額度的部分將按照相應的輸入輸出成本收費。
調用限制:關于模型的限流條件,請參見限流。
常見問題
Dashscope SDK的調用方式是否兼容?
是的,Dashscope SDK對模型調用仍然兼容,但文件上傳與
file-id
獲取目前只支持通過OpenAI SDK進行調用,且通過此方式獲得的file-id
與Dashscope對模型進行調用所需要的file-id
通用。Qwen-Long是否支持通System Message來指定模型行為?
是的,Qwen-Long仍支持通過System Message標準化指定模型行為的功能,詳情請參照上方“通過API使用”部分。
如何在JSON格式中組織文檔信息?
請參照上方“通過JSON字符串傳入文檔信息”部分,構造messages時,為避免格式問題,JSON格式的文檔信息應按照文檔內容(content)、文檔類型(file_type)、文檔名稱(filename)、文檔標題(title)的格式組織。
Qwen-Long支持以流式回復嗎?
通過對
stream
參數及stream_options
配置選項字典中include_usage
選項的配置,Qwen-Long模型會以流式的形式進行回復,并在最后返回的對象中通過usage字段展示token使用情況。Qwen-Long是否支持批量提交任務?
是的,Qwen-Long 兼容 OpenAI Batch 接口,支持以文件方式批量提交任務。任務會以異步形式執行,并在 24 小時內返回結果。使用批量接口的費用為實時調用的 50%。
API參考
關于Qwen-Long模型的輸入與輸出參數,請參考通義千問。
錯誤碼
以下是與Qwen-Long模型接口相關的特定狀態碼,詳細的公共錯誤碼請參見公共錯誤碼文檔。
狀態碼 | 接口錯誤信息(message) (具體信息內容可能跟隨場景有所變化) | 含義說明 |
400 | Invalid file [id:xxx]. | 提供的文件id存在問題,請確保file-id正確無誤后再次進行調用。 |
400 | Too many files provided. | 提供的對話文檔數量大于等于100,請確保文檔數量符合要求后再次進行調用。 |
400 | File [id:xxx] cannot be found. | 輸入的文件已經被刪除,請嘗試再次上傳文檔后使用相對應的file-id再次進行調用。 |
400 | File [id:xxx] exceeds size limit. | 文檔大小超限,請確保文檔大小符合要求后再次進行調用。 |
400 | File [id:xxx] exceeds page limits (15000 pages). | 文檔頁數超限,請確保文檔頁數符合要求后再次進行調用。 |
400 | Multiple types of file system prompt detected, please do not mix file-id and text content in one request. | 輸入的文件中包含了file id 和文件內容兩種方式,當前暫不支持兩種方式混用,請統一輸入方式后再次進行調用。 |
400 | File [id:xxx] format is not supported. | 文檔格式不支持,請參考文件上傳限制確保文檔格式符合限制要求后再次進行調用。 |
400 | File [id:xxx] content blank. | 文檔內容為空,請確保文檔內容符合要求后再次進行調用。 |
400 | Total message token length exceed model limit (10000000 tokens). | 輸入的messages總長度超過了10,000,000 Token,請確保message長度符合要求后再次進行調用。 |
400 | Single round file-content exceeds token limit, please use fileid to supply lengthy input. | 輸入的單條message token數超過了9K,請確保message長度符合要求后再次進行調用。 |
400 | Role specification invalid, please refer to API documentation for usage. | messages組裝格式存在問題,請參考上述參數描述與示例代碼進行參考。 |
400 | File parsing in progress, please try again later. | 文檔解析中,請稍后再試。 |
400 | Input data may contain inappropriate content. | 數據檢查錯誤,輸入包含疑似敏感內容被綠網攔截。 |
429 | You exceeded your current requests list. | 您超出了對模型訪問的限流值,請稍后再試。 |
500 | File [id:xxx] parsing error. | 文檔解析失敗。 |
500 | File [id:xxx] prasing timeout. | 文檔解析超時。 |
500 | Preprocessor error. | 大模型前處理錯誤。 |
500 | Postprocessor error. | 大模型后處理錯誤。 |
500 | File content conversion error. | 文檔message處理錯誤。 |
500 | An unspecified internal error has occured. | 調用大模型出現異常。 |
500 | Response timeout. | 處理超時,可重新嘗試調用。 |
503 | The engine is currently overloaded, please try again later. | 服務端負載過高,可稍后重新嘗試調用。 |