ディープシンキングモデルは、応答する前に思考することで、論理的推論や数学などの複雑なタスクの精度を向上させます。
これらの例では、OpenAI 互換の Chat Completion API と DashScope API を使用します。Responses API については、ディープシンキングをご参照ください。モデルスタジオコンソールの体験センターでモデルを開き、ディープシンキングを有効にすると、思考プロセスを直接確認できます。
使用方法
Model Studio は、2 つのモードでディープシンキングをサポートしています:-
ハイブリッド思考モード:
enable_thinkingパラメーターを使用して、リクエストごとに思考の有効/無効を切り替えます:trueに設定すると、モデルは応答する前に推論します。falseに設定すると、モデルは推論ステップをスキップして直接応答します。
- OpenAI 互換
- DashScope
Copy# 依存関係をインポートし、クライアントを作成します... 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 } )Qwen3.5 シリーズの DashScope API は、マルチモーダルインターフェイスを使用します。次の例では、
url errorが返されます。正しい使用方法については、「思考モードを有効または無効にする」をご参照ください。Copy# 依存関係をインポートし、クライアントを作成します... response = client.multimodal.chat.create( # 必要に応じて他のディープシンキングモデルを使用できます。 model="qwen3.8-max", messages=messages, enable_thinking=True, stream=True, # ストリーミング出力はデフォルトでインクリメンタルモードです。各データチャンクには新しく生成されたコンテンツのみが含まれます。 ) -
思考のみモード: モデルは応答する前に常に推論します。この動作は無効にできません。リクエストフォーマットはハイブリッド思考モードと同じで、
enable_thinkingパラメーターは必要ありません。
reasoning_content フィールドに思考プロセスを、content フィールドに回答を返します。思考プロセスはレイテンシーを追加するため、すべての例ではデフォルトでストリーミングを使用します (リアルタイムで思考プロセスを確認できるため、推奨されます)。商用思考モデルは、非ストリーミング (同期) 出力もサポートしています。使用方法と注意事項については、以下の[よくある質問]をご参照ください。一部のモデル (オープンソースの qwen3.5-122b-a10b や qwen3.5-27b など) はストリーミングのみをサポートしており、非ストリーミングの呼び出しはエラーを返します。
サポート対象モデル
- Qwen4
- Qwen3.8
- Qwen3.7
- Qwen3.6
- Qwen3.5
- Qwen3
- DeepSeek
- GLM
- Kimi
- MiniMax
Qwen4-Max シリーズ (プレビュー版、ハイブリッド思考モード、デフォルトで思考が有効):qwen4-max-preview (Token Plan 限定)
Qwen3.8 Max シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-maxQwen3.8 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-flashQwen3.8 オープンソースシリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.8-2.4t-a95b
Qwen3.7 Max シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-max, qwen3.7-max-us, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08Qwen3.7 Max シリーズ (思考専用モード):qwen3.7-max-preview, qwen3.7-max-2026-05-17Qwen3.7 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-plus, qwen3.7-plus-us, qwen3.7-plus-2026-05-26Qwen3.7 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.7-flash, qwen3.7-flash-2026-07-15
Qwen3.6 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.6-plus, qwen3.6-plus-2026-04-02Qwen3.6 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.6-flash, qwen3.6-flash-2026-04-16オープンソース Qwen3.6:qwen3.6-35b-a3b
-
商用
- Qwen3.5 Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.5-plus, qwen3.5-plus-2026-02-15
- Qwen3.5 Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が有効):qwen3.5-flash, qwen3.5-flash-2026-02-23
-
商用
- Qwen Plus シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen-plus, qwen-plus-latest, qwen-plus-2025-04-28 およびそれ以降のスナップショットバージョン
- Qwen Flash シリーズ (ハイブリッド思考モード、デフォルトで思考が無効):qwen-flash, qwen-flash-2025-07-28 およびそれ以降のスナップショットバージョン
-
Alibaba Cloud Model Studio にデプロイ
deepseek-v4.1-flash-1017はディープシンキングをサポートします。- ハイブリッド思考モード、デフォルトで思考が無効:deepseek-v4-pro
- 思考専用モード: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-5.2, glm-5.2-us, glm-5.2-fast-preview, glm-5.1, glm-5
-
Alibaba Cloud Model Studio にデプロイ
- ハイブリッド思考モード、デフォルトで思考が有効:kimi-k3.1-pro
- ハイブリッド思考モード、デフォルトで思考が無効:kimi-k2.6, kimi-k2.5
- 思考専用モード:kimi-k2.7-code
-
Moonshot AI にデプロイ
- ハイブリッド思考モード、デフォルトで思考が有効:kimi/kimi-k2.6, kimi/kimi-k2.5
- 思考専用モード: kimi/kimi-k2.7-code-highspeed, kimi/kimi-k2.7-code
-
Alibaba Cloud Model Studio にデプロイ
- 思考専用モード:MiniMax-M2.5
はじめに
API キーを取得し、環境変数として設定します。SDK を使用する場合は、OpenAI または DashScope SDK をインストールしてください (DashScope Java SDK バージョン 2.19.4 以降が必要です)。 次の例では、ストリーミング出力を使用して思考モードで qwen3.8-max を呼び出します。- OpenAI 互換
- DashScope
- Python
- Node.js
- HTTP
サンプルコード
Copy
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
レスポンス
Copy
====================思考プロセス====================
ユーザーのクエリ「あなたは誰ですか?」には、正確でフレンドリーな応答が必要です。回答では、まず私が Alibaba Cloud の Tongyi Lab によって開発された Qwen であるというアイデンティティを確立します。次に、質疑応答、テキスト生成、論理的推論などの主要な機能を概説します。言語はシンプルで、親しみやすいトーンでなければなりません。対話を促すために、ユーザーにさらに質問するように促します。最後に、私の名前 (Qwen) と開発者を含むすべての重要な詳細が存在することを確認し、包括的な回答を提供します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。私は質問に答えたり、テキストを生成したり、論理的推論を行ったり、コードを書いたりするなど、高品質な情報とサービスを提供できます。Qwen と呼んでください。何かお手伝いできることはありますか?
サンプルコード
Copy
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();
レスポンス
Copy
====================思考プロセス====================
ユーザーの直接的なクエリ「あなたは誰ですか?」には、簡潔で明確な応答が必要です。回答では、私のアイデンティティが Alibaba Cloud の大規模言語モデルである Qwen であることを述べます。質疑応答、テキスト生成、論理的推論などの主要な機能に言及し、多言語サポート (中国語、英語) を強調します。簡潔さを保つため、ユースケースについては、もし言及するとしても簡潔に触れます。トーンはフレンドリーにし、応答はさらなる質問を促す形で締めくくります。最後に、バージョン番号などの不要な詳細を含まずに正確性を確認します。
====================完全なレスポンス====================
私は Qwen、Alibaba Group の Tongyi Lab によって開発された大規模言語モデルです。質疑応答、テキスト生成、論理的推論、コーディングなど、さまざまなタスクを実行でき、中国語や英語を含む複数の言語をサポートしています。ご質問やお手伝いが必要な場合は、いつでもお気軽にお尋ねください!
サンプルコード
- curl
Copy
# ======= 重要 =======
# 以下の 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
}'
レスポンス
Copy
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]
Qwen3.5 シリーズの DashScope API はマルチモーダルインターフェイスを使用しているため、次の例では url error が返されます。 正しい使用方法については、「思考モードを有効または無効にする」をご参照ください。
- Python
- Java
- HTTP
サンプルコード
Copy
import os
import dashscope
# 以下はシンガポールリージョンの設定です。呼び出し時に{WorkspaceId}を実際のビジネススペースIDに置き換えてください。リージョンごとにregionの値は異なります。
client = dashscope.Client(
# 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
# リクエストパラメーターを初期化します
messages = [{"role": "user", "content": [{"text": "Who are you?"}]}]
completion = client.multimodal.chat.create(
# 必要に応じて他のディープシンキングモデルを使用できます。
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
stream=True,
# ストリーミング出力はデフォルトでインクリメンタルモードです。各データチャンクには新しく生成されたコンテンツのみが含まれます。
)
# 完全な思考プロセスを定義します
reasoning_content = ""
# 完全なレスポンスを定義します
answer_content = ""
# 思考プロセスが終了しレスポンスが開始したかどうかを判断します
is_answering = False
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in completion:
# 現在のチャンクのコンテンツを取得します(ストリーミング出力はデフォルトでインクリメンタルモード)
content_text = chunk.choices[0].delta.content or ""
reasoning_text = chunk.choices[0].delta.reasoning_content or ""
# 思考プロセスとレスポンスの両方が空の場合、チャンクを無視します。
if content_text == "" and reasoning_text == "":
pass
else:
# 現在のチャンクが思考プロセスの一部である場合。
if reasoning_text != "" and content_text == "":
print(reasoning_text, end="", flush=True)
reasoning_content += reasoning_text
# 現在のチャンクがレスポンスの一部である場合。
elif content_text != "":
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20)
is_answering = True
print(content_text, end="", flush=True)
answer_content += content_text
# 完全な思考プロセスと完全なレスポンスを印刷するには、次のコードのコメントを解除してください。
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
# print(f"{answer_content}")
レスポンス
Copy
====================思考プロセス====================
クエリ「あなたは誰ですか?」に答えるには、レスポンスで私のアイデンティティが Alibaba Cloud の大規模言語モデルである Qwen であることを述べる必要があります。次に、質疑応答、テキスト生成、論理的推論などの主要な機能を概説することで、役立つアシスタントとしての私の目的を説明します。レスポンスは、専門用語を避け、会話的なトーンを維持します。さらなるエンゲージメントを促すために、自由形式の質問で締めくくります。最後に、フレンドリーでプロフェッショナルなトーンのバランスを取りながら、明確さ、簡潔さを確認します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Cloud によって開発された大規模言語モデルです。私は質問に答えたり、テキストを生成したり、論理的推論を行ったり、コードを書いたりするなど、ヘルプとサポートを提供できます。日常生活に関する質問でも、専門的なトピックに関する質問でも、最善を尽くしてお手伝いします。何かお手伝いできることはありますか?
サンプルコード
Copy
// 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);
}
}
レスポンス
Copy
====================思考プロセス====================
「あなたは誰ですか?」という質問への応答は、Alibaba Cloud の大規模言語モデルである Qwen という私の事前定義されたアイデンティティに基づいている必要があります。回答は会話的で、簡潔で、理解しやすいものにします。まず私のアイデンティティを述べ、次にテキスト作成、論理的推論、コーディング、多言語サポートなどの機能を説明します。トーンはフレンドリーにし、応答はユーザーに助けを求めるように促す形で締めくくり、さらなる対話を促します。
====================完全なレスポンス====================
こんにちは!私は Qwen、Alibaba Group の大規模言語モデルです。私は質問に答えたり、物語、公式文書、メール、スクリプトなどのテキストを作成したり、論理的推論を行ったり、コードを書いたり、意見を述べたり、さらにはゲームをしたりすることもできます。私は中国語、英語、ドイツ語、フランス語、スペイン語など、複数の言語に堪能です。何かお手伝いできることはありますか?
サンプルコード
- curl
Copy
# ======= 重要 =======
# 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"
}
}'
レスポンス
Copy
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 互換
- DashScope
enable_thinking は、OpenAI の標準パラメーターではありません。OpenAI Python SDK では、extra_body 経由で渡します。Node.js SDK では、トップレベルパラメーターとして渡します。- Python
- Node.js
- HTTP
サンプルコード
Copy
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
レスポンス
Copy
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを判断する必要があります。彼らは初めて私と対話しているか、私のアイデンティティを確認したいのかもしれません。私は 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))
サンプルコード
Copy
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();
レスポンス
Copy
====================思考プロセス====================
ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを判断する必要があります。彼らは初めて私と対話しているか、私のアイデンティティを確認したいのかもしれません。私は 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 }
}
サンプルコード
- curl
Copy
# ======= 重要 =======
# 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
}'
Qwen3.5 シリーズの DashScope API は、マルチモーダルインターフェイスを使用します。以下の例では url error が返されます。詳細については、「思考モードを有効または無効にする」をご参照ください。
- Python
- Java
- HTTP
サンプルコード
Copy
import os
import dashscope
# 以下はシンガポールリージョンの設定です。呼び出し時に{WorkspaceId}を実際のビジネススペースIDに置き換えてください。リージョンごとにregionの値は異なります。
client = dashscope.Client(
# 環境変数を設定していない場合は、これを Model Studio API キーに置き換えてください:api_key="sk-xxx"
# API キーはリージョン固有です。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/regions をご参照ください
api_key=os.getenv("DASHSCOPE_API_KEY"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
# リクエストパラメーターを初期化します。
messages = [{"role": "user", "content": [{"text": "Who are you?"}]}]
completion = client.multimodal.chat.create(
model="qwen3.8-max",
messages=messages,
enable_thinking=True, # 思考プロセスを有効にします。
stream=True, # ストリーミング出力を有効にします(ストリーミング出力はデフォルトでインクリメンタルモード)。
)
reasoning_content = "" # 完全な思考プロセス
answer_content = "" # 完全なレスポンス
is_answering = False # レスポンスフェーズが開始したかどうかを示します。
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
delta = chunk.choices[0].delta
# 思考コンテンツのみを収集します。
if delta.reasoning_content:
if not is_answering:
print(delta.reasoning_content, end="", flush=True)
reasoning_content += delta.reasoning_content
# コンテンツが受信されたら、レスポンスの構築を開始します。
if delta.content:
if not is_answering:
print("\n" + "=" * 20 + "完全なレスポンス" + "=" * 20 + "\n")
is_answering = True
print(delta.content, end="", flush=True)
answer_content += delta.content
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}")
レスポンス
Copy
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを把握する必要があります。彼らは私に慣れていないか、単に私のアイデンティティを確認したいのかもしれません。まず、私は 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}}
サンプルコード
Copy
// 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);
}
}
レスポンス
Copy
====================思考プロセス====================
さて、ユーザーは「あなたは誰ですか?」と尋ねています。彼らが何を知りたいのかを把握する必要があります。彼らは私のアイデンティティを知りたいのか、単に私の応答をテストしているだけかもしれません。まず、私は Alibaba Group の大規模言語モデルである Qwen であることを明確に述べるべきです。次に、質疑応答、テキスト作成、コーディングなどの私の能力を簡単に紹介し、ユーザーが私に何ができるかを理解できるようにします。また、国際的なユーザーが異なる言語で私とコミュニケーションできることを知るために、私が複数の言語をサポートしていることにも言及すべきです。最後に、私はフレンドリーで、彼らが快適に感じ、さらに交流したいと思うように質問するように誘います。回答は長すぎず、包括的であるべきです。ユーザーは私の技術的な詳細やユースケースについてフォローアップの質問をするかもしれませんが、最初の回答はシンプルで明確であるべきです。すべてのユーザーが理解できるように、専門用語を使わないようにします。多言語サポートや私の機能の具体例など、重要な情報を見逃していないか確認します。よし、これでユーザーのニーズはカバーできるはずです。
====================完全なレスポンス====================
私は Qwen、Alibaba Group の大規模言語モデルです。私は質問に答えたり、テキスト (物語、公式文書、メール、スクリプトなど) を作成したり、論理的推論を行ったり、コーディングしたり、意見を述べたり、ゲームをしたりすることができます。また、中国語、英語、ドイツ語、フランス語、スペイン語など、多言語でのコミュニケーションもサポートしています。ご質問やお手伝いが必要な場合は、お気軽にお知らせください!
サンプルコード
- curl
Copy
# ======= 重要 =======
# 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"
}
}'
レスポンス
Copy
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"}
enable_thinking が true の場合、プロンプトに /no_think を追加してそのターンの思考をスキップするか、/think を追加して再度有効にします。モデルは、常に最新の /think または /no_think の命令に従います。
思考の長さの制限
ディープシンキングモデルは推論プロセスが長くなることがあり、待ち時間の増加やトークンの消費につながります。thinking_budget パラメーターで推論プロセスの最大トークン数を設定できます。上限に達すると、モデルは直ちに回答の生成を開始します。kimi-k3.1-pro と kimi-k3 はこのパラメーターをサポートしないため、思考の長さを制限できません。
対応モデルと各モデルのデフォルト値については、Chat Completions パラメーターおよび DashScope パラメーターをご参照ください。
以下では主要なパラメーターのみを示します。完全なストリーミングの例については、クイックスタートをご参照ください。
- OpenAI 互換
- DashScope
Copy
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=messages,
# 推論プロセスの最大トークン数を設定
extra_body={"enable_thinking": True, "thinking_budget": 50},
stream=True,
)
Copy
completion = client.multimodal.chat.create(
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
# 推論プロセスの最大トークン数を設定
thinking_budget=50,
stream=True,
)
思考プロセスの引き渡し
kimi-k3.1-pro と kimi-k3 (Alibaba Cloud Model Studio にデプロイ) は、クライアントから渡された過去のreasoning_content をデフォルトで保持します。複数ターンのリクエストでは、過去の assistant メッセージとその完全な reasoning_content を渡すことを推奨します。
その他のモデルは、デフォルトでは messages 履歴内の reasoning_content を無視します。 以前の推論を後続のターンに引き継ぐには、preserve_thinking を true に設定します。 そうすると、以前のアシスタントメッセージの reasoning_content がモデルの入力に追加されます。
対応モデルと各モデルのデフォルト値については、Chat Completions パラメーターおよび DashScope パラメーターをご参照ください。
履歴メッセージに reasoning_content が含まれていない場合、このパラメーターを有効にしてもエラーは発生しません。
有効にした場合、会話履歴の reasoning_content は入力トークンとしてカウントされ、課金の対象となります。
- OpenAI 互換
- DashScope
preserve_thinking は、標準の OpenAI パラメーターではありません。Python SDK を使用する場合、このパラメーターを extra_body で渡します。- Python
- Node.js
- HTTP
サンプルコード
Copy
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
レスポンス
Copy
====================最初のターンの思考プロセス====================
ユーザーは、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 エコシステムを持っている場合、数千万件のメッセージを処理するシナリオに完全に対応できます。
サンプルコード
Copy
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();
レスポンス
Copy
====================最初のターンの思考プロセス====================
ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。スループット、信頼性、遅延メッセージ、トランザクションサポートなどのディメンションに基づいて、主流のソリューションを比較します...
====================最初のターンのレスポンス====================
E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。チームがすでに Kafka エコシステムを持っている場合、Kafka も実行可能なオプションです。
====================2番目のターンの思考プロセス====================
ユーザーは Kafka が除外された理由を尋ねています。私の以前の思考プロセスを参照すると、Kafka を除外していませんでした...
====================2番目のターンのレスポンス====================
Kafka を除外したわけではありません。Kafka はスループットとエコシステムに優れています。RocketMQ がわずかに高い評価を受けた理由は、コアな E コマースワークフローにすぐに使える適合性が優れているためです。
サンプルコード
- curl
Copy
# 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
}'
レスポンス
Copy
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]
Java SDK は現在、
preserve_thinking パラメーターをサポートしていません。HTTP 呼び出しを行う際は、preserve_thinking パラメーターを parameters オブジェクトに配置してください。- Python
- HTTP
サンプルコード
Copy
import os
import dashscope
# 以下はシンガポールリージョンの設定です。呼び出し時に{WorkspaceId}を実際のビジネススペースIDに置き換えてください。リージョンごとにregionの値は異なります。
client = dashscope.Client(
# 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えてください:api_key = "sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
workspace="{WorkspaceId}",
region="ap-southeast-1",
)
# 会話の最初のターン
messages = [
{"role": "user", "content": [{"text": "1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを選択する必要があります。推奨事項を教えてください。"}]}
]
first_reasoning = ""
first_content = ""
is_answering = False
completion = client.multimodal.chat.create(
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
stream=True,
# ストリーミング出力はデフォルトでインクリメンタルモードです。各データチャンクには新しく生成されたコンテンツのみが含まれます。
)
print("=" * 20 + "最初のターンの思考プロセス" + "=" * 20)
for chunk in completion:
# 現在のチャンクのコンテンツを取得します(ストリーミング出力はデフォルトでインクリメンタルモード)
content_text = chunk.choices[0].delta.content or ""
reasoning_text = chunk.choices[0].delta.reasoning_content or ""
if content_text == "" and reasoning_text == "":
pass
else:
if reasoning_text != "" and content_text == "":
print(reasoning_text, end="", flush=True)
first_reasoning += reasoning_text
elif content_text != "":
if not is_answering:
print("\n" + "=" * 20 + "最初のターンのレスポンス" + "=" * 20)
is_answering = True
print(content_text, end="", flush=True)
first_content += content_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 = client.multimodal.chat.create(
model="qwen3.8-max",
messages=messages,
enable_thinking=True,
# 思考プロセスを渡します(preserve_thinking は SDK の署名パラメーターではないため、parameters で渡します)
parameters={"preserve_thinking": True},
stream=True,
# ストリーミング出力はデフォルトでインクリメンタルモードです。各データチャンクには新しく生成されたコンテンツのみが含まれます。
)
print("\n" + "=" * 20 + "2番目のターンの思考プロセス" + "=" * 20)
for chunk in completion:
# 現在のチャンクのコンテンツを取得します(ストリーミング出力はデフォルトでインクリメンタルモード)
content_text = chunk.choices[0].delta.content or ""
reasoning_text = chunk.choices[0].delta.reasoning_content or ""
if content_text == "" and reasoning_text == "":
pass
else:
if reasoning_text != "" and content_text == "":
print(reasoning_text, end="", flush=True)
reasoning_content += reasoning_text
elif content_text != "":
if not is_answering:
print("\n" + "=" * 20 + "2番目のターンのレスポンス" + "=" * 20)
is_answering = True
print(content_text, end="", flush=True)
answer_content += content_text
レスポンス
Copy
====================最初のターンの思考プロセス====================
ユーザーは、1日に数千万件のメッセージを処理する E コマースシステム用のメッセージキューを必要としています。スループット、信頼性、遅延メッセージ、トランザクションサポートなどのディメンションに基づいて、主流のソリューションを比較します...
====================最初のターンのレスポンス====================
E コマースシナリオのコアニーズを考慮すると、Apache RocketMQ を推奨します。チームがすでに Kafka エコシステムを持っている場合、Kafka も実行可能なオプションです。
====================2番目のターンの思考プロセス====================
ユーザーは Kafka が除外された理由を尋ねています。私の以前の思考プロセスを参照すると、Kafka を除外していませんでした...
====================2番目のターンのレスポンス====================
Kafka を除外したわけではありません。Kafka はスループットとエコシステムに優れています。RocketMQ がわずかに高い評価を受けた理由は、コアな E コマースワークフローにすぐに使える適合性が優れているためです。
サンプルコード
- curl
Copy
# 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"
}
}'
レスポンス
Copy
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:思考モードを無効にするにはどうすればよいですか?
Q:思考モードを無効にするにはどうすればよいですか?
これはモデルのタイプによって異なります:
- qwen-plus や deepseek-v4-pro などのハイブリッド思考モデルでは、
enable_thinkingをfalseに設定します。 - glm-5.3 や kimi-k2.7-code などの思考専用モデルの場合、思考モードは無効にできません。
- kimi-k3.1-pro と kimi-k3 はデフォルトで思考が有効です。
enable_thinking=falseで無効にできますが、有効のままにすることを推奨します。kimi-k3.1-pro では、思考を無効にすると出力品質が大幅に低下するため、有効のままにすることを強く推奨します。
Q:qwen3.7-plus の応答が遅いのはなぜですか?また、どのようにトラブルシューティングすればよいですか?
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:思考モデルを非ストリーミング (同期) モードで呼び出すにはどうすればよいですか?
Q:思考モデルを非ストリーミング (同期) モードで呼び出すにはどうすればよいですか?
このトピックの例では、デフォルトでストリーミングを使用しています (リアルタイムで思考を監視でき、長い待ち時間を回避できるため推奨)。商用の思考モデル (qwen-plus, qwen-flash など) は、非ストリーミング (同期) 出力もサポートしており、完全な思考と回答を 1 つの応答で返します。
ストリーミングの例を非ストリーミングに切り替える場合は、[応答解析コード] も更新してください。非ストリーミングの呼び出しは、完全な応答オブジェクト (次の例では、OpenAI 互換インターフェイスを使用して、ストリーミングなしで思考モードで qwen3.8-max を呼び出します: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パラメーターを設定しないでください。
Copy
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.5-122b-a10b や qwen3.5-27b など) は、ストリーミングのみに対応しています。非ストリーミング呼び出しはエラー parameter.enable_thinking only support stream call を返すため、これらのモデルではストリーミングを使用してください。
Q: 無料クォータを使い切った後、トークンを購入するにはどうすればよいですか?
Q: 無料クォータを使い切った後、トークンを購入するにはどうすればよいですか?
Q:画像やドキュメントを入力としてアップロードできますか?
Q:画像やドキュメントを入力としてアップロードできますか?
これらのモデルはテキストのみを受け付けます。Qwen3-VL と QVQ は画像のディープシンキングをサポートしており。
Q:トークン消費量と呼び出し回数を表示するにはどうすればよいですか?
Q:トークン消費量と呼び出し回数を表示するにはどうすればよいですか?
Q:長いプロンプトが応答を生成できない、またはタイムアウトした場合はどうすればよいですか?
Q:長いプロンプトが応答を生成できない、またはタイムアウトした場合はどうすればよいですか?
長いプロンプトでの呼び出しが失敗するか、タイムアウトした場合、通常、思考モード (
enable_thinking=true) が有効になります。思考モードは処理時間を増加させるため、プロンプトが長い場合に応答が切り捨てられたり、リクエストがタイムアウトしたりする可能性があります。ソリューション:- 思考モードを無効にする:
enable_thinkingをfalseに設定します。処理時間は約 50 秒から約 30 秒に短縮されます。 - ストリーミング出力を有効にする:
streamをtrueに設定することで、非ストリーミングモードのタイムアウト制限を回避できます。 - タイムアウトを増やす:思考モードを有効にしたままにするには、クライアントのタイムアウトを 180 秒以上に設定します。
Q:思考タグが出力された後、サードパーティクライアントが切断されます。どうすればよいですか?
Q:思考タグが出力された後、サードパーティクライアントが切断されます。どうすればよいですか?
これはクライアント側の問題であり、思考プロセスを公開することに関するプラットフォームの制限ではありません。Model Studio は
enable_thinking パラメーターを使用して思考モードを切り替え、応答の reasoning_content フィールドには完全な思考プロセスが含まれているため、モデルは期待どおりに思考コンテンツを返します。接続の切断は、通常、不安定なクライアントのネットワーク条件またはクライアントバージョンの互換性の問題が原因で発生します。トラブルシューティング手順:- クライアントのネットワーク接続の安定性を確認します。
- クライアントを最新バージョンにアップグレードします。
- クライアントのログを確認して、切断のタイムスタンプと思考タグの出力を関連付けます。
