Qwen-Long は、ファイルアップロードと参照メカニズムを通じて最大 1,000 万トークンのドキュメントを処理し、標準モデルのコンテキスト長の制限を克服します。
このドキュメントは、中国本土 (北京) リージョンにのみ適用されます。モデルを使用するには、中国本土 (北京) リージョンの API キーを使用する必要があります。
使用方法
Qwen-Long は、ファイルのアップロードと API 呼び出しの 2 つのステップで使用します。
-
ファイルのアップロードと解析:
-
API を使用してファイルをアップロードします。サポートされているファイル形式とサイズ制限の詳細については、「サポートされているフォーマット」をご参照ください。
-
アップロードが成功すると、システムはご利用のアカウントに対して一意の
file-idを返し、解析を開始します。ファイルのアップロード、ストレージ、解析には料金はかかりません。
-
-
API 呼び出しと課金:
-
モデルを呼び出す際、
systemメッセージで 1 つ以上のfile-idを参照します。 -
モデルは
file-idに関連付けられたテキスト内容に基づいて推論を実行します。 -
各 API 呼び出しにおいて、参照されたファイル内容のトークン数がそのリクエストの入力トークンとしてカウントされます。
-
これにより、各リクエストで大きなファイルを転送する必要がなくなりますが、ファイルのトークンは API 呼び出しごとに課金されることにご注意ください。
クイックスタート
前提条件
-
SDK 経由でモデルを呼び出すには、OpenAI SDK をインストールします。
ドキュメントのアップロード
この例では、Model_Studio_Phone_Product_Introduction.docx を OpenAI 互換インターフェイス経由で Model Studio の安全なストレージにアップロードし、file-id を取得します。アップロードパラメーターについては、API ドキュメントをご参照ください。
Python
import os
from pathlib import Path
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 設定されていない場合は、ご自身の API キーに置き換えてください。
# 次の URL は中国 (北京) リージョン用です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
file_object = client.files.create(file=Path("Model_Studio_Phone_Product_Introduction.docx"), purpose="file-extract")
print(file_object.id)
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.files.*;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Main {
public static void main(String[] args) {
// クライアントを作成し、環境変数から API キーを使用します。
OpenAIClient client = OpenAIOkHttpClient.builder()
// 環境変数を設定していない場合は、次の行を .apiKey("sk-xxx") に置き換えてください。
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 次の URL は中国 (北京) リージョン用です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// ファイルパスを設定します。必要に応じてパスとファイル名を変更してください。
Path filePath = Paths.get("src/main/java/org/example/Model_Studio_Phone_Product_Introduction.docx");
// ファイルアップロードのパラメーターを作成します。
FileCreateParams fileParams = FileCreateParams.builder()
.file(filePath)
.purpose(FilePurpose.of("file-extract"))
.build();
// ファイルをアップロードし、file-id を出力します。
FileObject fileObject = client.files().create(fileParams);
System.out.println(fileObject.id());
}
}
curl
# 次の URL は中国 (北京) リージョン用です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location --request POST 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/files' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--form 'file=@"Alibaba Cloud Model Studio Phone Series Product Introduction.docx"' \
--form 'purpose="file-extract"'
コードを実行して、アップロードされたファイルの file-id を取得します。
ファイル ID を使用した情報の受け渡しとチャット
システムメッセージで file-id を渡します。最初のメッセージでロールを定義し、2番目のメッセージに file-id を含め、その後にユーザーの質問を追加します。
ドキュメントが長いほど、解析に時間がかかります。呼び出しを行う前に、解析が完了するまでお待ちください。
Python
import os
from openai import OpenAI, BadRequestError
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 設定されていない場合は、ご自身の API キーに置き換えてください。
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
try:
# メッセージリストを初期化します。
completion = client.chat.completions.create(
model="qwen-long",
messages=[
# sys1: ロールの定義。
{'role': 'system', 'content': 'You are a helpful assistant.'},
# sys2: ドキュメントの内容 (プレーンテキストまたは file-id)。
# '{FILE_ID}' を会話で使用する file-id に置き換えてください。
{'role': 'system', 'content': f'fileid://{FILE_ID}'},
# リクエストに2番目のシステムメッセージが含まれる場合、ユーザーメッセージの内容は 9,000 トークンに制限されます。
{'role': 'user', 'content': 'この記事は何について説明していますか?'}
],
# すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
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())
# トークン使用量を取得します。
if chunk.usage:
print(f"Total tokens: {chunk.usage.total_tokens}")
print(full_content)
except BadRequestError as e:
print(f"Error: {e}")
print("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code")
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;
public class Main {
public static void main(String[] args) {
// クライアントを作成し、環境変数から API キーを使用します。
OpenAIClient client = OpenAIOkHttpClient.builder()
// 環境変数を設定していない場合は、次の行を .apiKey("sk-xxx") に置き換えてください。
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// チャットリクエストを作成します。
ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
//sys1: ロールの定義。
.addSystemMessage("You are a helpful assistant.")
//sys2: ドキュメントの内容 (プレーンテキストまたは file-id)。
//'{FILE_ID}' を会話で使用する file-id に置き換えてください。
.addSystemMessage("fileid://{FILE_ID}")
//リクエストに2番目のシステムメッセージが含まれる場合、ユーザーメッセージの内容は 9,000 トークンに制限されます。
.addUserMessage("この記事は何について説明していますか?")
.model("qwen-long")
.build();
StringBuilder fullResponse = new StringBuilder();
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
streamResponse.stream().forEach(chunk -> {
// 各チャンクの内容を出力し、連結します。
System.out.println(chunk);
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println(fullResponse);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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
}
}'
複数ドキュメントの受け渡し
1つのシステムメッセージで複数の file-id を渡すか、ドキュメントごとに個別のシステムメッセージを追加します。
複数ドキュメントの受け渡し
Python
import os
from openai import OpenAI, BadRequestError
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 設定されていない場合は、ご自身の API キーに置き換えてください。
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
try:
# メッセージリストを初期化します。
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
# '{FILE_ID1}' と '{FILE_ID2}' を会話で使用する file-id に置き換えてください。
{'role': 'system', 'content': f"fileid://{FILE_ID1},fileid://{FILE_ID2}"},
{'role': 'user', 'content': 'これらの記事は何について説明していますか?'}
],
# すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
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)
except BadRequestError as e:
print(f"Error: {e}")
print("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code")
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;
public class Main {
public static void main(String[] args) {
// クライアントを作成し、環境変数から API キーを使用します。
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// チャットリクエストを作成します。
ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
.addSystemMessage("You are a helpful assistant.")
//'{FILE_ID1}' と '{FILE_ID2}' を会話で使用する file-id に置き換えてください。
.addSystemMessage("fileid://{FILE_ID1},fileid://{FILE_ID2}")
.addUserMessage("これら2つの記事は何について説明していますか?")
.model("qwen-long")
.build();
StringBuilder fullResponse = new StringBuilder();
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
streamResponse.stream().forEach(chunk -> {
// 各チャンクの内容。
System.out.println(chunk);
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println("\nFull response content:");
System.out.println(fullResponse);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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": "これら2つの記事は何について説明していますか?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
ドキュメントの追加
Python
import os
from openai import OpenAI, BadRequestError
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 設定されていない場合は、ご自身の API キーに置き換えてください。
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# メッセージリストを初期化します。
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
# '{FILE_ID1}' を会話で使用する file-id に置き換えてください。
{'role': 'system', 'content': f'fileid://{FILE_ID1}'},
{'role': 'user', 'content': 'この記事は何について説明していますか?'}
]
try:
# 1巡目の応答
completion_1 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=False
)
# 1巡目の応答を出力します。
# ストリーミングする場合: stream=True を設定し、セグメントを連結して assistant_message の内容として渡します。
print(f"First-round response: {completion_1.choices[0].message.model_dump()}")
except BadRequestError as e:
print(f"Error: {e}")
print("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code")
# assistant_message を構築します。
assistant_message = {
"role": "assistant",
"content": completion_1.choices[0].message.content}
# assistant_message を messages に追加します。
messages.append(assistant_message)
# 追加するドキュメントの file-id を messages に追加します。
# '{FILE_ID2}' を会話で使用する file-id に置き換えてください。
system_message = {'role': 'system', 'content': f'fileid://{FILE_ID2}'}
messages.append(system_message)
# ユーザーの質問を追加します。
messages.append({'role': 'user', 'content': 'これら2つの記事で説明されている手法の類似点と相違点は何ですか?'})
# ドキュメント追加後の応答。
completion_2 = client.chat.completions.create(
model="qwen-long",
messages=messages,
# すべてのコード例では、モデルの出力プロセスを明確かつ直感的に示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
stream=True,
stream_options={
"include_usage": True
}
)
# ドキュメント追加後の応答をストリーミングして出力します。
print("Response after appending the document:")
for chunk in completion_2:
print(chunk.model_dump())
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.*;
import com.openai.core.http.StreamResponse;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// メッセージリストを初期化します。
List<ChatCompletionMessageParam> messages = new ArrayList<>();
// ロール設定の情報を追加します。
ChatCompletionSystemMessageParam roleSet = ChatCompletionSystemMessageParam.builder()
.content("You are a helpful assistant.")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(roleSet));
// '{FILE_ID1}' を会話で使用する file-id に置き換えてください。
ChatCompletionSystemMessageParam systemMsg1 = ChatCompletionSystemMessageParam.builder()
.content("fileid://{FILE_ID1}")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(systemMsg1));
// ユーザーの質問メッセージ (USER ロール)。
ChatCompletionUserMessageParam userMsg1 = ChatCompletionUserMessageParam.builder()
.content("記事の内容を要約してください。")
.build();
messages.add(ChatCompletionMessageParam.ofUser(userMsg1));
// 1巡目のリクエストを構築し、例外を処理します。
ChatCompletion completion1;
try {
completion1 = client.chat().completions().create(
ChatCompletionCreateParams.builder()
.model("qwen-long")
.messages(messages)
.build()
);
} catch (Exception e) {
System.err.println("Request error. See error code page:");
System.err.println("https://www.alibabacloud.com/help/model-studio/error-code");
System.err.println("Error details: " + e.getMessage());
e.printStackTrace();
return;
}
// 1巡目の応答。
String firstResponse = completion1 != null ? completion1.choices().get(0).message().content().orElse("") : "";
System.out.println("First-round response: " + firstResponse);
// AssistantMessage を構築します。
ChatCompletionAssistantMessageParam assistantMsg = ChatCompletionAssistantMessageParam.builder()
.content(firstResponse)
.build();
messages.add(ChatCompletionMessageParam.ofAssistant(assistantMsg));
// '{FILE_ID2}' を会話で使用する file-id に置き換えてください。
ChatCompletionSystemMessageParam systemMsg2 = ChatCompletionSystemMessageParam.builder()
.content("fileid://{FILE_ID2}")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(systemMsg2));
// 2巡目のユーザーの質問 (USER ロール)。
ChatCompletionUserMessageParam userMsg2 = ChatCompletionUserMessageParam.builder()
.content("2つの記事の構造的な違いを比較してください。")
.build();
messages.add(ChatCompletionMessageParam.ofUser(userMsg2));
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
StringBuilder fullResponse = new StringBuilder();
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(
ChatCompletionCreateParams.builder()
.model("qwen-long")
.messages(messages)
.build())) {
streamResponse.stream().forEach(chunk -> {
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println("\nFinal response:");
System.out.println(fullResponse.toString().trim());
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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": "これら2つの記事で説明されている手法の類似点と相違点は何ですか?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
プレーンテキストとしての情報伝達
file-id を使用する代わりに、ドキュメントコンテンツを文字列として直接渡します。ドキュメントコンテンツとの混同を避けるために、最初のメッセージにロール設定を追加します。
ドキュメントコンテンツが 100 万トークンを超える場合は、API サイズ制限のため、代わりにファイル ID を使用してください。
簡単な例
ドキュメントコンテンツをシステムメッセージに直接入力できます。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 環境変数を設定していない場合は、ここで API キーを置き換えます
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# messages リストを初期化します
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': 'Alibaba Cloud Model Studio スマートフォン製品紹介:Alibaba Cloud Model Studio X1 —————— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面を搭載...'},
{'role': 'user', 'content': 'この記事は何について書かれていますか?'}
],
# すべてのコード例では、モデルの出力プロセスを明確かつ直感的に示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
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)
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;
public class Main {
public static void main(String[] args) {
// 環境変数から API キーを使用してクライアントを作成します
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// チャットリクエストを作成します
ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
.addSystemMessage("You are a helpful assistant.")
.addSystemMessage("Alibaba Cloud Model Studio スマートフォン製品紹介:Alibaba Cloud Model Studio X1 —————— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面を搭載...")
.addUserMessage("この記事は何について書かれていますか?")
.model("qwen-long")
.build();
StringBuilder fullResponse = new StringBuilder();
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
streamResponse.stream().forEach(chunk -> {
// 各チャンクのコンテンツを出力して追加します
System.out.println(chunk);
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println(fullResponse);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("詳細については、https://www.alibabacloud.com/help/model-studio/error-code をご参照ください");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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": "Alibaba Cloud Model Studio X1 —— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度..."},
{"role": "user","content": "この記事は何について書かれていますか?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
複数のドキュメントを渡す
1回の会話ターンで複数のドキュメントを渡すには、各ドキュメントのコンテンツを個別のシステムメッセージに配置します。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 環境変数を設定していない場合は、ここで API キーを置き換えます
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# messages リストを初期化します
completion = client.chat.completions.create(
model="qwen-long",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': 'Alibaba Cloud Model Studio X1————究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度...'},
{'role': 'system', 'content': 'Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計...'},
{'role': 'user', 'content': 'これら2つの記事で説明されている製品の類似点と相違点は何ですか?'}
],
# すべてのコード例では、モデルの出力プロセスを明確かつ直感的に示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
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)
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;
public class Main {
public static void main(String[] args) {
// 環境変数から API キーを使用してクライアントを作成します
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// チャットリクエストを作成します
ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
.addSystemMessage("You are a helpful assistant.")
.addSystemMessage("Alibaba Cloud Model Studio スマートフォン製品紹介:Alibaba Cloud Model Studio X1 —————— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面を搭載...")
.addSystemMessage("Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計...")
.addUserMessage("これら2つの記事で説明されている製品の類似点と相違点は何ですか?")
.model("qwen-long")
.build();
StringBuilder fullResponse = new StringBuilder();
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
streamResponse.stream().forEach(chunk -> {
// 各チャンクのコンテンツを出力して追加します
System.out.println(chunk);
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println(fullResponse);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("詳細については、https://www.alibabacloud.com/help/model-studio/error-code をご参照ください");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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": "Alibaba Cloud Model Studio X1 —— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度..."},
{"role": "system","content": "Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計..."},
{"role": "user","content": "これら2つの記事で説明されている製品の類似点と相違点は何ですか?"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
ドキュメントの追加
モデルとの対話中に、新しいドキュメント情報を追加する必要が生じることがあります。その場合は、新しいドキュメントコンテンツをシステムメッセージとして Messages 配列に追加します。
Python
import os
from openai import OpenAI, BadRequestError
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 環境変数を設定していない場合は、ここで API キーを置き換えます
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# messages リストを初期化します
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'system', 'content': 'Alibaba Cloud Model Studio X1 —— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度...'},
{'role': 'user', 'content': 'この記事は何について書かれていますか?'}
]
try:
# 1巡目の応答
completion_1 = client.chat.completions.create(
model="qwen-long",
messages=messages,
stream=False
)
# 1巡目の応答を出力します
# 1巡目でストリーミング出力を行うには、stream=True を設定し、各セグメントのコンテンツを連結します。連結した文字列を、assistant_message を構築する際の content として渡します
print(f"1巡目の応答: {completion_1.choices[0].message.model_dump()}")
except BadRequestError as e:
print(f"Error: {e}")
print("詳細については、https://www.alibabacloud.com/help/model-studio/error-code をご参照ください")
# 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': 'Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計、没入感のある視覚体験を提供...'}
messages.append(system_message)
# ユーザーの質問を追加します
messages.append({
'role': 'user',
'content': 'これら2つの記事で説明されている製品の類似点と相違点は何ですか?'
})
# ドキュメント追加後の応答
completion_2 = client.chat.completions.create(
model="qwen-long",
messages=messages,
# すべてのコード例では、モデルの出力プロセスを明確かつ直感的に示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
stream=True,
stream_options={"include_usage": True}
)
# ドキュメント追加後の応答をストリーミングして出力します
print("ドキュメント追加後の応答:")
for chunk in completion_2:
print(chunk.model_dump())
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.*;
import com.openai.core.http.StreamResponse;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
.baseUrl("https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1")
.build();
// messages リストを初期化します
List<ChatCompletionMessageParam> messages = new ArrayList<>();
// ロール設定情報を追加します
ChatCompletionSystemMessageParam roleSet = ChatCompletionSystemMessageParam.builder()
.content("You are a helpful assistant.")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(roleSet));
// 1巡目のコンテンツ
ChatCompletionSystemMessageParam systemMsg1 = ChatCompletionSystemMessageParam.builder()
.content("Alibaba Cloud Model Studio X1 —— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度、256 GB のストレージ、12 GB の RAM、5000mAh の長持ちバッテリーを搭載...")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(systemMsg1));
// ユーザーの質問 (USER ロール)
ChatCompletionUserMessageParam userMsg1 = ChatCompletionUserMessageParam.builder()
.content("記事の内容を要約してください")
.build();
messages.add(ChatCompletionMessageParam.ofUser(userMsg1));
// 1巡目のリクエストを構築し、例外を処理します
ChatCompletion completion1;
try {
completion1 = client.chat().completions().create(
ChatCompletionCreateParams.builder()
.model("qwen-long")
.messages(messages)
.build()
);
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("詳細については、https://www.alibabacloud.com/help/model-studio/error-code をご参照ください");
e.printStackTrace();
return;
}
// 1巡目の応答
String firstResponse = completion1 != null ? completion1.choices().get(0).message().content().orElse("") : "";
System.out.println("1巡目の応答: " + firstResponse);
// AssistantMessage を構築します
ChatCompletionAssistantMessageParam assistantMsg = ChatCompletionAssistantMessageParam.builder()
.content(firstResponse)
.build();
messages.add(ChatCompletionMessageParam.ofAssistant(assistantMsg));
// 2巡目のコンテンツ
ChatCompletionSystemMessageParam systemMsg2 = ChatCompletionSystemMessageParam.builder()
.content("Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計、没入感のある視覚体験を提供...")
.build();
messages.add(ChatCompletionMessageParam.ofSystem(systemMsg2));
// 2巡目のユーザーの質問 (USER ロール)
ChatCompletionUserMessageParam userMsg2 = ChatCompletionUserMessageParam.builder()
.content("2つの説明の構造的な違いを比較してください")
.build();
messages.add(ChatCompletionMessageParam.ofUser(userMsg2));
// すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
StringBuilder fullResponse = new StringBuilder();
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(
ChatCompletionCreateParams.builder()
.model("qwen-long")
.messages(messages)
.build())) {
streamResponse.stream().forEach(chunk -> {
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println("\n最終的な応答:");
System.out.println(fullResponse.toString().trim());
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
System.err.println("詳細については、https://www.alibabacloud.com/help/model-studio/error-code をご参照ください");
}
}
}
curl
# 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
curl --location 'https://{WorkspaceId}.cn-beijing.maas.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": "Alibaba Cloud Model Studio X1 —— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面、120Hz の更新頻度..."},
{"role": "user","content": "この記事は何について書かれていますか?"},
{"role": "system","content": "Stardust S9 Pro —— 革新的な視覚の饗宴:画期的な 6.9 インチ 1440 x 3088 ピクセルのアンダーディスプレイカメラ設計、没入感のある視覚体験を提供..."},
{"role": "user","content": "これら2つの記事で説明されている製品の類似点と相違点は何ですか"}
],
"stream": true,
"stream_options": {
"include_usage": true
}
}'
モデルの料金
|
モデル名 |
バージョン |
コンテキスト長 |
最大入力 |
最大出力 |
入力コスト |
出力コスト |
|
(トークン) |
(100 万トークンあたり) |
|||||
|
qwen-long-latest 常に最新のスナップショットバージョンと同じ機能を持ちます。 |
最新版 |
10,000,000 |
10,000,000 |
32,768 |
$0.072 |
$0.287 |
|
qwen-long-2025-01-25 qwen-long-0125 とも呼ばれます。 |
スナップショット |
|||||
よくある質問
-
Qwen-Long モデルはバッチジョブの送信に対応していますか?
はい。Qwen-Long は OpenAI Batch API に対応しており、リアルタイム呼び出しレートの 50% で利用できます。バッチジョブをファイルとして送信すると、ジョブは非同期で実行され、完了またはタイムアウト時に結果が返されます。
-
OpenAI 互換のファイル API を使用してアップロードされたファイルは、どこに保存されますか?
ファイルはご利用の Model Studio バケットに無料でアップロードされます。ファイルのクエリと管理については、OpenAI File API をご参照ください。
-
qwen-long-2025-01-25とは何ですか?これは、特定の時点で凍結されたバージョンスナップショットです。`latest` よりも安定しており、有効期限はありません。
-
ファイルの解析が完了したことをどのように確認できますか?
file-idを指定してモデルを呼び出してください。解析が完了していない場合、エラー 400「File parsing in progress, please try again later.」が返されます。正常な応答は、解析が完了したことを意味します。 -
モデルが標準フォーマットの JSON 文字列を確実に出力するようにするには、どうすればよいですか?
qwen-longおよびすべてのスナップショットは 構造化出力 に対応しています。JSON スキーマを指定することで、ご利用の構造に一致する有効な JSON を保証できます。
API リファレンス
Qwen-Long モデルの入力および出力パラメーターについては、「Qwen API の詳細」をご参照ください。
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、エラーコードをご参照ください。
制限事項
-
SDK の依存関係:
-
ファイル操作 (アップロード、削除、クエリ) には、OpenAI 互換 SDK が必要です。
-
モデルの呼び出しは、OpenAI 互換 SDK または Dashscope SDK を使用します。
-
-
ファイルのアップロード:
-
対応フォーマット: TXT、DOCX、PDF、XLSX、EPUB、MOBI、MD、CSV、JSON、BMP、PNG、JPG/JPEG、GIF。
-
ファイルサイズ: 画像ファイルの最大サイズは 20 MB です。その他のファイル形式の最大サイズは 150 MB です。
-
アカウントのクォータ: 1 アカウントあたり最大 10,000 ファイルまたは 100 GB です。いずれかの上限に達すると、アップロードは失敗します。ファイルを削除してクォータを解放してください。詳細については、「OpenAI 互換 - ファイル」をご参照ください。
-
ストレージ期間: 現在、保存されているファイルに有効期限はありません。
-
-
API 入力:
-
最初の
systemメッセージでロールを定義します。2 番目のメッセージには、ドキュメントコンテンツまたはfileid://xxxが含まれます。userメッセージにはクエリが含まれます。 -
file-idを使用してファイルを参照する場合、1 つのリクエストで最大 100 ファイルまで参照できます。 -
2 番目の
systemメッセージがある場合、userメッセージの制限は 9,000 トークンです。system メッセージが 1 つだけの場合は制限はありません。 -
合計コンテキスト長は 1,000 万トークンに制限されています。
-
-
API 出力:
-
最大出力長は 32,768 トークンです。
-
-
ファイルの共有:
-
file-idはアカウント固有であり、アカウント間や RAM ユーザーの API キーでは使用できません。
-
-
速度制限: モデルの速度制限条件については、「Throttling」をご参照ください。