ディープシンキングモデルは、応答する前に思考することで、論理的推論や数学などの複雑なタスクの精度を向上させます。
これらの例では、OpenAI 互換の Chat Completion API と DashScope API を使用します。Responses API については、ディープシンキングをご参照ください。
使用方法
Model Studio は、2 つのモードでディープシンキングをサポートしています:
-
ハイブリッド思考モード:
enable_thinkingパラメーターを使用して、リクエストごとに思考の有効/無効を切り替えます:trueに設定すると、モデルは応答する前に推論します。falseに設定すると、モデルは推論ステップをスキップして直接応答します。
OpenAI 互換
# 依存関係をインポートし、クライアントを作成します... completion = client.chat.completions.create( model="qwen3.8-max", # モデルを選択 messages=[{"role": "user", "content": "Who are you"}], # enable_thinking は標準の OpenAI パラメーターではないため、extra_body で渡します。 extra_body={"enable_thinking":True}, # ストリーミング出力を有効にします。 stream=True, # 最後のデータパケットにトークン消費情報を含めるようにストリームを構成します。 stream_options={ "include_usage": True } )DashScope
Qwen3.5 シリーズの DashScope API は、マルチモーダルインターフェイスを使用します。次の例では、
url errorが返されます。正しい使用方法については、「思考モードを有効または無効にする」をご参照ください。# 依存関係をインポートします... response = MultiModalConversation.call( # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください。例:api_key = "sk-xxx" api_key=os.getenv("DASHSCOPE_API_KEY"), # 必要に応じて他のディープシンキングモデルを使用できます。 model="qwen3.8-max", messages=messages, enable_thinking=True, stream=True, incremental_output=True ) -
思考のみモード: モデルは応答する前に常に推論します。この動作は無効にできません。リクエストフォーマットはハイブリッド思考モードと同じで、
enable_thinkingパラメーターは必要ありません。
API は、reasoning_content フィールドに思考プロセスを、content フィールドに回答を返します。思考プロセスはレイテンシーを追加するため、すべての例ではデフォルトでストリーミングを使用します (リアルタイムで思考プロセスを確認できるため、推奨されます)。商用思考モデルは、非ストリーミング (同期) 出力もサポートしています。使用方法と注意事項については、以下の[よくある質問]をご参照ください。一部のモデル (オープンソースの qwen3-235b-a22b や qwen3-32b など) はストリーミングのみをサポートしており、非ストリーミングの呼び出しはエラーを返します。
サポート対象モデル
Qwen3.8
Qwen3.8 Max シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-max
Qwen3.8 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-flash
Qwen3.8 オープンソースシリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-2.4t-a95b
Qwen3.7
Qwen3.7 Max シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-max, qwen3.7-max-us, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08
Qwen3.7 Max シリーズ (思考専用モード):qwen3.7-max-preview, qwen3.7-max-2026-05-17
Qwen3.7 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-plus, qwen3.7-plus-us, qwen3.7-plus-2026-05-26
Qwen3.7 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-flash, qwen3.7-flash-2026-07-15
Qwen3.6
Qwen3.6 Max シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.6-max-preview
Qwen3.6 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.6-plus, qwen3.6-plus-2026-04-02
Qwen3.6 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.6-flash, qwen3.6-flash-2026-04-16
オープンソース Qwen3.6:qwen3.6-35b-a3b
Qwen3.5
-
商用
- Qwen3.5 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.5-plus, qwen3.5-plus-2026-02-15
- Qwen3.5 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.5-flash, qwen3.5-flash-2026-02-23
-
オープンソース
- ハイブリッド思考モード、デフォルトで思考が有効:qwen3.5-397b-a17b, qwen3.5-122b-a10b, qwen3.5-27b, qwen3.5-35b-a3b
Qwen3
-
商用
- Qwen Max シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen3-max, qwen3-max-2026-01-23, qwen3-max-preview
- Qwen Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen-plus, qwen-plus-latest, qwen-plus-2025-04-28 およびそれ以降のスナップショットバージョン
- Qwen Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen-flash, qwen-flash-2025-07-28 およびそれ以降のスナップショットバージョン
- Qwen Turbo シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen-turbo およびそれ以降のスナップショットバージョン
-
オープンソース
- ハイブリッド思考モード、デフォルトで思考が有効:qwen3-235b-a22b, qwen3-32b, qwen3-30b-a3b, qwen3-14b, qwen3-8b
- 思考専用モード:qwen3-next-80b-a3b-thinking, qwen3-235b-a22b-thinking-2507, qwen3-30b-a3b-thinking-2507
QwQ (Qwen2.5 ベース)
思考専用モード:qwq-plus
DeepSeek
-
Alibaba Cloud Model Studio にデプロイ
- ハイブリッド思考モード、デフォルトで思考が無効:deepseek-v4-pro, deepseek-v4-flash, deepseek-v3.2, deepseek-v3.2-exp, deepseek-v3.1
- 思考専用モード:deepseek-r1, deepseek-r1-0528, deepseek-r1 蒸留モデル
-
SiliconFlow にデプロイ
- ハイブリッド思考モード、デフォルトで思考が無効:siliconflow/deepseek-v3.2, siliconflow/deepseek-v3.1-terminus
- 思考専用モード:siliconflow/deepseek-r1-0528
-
Kuaishou Vanchin にデプロイ
- ハイブリッド思考モード、デフォルトで思考が無効:vanchin/deepseek-v3.2-think, vanchin/deepseek-v3.1-terminus
- 思考専用モード:vanchin/deepseek-r1
GLM
ハイブリッド思考モード、デフォルトで思考が有効:glm-5.2, glm-5.2-us, glm-5.2-fast-preview, glm-5.1, glm-5, glm-4.7, glm-4.6, glm-4.5, glm-4.5-air
Kimi
-
Alibaba Cloud Model Studio にデプロイ
- ハイブリッド思考モード、デフォルトで思考が無効:kimi-k2.6, kimi-k2.5
- 思考専用モード:kimi-k2.7-code, kimi-k2-thinking
-
Moonshot AI にデプロイ
- ハイブリッド思考モード、デフォルトで思考が有効:kimi/kimi-k2.6, kimi/kimi-k2.5
- 思考専用モード: kimi/kimi-k2.7-code-highspeed, kimi/kimi-k2.7-code
MiniMax
-
Alibaba Cloud Model Studio にデプロイ
- 思考専用モード:MiniMax-M2.5, MiniMax-M2.1
モデル名、コンテキストウィンドウ、料金、スナップショットバージョンについては、「モデルリスト」をご参照ください。レート制限については、「レート制限」で説明されています。
はじめに
API キーを取得し、環境変数として設定します。SDK を使用する場合は、OpenAI または DashScope SDK をインストールしてください (DashScope Java SDK バージョン 2.19.4 以降が必要です)。
次の例では、ストリーミング出力を使用して思考モードで qwen3.8-max を呼び出します。
OpenAI 互換
Python
サンプルコード
from openai import OpenAI
import os
# OpenAI クライアントを初期化します。
client = OpenAI(
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 環境変数が設定されていない場合は、Model Studio API キーを直接指定してください:api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 構成はリージョンによって異なります。ご利用のリージョンに基づいて base_url を変更してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
messages = [{"role": "user", "content": "Who are you"}]
completion = client.chat.completions.create(
model="qwen3.8-max", # 必要に応じて、他のディープシンキングモデルに置き換えることができます。
messages=messages,
extra_body={"enable_thinking": True},
stream=True,
stream_options={
"include_usage": True
},
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全なレスポンス
is_answering = False # レスポンスフェーズが開始したかどうかを追跡します
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
if not chunk.choices:
print("\n使用量:")
print(chunk.usage)
continue
delta = chunk.choices[0].delta
# 思考コンテンツのみを収集します。
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# コンテンツが受信されたら、応答を開始します。
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
レスポンス
====================思考プロセス====================
ユーザーのクエリ「あなたは誰ですか?」には、正確でフレンドリーな応答が必要です。回答では、まず私が Alibaba Cloud の Tongyi Lab によって開発された Qwen であるというアイデンティティを確立します。次に、質疑応答、テキスト生成、論理的推論などの主要な機能を概説します。言語はシンプルで、親しみやすいトーンでなければなりません。対話を促すために、ユーザーにさらに質問するように促します。最後に、私の名前 (Qwen) と開発者を含むすべての重要な詳細が存在することを確認し、包括的な回答を提供します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを生成したり、論理的推論を行ったり、コードを書いたりするなど、高品質な情報とサービスを提供できます。Qwen と呼んでください。何かお手伝いできることはありますか?
Node.js
サンプルコード
import OpenAI from "openai";
import process from 'process';
// OpenAI クライアントを初期化します。
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // 環境変数から読み取ります。
// 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用する場合は、ベース URL を https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/compatible-mode/v1 に変更してください。ベース URL はリージョンによって異なります。デプロイメントのリージョンに合わせて更新してください。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
async function main() {
try {
const messages = [{ role: 'user', content: 'Who are you' }];
const stream = await openai.chat.completions.create({
model: 'qwen-plus',
messages,
stream: true,
enable_thinking: true
});
console.log('\n' + '='.repeat(20) + '思考プロセス' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\n使用量:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// 思考コンテンツのみを収集します。
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) {
process.stdout.write(delta.reasoning_content);
}
reasoningContent += delta.reasoning_content;
}
// コンテンツが受信されたら、応答を開始します。
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + '完全なレスポンス' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('エラー:', error);
}
}
main();
レスポンス
====================思考プロセス====================
ユーザーの直接的なクエリ「あなたは誰ですか?」には、簡潔で明確な応答が必要です。回答では、私のアイデンティティが Alibaba Cloud の大規模言語モデルである Qwen であることを述べます。質疑応答、テキスト生成、論理的推論などの主要な機能に言及し、多言語サポート (中国語、英語) を強調します。簡潔さを保つため、ユースケースについては、もし言及するとしても簡潔に触れます。トーンはフレンドリーにし、応答はさらなる質問を促す形で締めくくります。最後に、バージョン番号などの不要な詳細を含まずに正確性を確認します。
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。質疑応答、テキスト生成、論理的推論、コーディングなど、さまざまなタスクを実行でき、中国語や英語を含む複数の言語をサポートしています。ご質問やお手伝いが必要な場合は、いつでもお気軽にお尋ねください!
HTTP
サンプルコード
curl
# ======= 重要 =======
# 以下の URL はシンガポールリージョン用です。中国 (北京) リージョンの場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# 米国 (バージニア) リージョンの場合は、https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": "Who are you"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_thinking": true
}'
レスポンス
data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
.....
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":10,"completion_tokens":360,"total_tokens":370},"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
data: [DONE]
DashScope
Qwen3.5 シリーズの DashScope API はマルチモーダルインターフェイスを使用しているため、次の例では
url errorが返されます。 正しい使用方法については、「思考モードを有効または無効にする」をご参照ください。
Python
サンプルコード
import os
from dashscope import MultiModalConversation
import dashscope
# 構成はリージョンによって異なります。ご利用のリージョンに基づいてこの値を変更してください。
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
# リクエストパラメーターを初期化します
messages = [{"role": "user", "content": [{"text": "Who are you?"}]}]
completion = MultiModalConversation.call(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
stream=True,
incremental_output=True,
)
# 完全な思考プロセス
reasoning_content = ""
# 完全なレスポンス
answer_content = ""
# レスポンスフェーズが開始したかどうかを追跡します。
is_answering = False
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in completion:
# 思考コンテンツとレスポンスコンテンツの両方が空の場合、チャンクを無視します。
content = chunk.output.choices[0].message.content
reasoning = chunk.output.choices[0].message.reasoning_content
if not content and reasoning == "":
pass
else:
# 現在のチャンクが思考プロセスの一部である場合。
if reasoning != "" and not content:
print(reasoning, end="", flush=True)
reasoning_content += reasoning
# 現在のチャンクがレスポンスの一部である場合。
elif content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20)
is_answering = True
print(content[0]["text"], end="", flush=True)
answer_content += content[0]["text"]
# 完全な思考プロセスと完全なレスポンスを印刷するには、次のコードのコメントを解除してください。
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
# print(f"{answer_content}")
レスポンス
====================思考プロセス====================
クエリ「あなたは誰ですか?」に答えるには、レスポンスで私のアイデンティティが Alibaba Cloud の大規模言語モデルである Qwen であることを述べる必要があります。次に、質疑応答、テキスト生成、論理的推論などの主要な機能を概説することで、役立つアシスタントとしての私の目的を説明します。レスポンスは、専門用語を避け、会話的なトーンを維持します。さらなるエンゲージメントを促すために、自由形式の質問で締めくくります。最後に、フレンドリーでプロフェッショナルなトーンのバランスを取りながら、明確さ、簡潔さを確認します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Cloud によって開発された大規模言語モデルです。私は質問に答えたり、テキストを生成したり、論理的推論を行ったり、コードを書いたりするなど、ヘルプとサポートを提供できます。日常生活に関する質問でも、専門的なトピックに関する質問でも、最善を尽くしてお手伝いします。何かお手伝いできることはありますか?
Java
サンプルコード
// DashScope SDK のバージョンは 2.19.4 以降である必要があります。
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下の base_url はシンガポールリージョン用です。バージニアリージョンのモデルを使用する場合は、base_url を https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/api/v1 に変更する必要があります。
// 構成はリージョンによって異なります。実際のリージョンに基づいて構成を変更してください。
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleMultiModalConversationResult(MultiModalConversationResult message) {
String reasoning = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
List<Map<String, Object>> contentList = (List<Map<String, Object>>) message.getOutput().getChoices().get(0).getMessage().getContent();
String content = (contentList != null && !contentList.isEmpty()) ? (String) contentList.get(0).get("text") : "";
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (!content.isEmpty()) {
finalContent.append(content);
if (!isFirstPrint) {
System.out.println("\n====================完全なレスポンス====================");
isFirstPrint = true;
}
System.out.print(content);
}
}
private static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage userMsg) {
return MultiModalConversationParam.builder()
// API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
// 環境変数を設定していない場合は、次の行を Alibaba Cloud Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.enableThinking(true)
.incrementalOutput(true)
.messages(Arrays.asList(userMsg))
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage userMsg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(userMsg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> handleMultiModalConversationResult(message));
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("text", "Who are you?"))).build();
streamCallWithMessage(conv, userMsg);
// 最終結果を印刷します。
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全なレスポンス====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | InputRequiredException | UploadFileException e) {
logger.error("An exception occurred: {}", e.getMessage());
}
System.exit(0);
}
}
レスポンス
====================思考プロセス====================
「あなたは誰ですか?」という質問への応答は、Alibaba Cloud の大規模言語モデルである Qwen という私の事前定義されたアイデンティティに基づいている必要があります。回答は会話的で、簡潔で、理解しやすいものにします。まず私のアイデンティティを述べ、次にテキスト作成、論理的推論、コーディング、多言語サポートなどの機能を説明します。トーンはフレンドリーにし、応答はユーザーに助けを求めるように促す形で締めくくり、さらなる対話を促します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Group の大規模言語モデルです。私は質問に答えたり、物語、公式文書、メール、スクリプトなどのテキストを作成したり、論理的推論を行ったり、コードを書いたり、意見を述べたり、さらにはゲームをしたりすることもできます。私は中国語、英語、ドイツ語、フランス語、スペイン語など、複数の言語に堪能です。何かお手伝いできることはありますか?
HTTP
サンプルコード
curl
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# 以下はシンガポールリージョンの URL です。中国 (北京) リージョンの場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# 米国 (バージニア) リージョンの場合は、URL を https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [{"text": "Who are you?"}]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true,
"result_format": "message"
}
}'
レスポンス
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"Hmm","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":14,"input_tokens":11,"output_tokens":3},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":",","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":15,"input_tokens":11,"output_tokens":4},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:3
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"user","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":16,"input_tokens":11,"output_tokens":5},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:4
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"asks","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":17,"input_tokens":11,"output_tokens":6},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:5
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"“","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":18,"input_tokens":11,"output_tokens":7},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
......
id:358
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"help","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":373,"input_tokens":11,"output_tokens":362},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:359
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":",","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":374,"input_tokens":11,"output_tokens":363},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:360
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"Please feel free","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":375,"input_tokens":11,"output_tokens":364},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:361
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"to","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":376,"input_tokens":11,"output_tokens":365},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:362
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"let me know","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":377,"input_tokens":11,"output_tokens":366},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:363
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"!","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":378,"input_tokens":11,"output_tokens":367},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:364
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":378,"input_tokens":11,"output_tokens":367},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
コア機能
思考モードと非思考モードの切り替え
思考モードは応答の品質を向上させますが、レイテンシーとコストが増加します。ハイブリッド思考モデルでは、クエリの複雑さに応じてリクエストごとに切り替えます:
- 日常会話、簡単な Q&A といった単純なクエリの場合は、
enable_thinkingをfalseに設定します。 - 論理問題、コード生成、数学などの複雑な推論には、
enable_thinkingをtrueに設定します。
OpenAI 互換
重要enable_thinking は、OpenAI の標準パラメーターではありません。OpenAI Python SDK では、extra_body 経由で渡します。Node.js SDK では、トップレベルパラメーターとして渡します。
Python
サンプルコード
from openai import OpenAI
import os
# OpenAI クライアントを初期化します。
client = OpenAI(
# 環境変数が設定されていない場合は、値を Model Studio API キーに置き換えてください:api_key="sk-xxx"
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下の URL はシンガポールリージョン用です。呼び出す際に、WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
messages = [{"role": "user", "content": "Who are you?"}]
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=messages,
# extra_body で enable_thinking を設定して、思考プロセスを有効にします。
extra_body={"enable_thinking": True},
stream=True,
stream_options={
"include_usage": True
},
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全なレスポンス
is_answering = False # レスポンスフェーズが開始したかどうかを示します
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
if not chunk.choices:
print("\n" + "=" * 20 + "トークン使用量" + "=" * 20 + "\n")
print(chunk.usage)
continue
delta = chunk.choices[0].delta
# 思考コンテンツのみを収集します。
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# コンテンツが受信されたら、レスポンスを開始します。
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
レスポンス
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを判断する必要があります。彼らは初めて私と対話しているか、私のアイデンティティを確認したいのかもしれません。私は Tongyi Lab によって開発された Qwen として自己紹介すべきです。次に、質疑応答、テキスト作成、コーディングなどの私の能力を説明し、ユーザーが私がどのように役立つかを理解できるようにします。また、国際的なユーザーが異なる言語でコミュニケーションできることを知るために、私の多言語サポートについても言及すべきです。最後に、フレンドリーなトーンを保ち、さらなる対話を促すために質問するように誘います。説明は明確でシンプルで、専門用語を避ける必要があります。ユーザーは私の能力の簡単な概要を求めている可能性が高いので、私の機能とアプリケーションに焦点を当てます。また、Alibaba Group やより技術的な詳細など、情報が欠けていないかどうかも考慮すべきです。しかし、ユーザーはおそらく基本的な情報しか必要としていません。私は応答がフレンドリーでプロフェッショナルであり、会話を続けることを奨励するようにします。
====================完全なレスポンス====================
私は Qwen、Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを作成したり、コーディングしたり、意見を述べたりするのを手伝うことができます。私は複数の言語でのコミュニケーションをサポートしています。何かお手伝いできることはありますか?
====================トークン使用量====================
CompletionUsage(completion_tokens=221, prompt_tokens=10, total_tokens=231, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=None, audio_tokens=None, reasoning_tokens=172, rejected_prediction_tokens=None), prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0))
Node.js
サンプルコード
import OpenAI from "openai";
import process from 'process';
// OpenAI クライアントを初期化します。
const openai = new OpenAI({
// 環境変数が設定されていない場合は、値を Model Studio API キーに置き換えてください:apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// 構成はリージョンによって異なります。実際のリージョンに基づいてこれを変更してください。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = ''; // 完全な思考プロセス
let answerContent = ''; // 完全なレスポンス
let isAnswering = false; // レスポンスフェーズが開始したかどうかを示します
async function main() {
try {
const messages = [{ role: 'user', content: 'Who are you?' }];
const stream = await openai.chat.completions.create({
model: 'qwen-plus',
messages,
// Node.js SDK では、enable_thinking などの非標準パラメーターはトップレベルのプロパティとして渡され、extra_body には不要です。
enable_thinking: true,
stream: true,
stream_options: {
include_usage: true
},
});
console.log('\n' + '='.repeat(20) + '思考プロセス' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\n' + '='.repeat(20) + 'トークン使用量' + '='.repeat(20) + '\n');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// 思考コンテンツのみを収集します。
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) {
process.stdout.write(delta.reasoning_content);
}
reasoningContent += delta.reasoning_content;
}
// コンテンツが受信されたら、レスポンスを開始します。
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + '完全なレスポンス' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('エラー:', error);
}
}
main();
レスポンス
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを判断する必要があります。彼らは初めて私と対話しているか、私のアイデンティティを確認したいのかもしれません。私は Qwen として自己紹介し、私の英語名も Qwen であることを言及すべきです。次に、私は Alibaba Group の Tongyi Lab によって独自に開発された大規模言語モデルであることを述べます。次に、質疑応答、テキスト作成、コーディング、意見表明などの私の能力をリストアップし、ユーザーが私の目的を理解できるようにします。また、国際的なユーザーにとって役立つ多言語サポートについても言及すべきです。最後に、フレンドリーでオープンな態度で質問するように誘います。私はシンプルで理解しやすい言語を使用し、過度な専門用語を避ける必要があります。ユーザーは助けが必要か、単に好奇心旺盛かもしれないので、応答は歓迎的で、さらなる対話を促すものであるべきです。また、ユーザーが私の能力をテストしたり、特定の助けを求めたりするなど、より深いニーズを持っているかどうかも考慮すべきですが、最初の応答は基本的な情報とガイダンスに焦点を当てます。私は会話的なトーンを保ち、効果的なコミュニケーションのために簡単な文を使用します。
====================完全なレスポンス====================
こんにちは!私は Qwen です。私は Alibaba Group の Tongyi Lab によって独自に開発された大規模言語モデルです。私は質問に答えたり、物語、公式文書、メール、スクリプトなどのテキストを作成したり、論理的推論を行ったり、コーディングしたり、さらには意見を述べたりゲームをしたりするのを手伝うことができます。私は中国語、英語、ドイツ語、フランス語、スペイン語など、複数の言語をサポートしています。
ご質問やお手伝いが必要な場合は、お気軽にお尋ねください!
====================トークン使用量====================
{
prompt_tokens: 10,
completion_tokens: 288,
total_tokens: 298,
completion_tokens_details: { reasoning_tokens: 188 },
prompt_tokens_details: { cached_tokens: 0 }
}
HTTP
サンプルコード
curl
# ======= 重要 =======
# API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# base_url はリージョンによって異なります。詳細については、https://www.alibabacloud.com/help/model-studio/regions/ をご参照ください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": "Who are you?"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_thinking": true
}'
DashScope
Qwen3.5 シリーズの DashScope API は、マルチモーダルインターフェイスを使用します。以下の例では
url errorが返されます。詳細については、「思考モードを有効または無効にする」をご参照ください。
Python
サンプルコード
import os
from dashscope import MultiModalConversation
import dashscope
# 構成はリージョンによって異なります。必要に応じてこれを変更してください。
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/"
# リクエストパラメーターを初期化します。
messages = [{"role": "user", "content": [{"text": "Who are you?"}]}]
completion = MultiModalConversation.call(
# 環境変数を設定していない場合は、これを Model Studio API キーに置き換えてください:api_key="sk-xxx"
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/regions をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max",
messages=messages,
enable_thinking=True, # 思考プロセスを有効にします。
stream=True, # ストリーミング出力を有効にします。
incremental_output=True, # 増分出力を有効にします。
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全なレスポンス
is_answering = False # モデルが回答フェーズにあるかどうかを示します。
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
message = chunk.output.choices[0].message
# 思考コンテンツのみを収集します。
if message.reasoning_content:
if not is_answering:
print(message.reasoning_content, end="", flush=True)
reasoning_content += message.reasoning_content
# コンテンツが受信されたら、レスポンスの構築を開始します。
if message.content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
is_answering = True
print(message.content[0]["text"], end="", flush=True)
answer_content += message.content[0]["text"]
print("\n" + "=" * 20 + "トークン使用量" + "=" * 20 + "\n")
print(chunk.usage)
# ループの後、reasoning_content および answer_content 変数には完全なコンテンツが含まれます。
# 必要に応じて、ここで後続の処理を実行できます。
# print(f"\n\n完全な思考プロセス:\n{reasoning_content}")
# print(f"\n完全なレスポンス:\n{answer_content}")
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを把握する必要があります。彼らは私に慣れていないか、単に私のアイデンティティを確認したいのかもしれません。まず、私は Qwen として自己紹介し、Tongyi Lab の大規模言語モデルであることを述べるべきです。次に、質疑応答、テキスト作成、コーディングなどの私の能力を説明し、ユーザーが私に何ができるかを知るようにします。また、国際的なユーザーのために私の多言語サポートについても言及すべきです。最後に、私はフレンドリーで、対話を促すためにさらに質問するように誘います。専門用語を避け、簡単な言葉を使うことが重要です。ユーザーは、私の能力をテストしたり、助けを得たりするなど、他のニーズを持っているかもしれませんが、物語、公式文書、メールの作成などの具体的な例を提供すると役立ちます。また、応答がよく構成されていることを確認する必要があります。私の機能をリストアップすることもできますが、箇条書きよりも自然な流れの方が良いかもしれません。また、誤解を避けるために、私は個人的な意識を持たない AI アシスタントであり、私の回答はトレーニングデータに基づいていることを明確にする必要があります。マルチモーダル機能や最近の更新など、重要な詳細を見逃していないか確認すべきですが、最初の応答で詳細すぎる必要はないでしょう。要するに、回答は包括的でありながら簡潔で、フレンドリーで役立つものであり、ユーザーが理解され、サポートされていると感じられるようにする必要があります。
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は以下のことでお手伝いできます:
1. **質疑応答**:学術的、一般的な知識、またはドメイン固有の質問にお答えしようとします。
2. **テキスト作成**:物語、公式文書、メール、スクリプトなどの作成をお手伝いします。
3. **論理的推論**:論理的推論と問題解決をお手伝いします。
4. **プログラミング**:さまざまなプログラミング言語のコードを理解し、生成できます。
5. **多言語サポート**:中国語、英語、ドイツ語、フランス語、スペイン語など、複数の言語をサポートしています。
ご質問やお手伝いが必要な場合は、お気軽にお知らせください!
====================トークン使用量====================
{"input_tokens": 11, "output_tokens": 405, "total_tokens": 416, "output_tokens_details": {"reasoning_tokens": 256}, "prompt_tokens_details": {"cached_tokens": 0}}
Java
サンプルコード
// DashScope SDK v2.19.4 以降が必要です。
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import java.lang.System;
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
static {
// ベース HTTP API URL はリージョンによって異なります。ご利用のリージョンに応じて変更してください。
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleMultiModalConversationResult(MultiModalConversationResult message) {
String reasoning = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
List<Map<String, Object>> contentList = (List<Map<String, Object>>) message.getOutput().getChoices().get(0).getMessage().getContent();
String content = (contentList != null && !contentList.isEmpty()) ? (String) contentList.get(0).get("text") : "";
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (!content.isEmpty()) {
finalContent.append(content);
if (!isFirstPrint) {
System.out.println("\n====================完全なレスポンス====================");
isFirstPrint = true;
}
System.out.print(content);
}
}
private static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage userMsg) {
return MultiModalConversationParam.builder()
// 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.enableThinking(true)
.incrementalOutput(true)
.messages(Arrays.asList(userMsg))
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage userMsg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(userMsg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> handleMultiModalConversationResult(message));
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("text", "Who are you?"))).build();
streamCallWithMessage(conv, userMsg);
// 最終結果を印刷します。
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全なレスポンス====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | InputRequiredException | UploadFileException e) {
logger.error("An exception occurred: {}", e.getMessage());
}
System.exit(0);
}
}
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを把握する必要があります。彼らは私のアイデンティティを知りたいのか、単に私の応答をテストしているだけかもしれません。まず、私は Alibaba Group の大規模言語モデルである Qwen であることを明確に述べるべきです。次に、質疑応答、テキスト作成、コーディングなどの私の能力を簡単に紹介し、ユーザーが私に何ができるかを理解できるようにします。また、国際的なユーザーが異なる言語で私とコミュニケーションできることを知るために、私が複数の言語をサポートしていることにも言及すべきです。最後に、私はフレンドリーで、彼らが快適に感じ、さらに交流したいと思うように質問するように誘います。回答は長すぎず、包括的であるべきです。ユーザーは私の技術的な詳細やユースケースについてフォローアップの質問をするかもしれませんが、最初の回答はシンプルで明確であるべきです。すべてのユーザーが理解できるように、専門用語を使わないようにします。多言語サポートや私の機能の具体例など、重要な情報を見逃していないか確認します。よし、これでユーザーのニーズはカバーできるはずです。
====================完全なレスポンス====================
私は Qwen、Alibaba Group の大規模言語モデルです。私は質問に答えたり、テキスト (物語、公式文書、メール、スクリプトなど) を作成したり、論理的推論を行ったり、コーディングしたり、意見を述べたり、ゲームをしたりすることができます。また、中国語、英語、ドイツ語、フランス語、スペイン語など、多言語でのコミュニケーションもサポートしています。ご質問やお手伝いが必要な場合は、お気軽にお知らせください!
HTTP
サンプルコード
curl
# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
# base_url はリージョンによって異なります。必要に応じて変更してください。
# === 実行前にこのコメントを削除してください ===
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [{"text": "Who are you?"}]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true,
"result_format": "message"
}
}'
レスポンス
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"Hmm","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":14,"input_tokens":11,"output_tokens":3},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":",","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":15,"input_tokens":11,"output_tokens":4},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:3
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"user","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":16,"input_tokens":11,"output_tokens":5},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:4
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":" asks","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":17,"input_tokens":11,"output_tokens":6},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:5
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":" \"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":18,"input_tokens":11,"output_tokens":7},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
......
id:358
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"help","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":373,"input_tokens":11,"output_tokens":362},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:359
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":",","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":374,"input_tokens":11,"output_tokens":363},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:360
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":" feel free","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":375,"input_tokens":11,"output_tokens":364},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:361
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":" to","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":376,"input_tokens":11,"output_tokens":365},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:362
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":" let me know","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":377,"input_tokens":11,"output_tokens":366},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:363
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"!","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":378,"input_tokens":11,"output_tokens":367},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
id:364
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":378,"input_tokens":11,"output_tokens":367},"request_id":"25d58c29-c47b-9e8d-a0f1-d6c309ec58b1"}
Qwen3 オープンソースハイブリッド思考モデル、および qwen-plus-2025-04-28 などのモデルでは、プロンプトのサフィックスを使用して思考モードをコントロールすることもできます。enable_thinking が true の場合、プロンプトに /no_think を追加してそのターンの思考をスキップするか、/think を追加して再度有効にします。モデルは、常に最新の /think または /no_think の命令に従います。
思考の長さの制限
推論トレースは、レイテンシーとトークンコストを増加させます。 thinking_budget を使用して、推論トークンに上限を設定します。 上限に達すると、モデルは推論を停止し、直ちにレスポンスします。 これは Qwen3.8、Qwen3.7、Qwen3.6、Qwen3.5、Qwen3-VL、Qwen3、GLM および Kimi モデルに適用されます。
thinking_budget のデフォルトは、モデルの Chain-of-Thought の最大長です。各モデルのデフォルトは、コンソールページでご確認ください。
コンソールでディープシンキングを体験
- Model Studio コンソールにログインします。
- 左側のナビゲーションウィンドウで、[プレイグラウンド] > [テキストモデル] を選択して、モデル体験センターを開きます。
- デフォルトでは Qwen3.7-Max モデルが表示されます。モデル名をクリックして、ドロップダウンリストから別の Qwen3 シリーズモデルを選択することもできます。
- 入力ボックスの下部にある [ディープシンキング] ボタンをクリックして、思考モードを有効にし、モデルの思考プロセスを表示します。
- [モデルのデバッグ] タブに切り替えます。構成パネルで、
thinking_budgetパラメーターを設定して、思考の連鎖で出力されるトークンの最大数を制御します。有効値は 1〜32768 で、デフォルト値は 4000 です。その他のモデルについては、Model Studio モデルマーケットプレイスに移動します。
OpenAI 互換
Python
サンプルコード
from openai import OpenAI
import os
# OpenAI クライアントを初期化します。
client = OpenAI(
# 環境変数が設定されていない場合は、「sk-xxx」を Model Studio API キーに置き換えてください。
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 構成はリージョンによって異なります。ご利用のリージョンに応じて base_url を変更してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
messages = [{"role": "user", "content": "Who are you"}]
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=messages,
# enable_thinking パラメーターは思考プロセスを有効にし、thinking_budget はそのトークン制限を設定します。
extra_body={
"enable_thinking": True,
"thinking_budget": 50
},
stream=True,
stream_options={
"include_usage": True
},
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全なレスポンス
is_answering = False # レスポンスフェーズが開始したかどうかを追跡します
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
if not chunk.choices:
print("\n使用量:")
print(chunk.usage)
continue
delta = chunk.choices[0].delta
# 思考コンテンツのみを収集します。
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# コンテンツが受信されると、レスポンスフェーズが始まります。
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。明確でフレンドリーな応答を提供する必要があります。まず、Alibaba Group の Tongyi Lab によって開発された Qwen として私のアイデンティティを述べるべきです。次に、質問に答えるなどの私の主な機能を説明する必要があります
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを作成したり、論理的推論を行ったり、コードを書いたりすることができます。
Node.js
サンプルコード
import OpenAI from "openai";
import process from 'process';
// OpenAI クライアントを初期化します。
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // 環境変数から読み取ります。
// 構成はリージョンによって異なります。ご利用のリージョンに応じて baseURL を変更してください。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
async function main() {
try {
const messages = [{ role: 'user', content: 'Who are you' }];
const stream = await openai.chat.completions.create({
model: 'qwen-plus',
messages,
stream: true,
// enable_thinking パラメーターは思考プロセスを有効にし、thinking_budget はそのトークン制限を設定します。
enable_thinking: true,
thinking_budget: 50
});
console.log('\n' + '='.repeat(20) + '思考プロセス' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\n使用量:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// 思考コンテンツのみを収集します。
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) {
process.stdout.write(delta.reasoning_content);
}
reasoningContent += delta.reasoning_content;
}
// コンテンツが受信されると、レスポンスフェーズが始まります。
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + '完全なレスポンス' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('エラー:', error);
}
}
main();
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。明確で正確な応答を提供する必要があります。まず、Alibaba Group の Tongyi Lab によって開発された Qwen として私のアイデンティティを述べるべきです。次に、質問に答えるなどの私の主な機能を説明する必要があります
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを作成したり、論理的推論を行ったり、コードを書いたりすることができます。
HTTP
サンプルコード
curl
# ======= 重要 =======
# 以下はシンガポールリージョンのベース URL です。中国 (北京) リージョンのモデルの場合は、URL を https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# 米国 (バージニア) リージョンのモデルの場合は、URL を https://{WorkspaceId}.us-east-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": "Who are you"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_thinking": true,
"thinking_budget": 50
}'
レスポンス
data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
.....
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":10,"completion_tokens":360,"total_tokens":370},"created":1745485391,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-e2edaf2c-8aaf-9e54-90e2-b21dd5045503"}
data: [DONE]
DashScope
Qwen3.5 シリーズの DashScope API は、マルチモーダルインターフェイスを使用します。以下の例では
url errorが返されます。正しい使用方法については、「思考モードを有効化または無効化する」をご参照ください。
Python
サンプルコード
import os
from dashscope import MultiModalConversation
import dashscope
# 以下の URL はシンガポールリージョン用です。呼び出す際に、WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/"
messages = [{"role": "user", "content": [{"text": "Who are you?"}]}]
completion = MultiModalConversation.call(
# 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
# 思考プロセスのトークン制限を設定します。
thinking_budget=50,
stream=True,
incremental_output=True,
)
# 完全な思考プロセスを保存します。
reasoning_content = ""
# 完全なレスポンスを保存します。
answer_content = ""
# レスポンスフェーズが開始したかどうかを追跡します。
is_answering = False
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in completion:
# 思考コンテンツとレスポンスコンテンツの両方が空のチャンクは無視します。
content = chunk.output.choices[0].message.content
reasoning = chunk.output.choices[0].message.reasoning_content
if not content and reasoning == "":
pass
else:
# 現在のチャンクに思考コンテンツが含まれている場合。
if reasoning != "" and not content:
print(reasoning, end="", flush=True)
reasoning_content += reasoning
# 現在のチャンクにレスポンスコンテンツが含まれている場合。
elif content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20)
is_answering = True
print(content[0]["text"], end="", flush=True)
answer_content += content[0]["text"]
# 完全な思考プロセスとレスポンスを印刷するには、次のコードのコメントを解除して実行してください。
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
# print(f"{answer_content}")
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。明確でフレンドリーな応答を提供する必要があります。まず、Alibaba Group の Tongyi Lab によって開発された Qwen として自己紹介する必要があります。次に、私の主な機能を説明する必要があります
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを作成したり、論理的推論を行ったり、コードを書いたりすることができます。
Java
サンプルコード
// DashScope SDK のバージョンは 2.19.4 以降である必要があります。
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.exception.UploadFileException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// ベース HTTP API URL はリージョンによって異なります。ご利用のリージョンに応じて変更してください。
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleMultiModalConversationResult(MultiModalConversationResult message) {
String reasoning = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
List<Map<String, Object>> contentList = (List<Map<String, Object>>) message.getOutput().getChoices().get(0).getMessage().getContent();
String content = (contentList != null && !contentList.isEmpty()) ? (String) contentList.get(0).get("text") : "";
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (!content.isEmpty()) {
finalContent.append(content);
if (!isFirstPrint) {
System.out.println("\n====================完全なレスポンス====================");
isFirstPrint = true;
}
System.out.print(content);
}
}
private static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage userMsg) {
return MultiModalConversationParam.builder()
// 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.enableThinking(true)
.thinkingBudget(50)
.incrementalOutput(true)
.messages(Arrays.asList(userMsg))
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage userMsg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(userMsg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> handleMultiModalConversationResult(message));
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder().role(Role.USER.getValue()).content(Arrays.asList(Collections.singletonMap("text", "Who are you?"))).build();
streamCallWithMessage(conv, userMsg);
// 最終結果を印刷します。
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全なレスポンス====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | InputRequiredException | UploadFileException e) {
logger.error("An exception occurred: {}", e.getMessage());
}
System.exit(0);
}
}
レスポンス
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。明確でフレンドリーな応答を提供する必要があります。まず、Alibaba Group の Tongyi Lab によって開発された Qwen として自己紹介する必要があります。次に、私の主な機能を説明する必要があります
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを作成したり、論理的推論を行ったり、コードを書いたりすることができます。
HTTP
サンプルコード
curl
# ======= 重要 =======
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください。
# エンドポイント URL はリージョンによって異なります。ご利用のリージョンに応じて変更してください。
# === 実行前にこのコメントを削除してください ===
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [{"text": "Who are you?"}]
}
]
},
"parameters":{
"enable_thinking": true,
"thinking_budget": 50,
"incremental_output": true,
"result_format": "message"
}
}'
レスポンス
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"Okay","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":14,"output_tokens":3,"input_tokens":11,"output_tokens_details":{"reasoning_tokens":1}},"request_id":"2ce91085-3602-9c32-9c8b-fe3d583a2c38"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":",","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":15,"output_tokens":4,"input_tokens":11,"output_tokens_details":{"reasoning_tokens":2}},"request_id":"2ce91085-3602-9c32-9c8b-fe3d583a2c38"}
......
id:133
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"!","reasoning_content":"","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":149,"output_tokens":138,"input_tokens":11,"output_tokens_details":{"reasoning_tokens":50}},"request_id":"2ce91085-3602-9c32-9c8b-fe3d583a2c38"}
id:134
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":149,"output_tokens":138,"input_tokens":11,"output_tokens_details":{"reasoning_tokens":50}},"request_id":"2ce91085-3602-9c32-9c8b-fe3d583a2c38"}
思考プロセスの引き渡し
デフォルトでは、モデルは messages 履歴内の reasoning_content を無視します。 以前の推論を後続のターンに引き継ぐには、preserve_thinking を true に設定します。 そうすると、以前のアシスタントメッセージの reasoning_content がモデルの入力に追加されます。
重要preserve_thinking パラメーターは、qwen3.8-max、qwen3.8-flash、qwen3.7-max、qwen3.7-max-us、qwen3.7-max-2026-05-20、qwen3.7-max-2026-06-08、qwen3.7-max-preview、qwen3.7-max-2026-05-17、qwen3.7-plus、qwen3.7-plus-us、qwen3.7-plus-2026-05-26、qwen3.6-max-preview、qwen3.6-plus、qwen3.6-plus-2026-04-02、qwen3.7-flash、qwen3.7-flash-2026-07-15、kimi-k2.7-code (Alibaba Cloud Model Studio でデプロイ)、kimi-k2.6 (Alibaba Cloud Model Studio でデプロイ)、kimi/kimi-k3 (Moonshot AI でデプロイ)、kimi/kimi-k2.7-code-highspeed (Moonshot AI でデプロイ)、kimi/kimi-k2.7-code (Moonshot AI でデプロイ)、および kimi/kimi-k2.6 (Moonshot AI でデプロイ) でのみサポートされています。
履歴メッセージに
reasoning_contentが含まれていない場合、このパラメーターを有効にしてもエラーは発生しません。
有効にした場合、会話履歴の
reasoning_contentは入力トークンとしてカウントされ、課金の対象となります。
OpenAI 互換
注記preserve_thinking は、標準の OpenAI パラメーターではありません。Python SDK を使用する場合、このパラメーターを extra_body で渡します。
Python
サンプルコード
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 構成はリージョンによって異なります。実際のリージョンに基づいてこれを変更してください。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# 会話の最初のターン
messages = [
{"role": "user", "content": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"}
]
first_reasoning = ""
first_content = ""
is_answering = False
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=messages,
extra_body={"enable_thinking": True},
stream=True,
stream_options={"include_usage": True},
)
print("=" * 20 + "最初のターンの思考プロセス" + "=" * 20)
for chunk in completion:
if not chunk.choices:
continue
delta = chunk.choices[0].delta
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
first_reasoning += delta.reasoning_content
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "最初のターンのレスポンス" + "=" * 20)
is_answering = True
print(delta.content, end="", flush=True)
first_content += delta.content
# 2番目のターン:思考プロセスを渡し、モデルが Kafka を除外した理由を尋ねる
messages = [
{"role": "user", "content": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"},
{
"role": "assistant",
"content": first_content,
"reasoning_content": first_reasoning,
},
{"role": "user", "content": "比較で Kafka を除外したのはなぜですか?"},
]
reasoning_content = ""
answer_content = ""
is_answering = False
# extra_body を介して preserve_thinking を渡す
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=messages,
extra_body={
"enable_thinking": True,
"preserve_thinking": True,
},
stream=True,
stream_options={"include_usage": True},
)
print("\n" + "=" * 20 + "2番目のターンの思考プロセス" + "=" * 20)
for chunk in completion:
if not chunk.choices:
continue
delta = chunk.choices[0].delta
if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
if hasattr(delta, "content") and delta.content:
if not is_answering:
print("\n" + "=" * 20 + "2番目のターンのレスポンス" + "=" * 20)
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
レスポンス
====================最初のターンの思考プロセス====================
ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。スループット、信頼性、遅延メッセージ、トランザクションサポートなどのディメンションに基づいて、主流のソリューションを比較します...
RocketMQ:Alibaba の E コマースシナリオで検証済みで、トランザクションメッセージと遅延メッセージをネイティブにサポートし、厳密なパーティションレベルの順序付けを提供します...
Kafka:非常に高いスループットですが、トランザクションメッセージと遅延メッセージのネイティブサポートがなく、カスタムの補償メカニズムが必要です...
RabbitMQ:低レイテンシーですが、クラスタースケーラビリティが限られており、ピーク TPS は数万です...
====================最初のターンのレスポンス====================
E コマースシナリオのコアニーズ (トランザクションメッセージ、遅延メッセージ、順序付け、ピーク処理) を考慮すると、Apache RocketMQ を推奨します。チームがすでに Kafka エコシステムを持っているか、強力なリアルタイム分析が必要な場合は、Kafka も実行可能なオプションです。
====================2番目のターンの思考プロセス====================
ユーザーは Kafka が除外された理由を尋ねています。私の過去の思考プロセスを確認すると、Kafka を除外していませんでした。4つ星の評価を付けました。以前の詳細な比較を参照して説明します...
最後のターンで、トランザクションメッセージ、遅延メッセージ、順序付けに関する RocketMQ と Kafka の違いを比較しました。Kafka の主な欠点は、E コマース固有のセマンティクスを補うために追加のアーキテクチャ設計が必要なことです...
====================2番目のターンのレスポンス====================
Kafka を除外したわけではありません。Kafka はスループットとエコシステムに優れています。RocketMQ がわずかに高い評価を受けた理由は、コアな E コマースワークフローにすぐに使える適合性が優れているためです。RocketMQ はトランザクションメッセージと遅延メッセージをネイティブにサポートしていますが、Kafka は Outbox パターンなどのアーキテクチャパターンを介して自己実装する必要があります。チームがすでに Kafka エコシステムを持っている場合、数千万件のメッセージを処理するシナリオに完全に対応できます。
Node.js
サンプルコード
import OpenAI from "openai";
import process from 'process';
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
// 構成はリージョンによって異なります。実際のリージョンに基づいてこれを変更してください。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1'
});
async function main() {
// 会話の最初のターン
let firstReasoning = '';
let firstContent = '';
let isAnswering = false;
const stream1 = await openai.chat.completions.create({
model: 'qwen3.7-plus',
messages: [{ role: 'user', content: '1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。' }],
stream: true,
enable_thinking: true
});
console.log('='.repeat(20) + '最初のターンの思考プロセス' + '='.repeat(20));
for await (const chunk of stream1) {
if (!chunk.choices?.length) continue;
const delta = chunk.choices[0].delta;
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
firstReasoning += delta.reasoning_content;
if (!isAnswering) process.stdout.write(delta.reasoning_content);
}
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + '最初のターンのレスポンス' + '='.repeat(20));
isAnswering = true;
}
process.stdout.write(delta.content);
firstContent += delta.content;
}
}
// 2番目のターン:思考プロセスを渡す
let reasoningContent = '';
let answerContent = '';
isAnswering = false;
const stream2 = await openai.chat.completions.create({
model: 'qwen3.7-plus',
messages: [
{ role: 'user', content: '1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。' },
{
role: 'assistant',
content: firstContent,
reasoning_content: firstReasoning
},
{ role: 'user', content: '比較で Kafka を除外したのはなぜですか?' }
],
stream: true,
enable_thinking: true,
// preserve_thinking をトップレベルのパラメーターとして渡す
preserve_thinking: true
});
console.log('\n' + '='.repeat(20) + '2番目のターンの思考プロセス' + '='.repeat(20));
for await (const chunk of stream2) {
if (!chunk.choices?.length) continue;
const delta = chunk.choices[0].delta;
if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
if (!isAnswering) process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
if (delta.content !== undefined && delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + '2番目のターンのレスポンス' + '='.repeat(20));
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
}
main();
レスポンス
====================最初のターンの思考プロセス====================
ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。スループット、信頼性、遅延メッセージ、トランザクションサポートなどのディメンションに基づいて、主流のソリューションを比較します...
====================最初のターンのレスポンス====================
E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。チームがすでに Kafka エコシステムを持っている場合、Kafka も実行可能なオプションです。
====================2番目のターンの思考プロセス====================
ユーザーは Kafka が除外された理由を尋ねています。私の以前の思考プロセスを参照すると、Kafka を除外していませんでした...
====================2番目のターンのレスポンス====================
Kafka を除外したわけではありません。Kafka はスループットとエコシステムに優れています。RocketMQ がわずかに高い評価を受けた理由は、コアな E コマースワークフローにすぐに使える適合性が優れているためです。
HTTP
サンプルコード
curl
# base_url はリージョンによって異なります。実際のリージョンに基づいて変更してください。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"
},
{
"role": "assistant",
"content": "E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。",
"reasoning_content": "ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。RocketMQ はトランザクションメッセージと遅延メッセージをネイティブにサポートしており、E コマースシナリオにより適しています。Kafka は非常に高いスループットを持っていますが、カスタムの補償メカニズムが必要です。"
},
{
"role": "user",
"content": "比較で Kafka を除外したのはなぜですか?"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_thinking": true,
"preserve_thinking": true
}'
レスポンス
data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1743523200,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-example-001"}
.....
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1743523200,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-example-001"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":3463,"completion_tokens":2387,"total_tokens":5850},"created":1743523200,"system_fingerprint":null,"model":"qwen3.8-max","id":"chatcmpl-example-001"}
data: [DONE]
DashScope
注記Java SDK は現在、preserve_thinking パラメーターをサポートしていません。HTTP 呼び出しを行う際は、preserve_thinking パラメーターを parameters オブジェクトに配置してください。
Python
サンプルコード
import os
from dashscope import MultiModalConversation
import dashscope
# 以下の URL はシンガポールリージョン用です。呼び出す際に、WorkspaceId を実際のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/"
# 会話の最初のターン
messages = [
{"role": "user", "content": [{"text": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"}]}
]
first_reasoning = ""
first_content = ""
is_answering = False
completion = MultiModalConversation.call(
# 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
stream=True,
incremental_output=True,
)
print("=" * 20 + "最初のターンの思考プロセス" + "=" * 20)
for chunk in completion:
content = chunk.output.choices[0].message.content
reasoning = chunk.output.choices[0].message.reasoning_content
if not content and reasoning == "":
pass
else:
if reasoning != "" and not content:
print(reasoning, end="", flush=True)
first_reasoning += reasoning
elif content:
if not is_answering:
print("\n" + "=" * 20 + "最初のターンのレスポンス" + "=" * 20)
is_answering = True
print(content[0]["text"], end="", flush=True)
first_content += content[0]["text"]
# 2番目のターン:思考プロセスを渡す
messages = [
{"role": "user", "content": [{"text": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"}]},
{
"role": "assistant",
"content": [{"text": first_content}],
"reasoning_content": first_reasoning,
},
{"role": "user", "content": [{"text": "比較で Kafka を除外したのはなぜですか?"}]},
]
reasoning_content = ""
answer_content = ""
is_answering = False
completion = MultiModalConversation.call(
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
# 思考プロセスを渡す
preserve_thinking=True,
stream=True,
incremental_output=True,
)
print("\n" + "=" * 20 + "2番目のターンの思考プロセス" + "=" * 20)
for chunk in completion:
content = chunk.output.choices[0].message.content
reasoning = chunk.output.choices[0].message.reasoning_content
if not content and reasoning == "":
pass
else:
if reasoning != "" and not content:
print(reasoning, end="", flush=True)
reasoning_content += reasoning
elif content:
if not is_answering:
print("\n" + "=" * 20 + "2番目のターンのレスポンス" + "=" * 20)
is_answering = True
print(content[0]["text"], end="", flush=True)
answer_content += content[0]["text"]
): print(chunk.output.choices[0].message.reasoning_content, end="", flush=True) reasoning_content += chunk.output.choices[0].message.reasoning_content elif chunk.output.choices[0].message.content != "": if not is_answering: print("\n" + "=" * 20 + "2番目のターンのレスポンス" + "=" * 20) is_answering = True print(chunk.output.choices[0].message.content, end="", flush=True) answer_content += chunk.output.choices[0].message.content
レスポンス
====================最初のターンの思考プロセス====================
ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。スループット、信頼性、遅延メッセージ、トランザクションサポートなどのディメンションに基づいて、主流のソリューションを比較します...
====================最初のターンのレスポンス====================
E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。チームがすでに Kafka エコシステムを持っている場合、Kafka も実行可能なオプションです。
====================2番目のターンの思考プロセス====================
ユーザーは Kafka が除外された理由を尋ねています。私の以前の思考プロセスを参照すると、Kafka を除外していませんでした...
====================2番目のターンのレスポンス====================
Kafka を除外したわけではありません。Kafka はスループットとエコシステムに優れています。RocketMQ がわずかに高い評価を受けた理由は、コアな E コマースワークフローにすぐに使える適合性が優れているためです。
HTTP
サンプルコード
curl
# base_url はリージョンによって異なります。実際のリージョンに基づいて変更してください。
curl -X POST "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [{"text": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"}]
},
{
"role": "assistant",
"content": [{"text": "E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。"}],
"reasoning_content": "ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。RocketMQ はトランザクションメッセージと遅延メッセージをネイティブにサポートしており、E コマースシナリオにより適しています。Kafka は非常に高いスループットを持っていますが、カスタムの補償メカニズムが必要です。"
},
{
"role": "user",
"content": [{"text": "比較で Kafka を除外したのはなぜですか?"}]
}
]
},
"parameters":{
"enable_thinking": true,
"preserve_thinking": true,
"incremental_output": true,
"result_format": "message"
}
}'
レスポンス
id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"user"},"role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":3466,"output_tokens":3,"input_tokens":3463,"output_tokens_details":{"reasoning_tokens":1}},"request_id":"example-request-001"}
id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"follow-up"},"role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":3467,"output_tokens":4,"input_tokens":3463,"output_tokens_details":{"reasoning_tokens":2}},"request_id":"example-request-001"}
......
id:200
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":5850,"output_tokens":2387,"input_tokens":3463,"output_tokens_details":{"reasoning_tokens":1347}},"request_id":"example-request-001"}
その他の機能
課金
-
思考コンテンツは出力トークンごとに課金されます。
-
一部のハイブリッド思考モデルでは、思考モードと非思考モードで料金が異なります。
思考モードのモデルが思考出力を生成しない場合、非思考モードの料金が適用されます。
よくある質問
Q:思考モードを無効にするにはどうすればよいですか?
これはモデルのタイプによって異なります:
- qwen-plus や deepseek-v3.2-exp などのハイブリッド思考モデルでは、
enable_thinkingをfalseに設定します。 - qwen3-235b-a22b-thinking-2507 や deepseek-r1 などの思考専用モデルの場合、思考モードは無効にできません。
Q:qwen3.7-plus の応答が遅いのはなぜですか?また、どのようにトラブルシューティングすればよいですか?
qwen3.7-plus は、デフォルトで思考モードが有効になっているハイブリッド思考モデルです。思考プロセスは大量の思考トークンを生成します (測定では総出力トークンの 60% 以上)。そのため、1 回の呼び出しの合計レイテンシーは非思考モードよりもはるかに高くなります。トークン生成速度自体は正常で、約 52~54 トークン/秒です。合計レイテンシーが長くなるのは、モデルの速度が遅いことやネットワーク障害が原因ではなく、思考プロセスが生成するトークンの数によるものです。
レイテンシーをトラブルシューティングするには、次の手順に従ってください:
- 思考モードが有効になっているか確認してください。qwen3.7-plus では、デフォルトで有効になっています。応答で
reasoning_contentフィールドが返される場合、思考モードはアクティブです。 - 応答の使用量統計で
completion_tokensとreasoning_tokensを確認してください。reasoning_tokensの割合が高い場合、合計レイテンシーが長いのは思考モードで想定される動作です。 - 推論プロセスが不要な場合は、リクエストで
enable_thinkingをfalseに設定し、思考モードを無効にします。これにより、出力トークンが大幅に削減され、測定では合計レイテンシーが 60% から 75% 低下します。 - 思考機能を維持したい場合は、ストリーミング出力を使用します。最初のトークンをより早く受け取り、完全な応答を待つ代わりにリアルタイムで思考を監視できます。
使用状況統計には、思考トークンの生成に費やされた時間を含む、1 回の呼び出しの合計レイテンシーが表示されます。これは、個々のトークンの生成レイテンシーではありません。
Q:思考モデルを非ストリーミング (同期) モードで呼び出すにはどうすればよいですか?
このトピックの例では、デフォルトでストリーミングを使用しています (リアルタイムで思考を監視でき、長い待ち時間を回避できるため推奨)。商用の思考モデル (qwen-plus、qwen3-max、qwen-flash など) は、非ストリーミング (同期) 出力もサポートしており、完全な思考と回答を 1 つの応答で返します。
ストリーミングの例を非ストリーミングに切り替える場合は、[応答解析コード] も更新してください。非ストリーミングの呼び出しは、完全な応答オブジェクト (
completion) を返します。ストリーミングの例のようにfor chunk in completionを使用してイテレートしないでください'tuple' object has no attribute 'choices'というエラーが発生します)。代わりに、completion.choices[0].message.reasoning_content(推論) とcompletion.choices[0].message.content(回答) を直接読み取ってください。また、stream=Falseの場合は、stream_optionsパラメーターを設定しないでください。
次の例では、OpenAI 互換インターフェイスを使用して、ストリーミングなしで思考モードで qwen3.8-max を呼び出します:
from openai import OpenAI
import os
client = OpenAI(
# API キーはリージョンによって異なります。API キーを取得する:https://www.alibabacloud.com/help/model-studio/get-api-key
# 環境変数が設定されていない場合は、以下の行を Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下はシンガポールリージョンの構成です。WorkspaceId を実際のワークスペース ID に置き換えてください。構成はリージョンによって異なります。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max", # 非ストリーミング出力をサポートする思考モデルに置き換えてください
messages=[{"role": "user", "content": "Who are you?"}],
extra_body={"enable_thinking": True},
stream=False, # 非ストリーミング (同期) 出力。stream=False の場合、stream_options を設定しないでください
)
# 非ストリーミング呼び出しは完全なレスポンスオブジェクトを返します。メッセージを直接読み取ります。反復処理はしないでください。
message = completion.choices[0].message
print("=" * 20 + "思考" + "=" * 20 + "\n")
print(getattr(message, "reasoning_content", "") or "")
print("\n" + "=" * 20 + "回答" + "=" * 20 + "\n")
print(message.content)
一部のモデル (オープンソースの qwen3-235b-a22b や qwen3-32b など) は、ストリーミングのみに対応しています。非ストリーミング呼び出しはエラー
parameter.enable_thinking only support stream callを返すため、これらのモデルではストリーミングを使用してください。
Q: 無料クォータを使い切った後、トークンを購入するにはどうすればよいですか?
Q:画像やドキュメントを入力としてアップロードできますか?
これらのモデルはテキストのみを受け付けます。Qwen3-VL と QVQ は画像のディープシンキングをサポートしており。
Q:トークン消費量と呼び出し回数を表示するにはどうすればよいですか?
Q:長いプロンプトが応答を生成できない、またはタイムアウトした場合はどうすればよいですか?
長いプロンプトでの呼び出しが失敗するか、タイムアウトした場合、通常、思考モード (enable_thinking=true) が有効になります。思考モードは処理時間を増加させるため、プロンプトが長い場合に応答が切り捨てられたり、リクエストがタイムアウトしたりする可能性があります。
ソリューション:
- 思考モードを無効にする:
enable_thinkingをfalseに設定します。処理時間は約 50 秒から約 30 秒に短縮されます。 - ストリーミング出力を有効にする:
streamをtrueに設定することで、非ストリーミングモードのタイムアウト制限を回避できます。 - タイムアウトを増やす:思考モードを有効にしたままにするには、クライアントのタイムアウトを 180 秒以上に設定します。
Q:思考タグが出力された後、サードパーティクライアントが切断されます。どうすればよいですか?
これはクライアント側の問題であり、思考プロセスを公開することに関するプラットフォームの制限ではありません。Model Studio は enable_thinking パラメーターを使用して思考モードを切り替え、応答の reasoning_content フィールドには完全な思考プロセスが含まれているため、モデルは期待どおりに思考コンテンツを返します。接続の切断は、通常、不安定なクライアントのネットワーク条件またはクライアントバージョンの互換性の問題が原因で発生します。
トラブルシューティング手順:
- クライアントのネットワーク接続の安定性を確認します。
- クライアントを最新バージョンにアップグレードします。
- クライアントのログを確認して、切断のタイムスタンプと思考タグの出力を関連付けます。
DashScope API を介してモデルを直接呼び出して、思考機能が期待どおりに機能することを確認することもできます。
API リファレンス
入力および応答パラメーターについては、「テキスト生成」をご参照ください。
エラーコード
呼び出しが失敗した場合は、「エラーコード」をご参照ください。
