視覚的推論モデルは、最終的な回答を提供する前に、その思考プロセスを出力します。数学の問題を解く、チャートデータを分析する、複雑な動画を理解するなど、複雑な視覚分析タスクに適しています。
例
上記のコンポーネントはデモンストレーションのみを目的としており、実際のリクエストは送信しません。
適用範囲
サポートされているリージョン
サポートされているモデル
-
Qwen3.5
-
ハイブリッド思考モデル: qwen3.5-plus、qwen3.5-plus-2026-02-15、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-VL
-
ハイブリッド思考モデル: qwen3-vl-plus、qwen3-vl-plus-2025-12-19、qwen3-vl-plus-2025-09-23、qwen3-vl-flash、qwen3-vl-flash-2025-10-15
-
思考専用モデル: qwen3-vl-235b-a22b-thinking、qwen3-vl-32b-thinking、qwen3-vl-30b-a3b-thinking、qwen3-vl-8b-thinking
-
-
QVQ
思考専用モデル: qvq-max シリーズ、qvq-plus シリーズ
-
Kimi
ハイブリッド思考モデル: kimi-k2.5
利用ガイド
-
思考プロセス:Alibaba Cloud Model Studio は、ハイブリッド型と推論専用型の両方を含む視覚的推論モデルを提供します。
-
ハイブリッド思考モデル:
enable_thinkingパラメーターを使用して、思考モードを制御できます:-
このパラメーターを
trueに設定すると、思考を有効化できます。モデルはまず思考プロセスを出力し、その後で最終応答を生成します。qwen3.5-plusシリーズのデフォルト値はtrueです。 -
このパラメーターを
falseに設定すると、思考機能が無効化されます。モデルは応答を直接生成します。qwen3-vl-plusおよびqwen3-vl-flashシリーズのデフォルト値はfalseです。
-
-
思考専用モデル:これらのモデルは、応答する前に常に思考プロセスを生成し、この動作を無効にすることはできません。
-
-
出力方法:視覚的推論モデルには詳細な思考プロセスが含まれます。長い応答によるタイムアウトを避けるために、ストリーミング出力を使用できます。
-
Qwen3.5、Qwen3-VL、および kimi-k2.5 は、ストリーミングと非ストリーミングの両方のメソッドをサポートしています。
-
QVQ シリーズはストリーミング出力のみをサポートしています。
-
-
システムプロンプトの推奨事項:
-
シングルターンまたは単純な会話の場合:
System Messageを設定しないでください。最適な推論結果を得るには、ロールの定義や出力フォーマットなどの指示をUser Messageを通じて渡すことができます。 -
複雑なアプリケーション(例:エージェントの構築やツール呼び出し)の場合:モデルのロール、機能、および動作フレームワークを定義するために、
System Messageを使用できます。これにより、安定性および信頼性を確保します。
-
はじめに
前提条件
-
SDK を使用している場合は、最新バージョンの SDK をインストールします。DashScope Python SDK はバージョン 1.24.6 以降、DashScope Java SDK はバージョン 2.21.10 以降である必要があります。
以下の例では、qvq-max モデルを呼び出してイメージから数学の問題を解く方法を示します。ストリーミング出力を使用して、思考プロセスと最終的な応答を個別に出力します。
OpenAI 互換
Python
from openai import OpenAI
import os
# OpenAI クライアントを初期化します
client = OpenAI(
# API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
# 環境変数を設定していない場合は、お使いの Model Studio API キーに置き換えてください:api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY"),
# シンガポールリージョンのベース URL。北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # 完全な思考プロセスを定義します
answer_content = "" # 完全な応答を定義します
is_answering = False # 思考プロセスが終了し、応答が開始されたかどうかを確認します
# チャット補完リクエストを作成します
completion = client.chat.completions.create(
model="qvq-max", # この例では qvq-max を使用しています。必要に応じて他のモデル名に置き換えてください。
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "この問題の解き方を教えてください。"},
],
},
],
stream=True,
# 最後のチャンクでトークン使用量を返すには、次のコメントを解除します
# stream_options={
# "include_usage": True
# }
)
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
# chunk.choices が空の場合は、使用量を出力します
if not chunk.choices:
print("\n使用量:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# 思考プロセスを出力します
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# 応答を開始します
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20 + "\n")
is_answering = True
# 応答プロセスを出力します
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(answer_content)
Node.js
import OpenAI from "openai";
import process from 'process';
// OpenAI クライアントを初期化します
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // 環境変数から読み取ります。API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
// シンガポールリージョンのベース URL。北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "この問題を解いてください" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qvq-max',
messages: messages,
stream: 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) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// 正式な応答を処理します
else if (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();
HTTP
# ======= 重要 =======
# 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qvq-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "この問題を解いてください"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true}
}'
DashScope
DashScope 経由で QVQ モデルを呼び出す場合:
-
incremental_outputパラメーターのデフォルト値はtrueであり、falseに設定することはできません。増分ストリーミングのみがサポートされています。 -
result_formatパラメーターのデフォルト値は"message"であり、"text"に設定することはできません。
Python
import os
import dashscope
from dashscope import MultiModalConversation
# 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題の解き方を教えてください。"}
]
}
]
response = MultiModalConversation.call(
# API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
# 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qvq-max", # この例では qvq-max を使用しています。必要に応じて他のモデル名に置き換えてください。
messages=messages,
stream=True,
)
# 完全な思考プロセスを定義します
reasoning_content = ""
# 完全な応答を定義します
answer_content = ""
# 思考プロセスが終了し、応答が開始されたかどうかを確認します
is_answering = False
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in response:
# 思考プロセスと応答の両方が空の場合は無視します
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# 現在が思考プロセスの場合
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# 現在が応答の場合
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# 完全な思考プロセスと応答を出力するには、次のコードのコメントを解除して実行します
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(f"{answer_content}")
Java
// DashScope SDK バージョン >= 2.19.0
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
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.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
Constants.baseHttpApiUrl="https://dashscope-intl.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 handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // デフォルト値
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================完全な応答====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return MultiModalConversationParam.builder()
// API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
// 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// この例では qvq-max を使用しています。必要に応じて他のモデル名に置き換えてください。
.model("qvq-max")
.messages(Arrays.asList(Msg))
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(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("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "この問題を解いてください")))
.build();
streamCallWithMessage(conv, userMsg);
// 最終結果を出力します
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全な応答====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("例外が発生しました:{}", e.getMessage());
}
System.exit(0);
}
}
HTTP
curl
# ======= 重要 =======
# 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# API キーはリージョンによって異なります。https://bailian.console.alibabacloud.com/?tab=model#/api-key で取得してください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope-intl.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": "qvq-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題を解いてください"}
]
}
]
}
}'
コア機能
思考プロセスの有効化または無効化
問題解決やレポート分析など、詳細な推論を必要とするシナリオでは、enable_thinking パラメーターを使用して思考モードを有効にできます。以下の例では、思考モードを有効にする方法を示します。
enable_thinking パラメーターは、qwen3.5-plus、qwen3-vl-plus、qwen3-vl-flash、および kimi-k2.5 シリーズでサポートされています。qwen3.5-plus シリーズはデフォルトで思考が有効になっており、enable_thinking は true に設定されています。
OpenAI 互換
enable_thinking および thinking_budget パラメーターは、標準でない OpenAI パラメーターです。これらのパラメーターの指定方法は、SDK の言語によって異なります。
-
Python SDK:
extra_body辞書を介して渡すことができます。 -
Node.js SDK: トップレベルのパラメーターとして直接渡すことができます。
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1 を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # 完全な思考プロセスを定義します
answer_content = "" # 完全な応答を定義します
is_answering = False # 思考プロセスが終了し、応答が開始されたかどうかを確認します
enable_thinking = True
# チャット補完リクエストを作成します
completion = client.chat.completions.create(
model="qwen3.5-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "この問題の解き方を教えてください。"},
],
},
],
stream=True,
# enable_thinking パラメーターは思考プロセスを有効にします。thinking_budget パラメーターは推論プロセスの最大トークン数を設定します。
# qwen3.5-plus、qwen3-vl-plus、および qwen3-vl-flash の場合、enable_thinking を使用して思考を有効または無効にできます (qwen3.5-plus はデフォルトで有効)。qwen3-vl-235b-a22b-thinking のような 'thinking' サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
extra_body={
'enable_thinking': enable_thinking
},
# 最後のチャンクでトークン使用量を返すには、次のコメントを解除します
# stream_options={
# "include_usage": True
# }
)
if enable_thinking:
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
# chunk.choices が空の場合は、使用量を出力します
if not chunk.choices:
print("\n使用量:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# 思考プロセスを出力します
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# 応答を開始します
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20 + "\n")
is_answering = True
# 応答プロセスを出力します
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(answer_content)import OpenAI from "openai";
// OpenAI クライアントを初期化します
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
// 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1 を使用してください
// 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "この問題を解いてください" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qwen3.5-plus',
messages: messages,
stream: true,
// 注:Node.js SDK では、enableThinking のような非標準パラメーターは extra_body ではなく、トップレベルのプロパティとして渡されます。
enable_thinking: enableThinking
});
if (enableThinking){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) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// 正式な応答を処理します
else if (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();# ======= 重要 =======
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.5-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "この問題を解いてください"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true},
"enable_thinking": true
}'DashScope
import os
import dashscope
from dashscope import MultiModalConversation
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1 を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1 を使用してください
dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
enable_thinking = True
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題の解き方を教えてください。"}
]
}
]
response = MultiModalConversation.call(
# 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:api_key="sk-xxx",
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3.5-plus",
messages=messages,
stream=True,
# enable_thinking パラメーターは思考プロセスを有効にします。
# qwen3.5-plus、qwen3-vl-plus、および qwen3-vl-flash の場合、enable_thinking を使用して思考を有効または無効にできます (qwen3.5-plus はデフォルトで有効)。qwen3-vl-235b-a22b-thinking のような 'thinking' サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
enable_thinking=enable_thinking
)
# 完全な思考プロセスを定義します
reasoning_content = ""
# 完全な応答を定義します
answer_content = ""
# 思考プロセスが終了し、応答が開始されたかどうかを確認します
is_answering = False
if enable_thinking:
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in response:
# 思考プロセスと応答の両方が空の場合は無視します
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# 現在が思考プロセスの場合
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# 現在が応答の場合
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# 完全な思考プロセスと応答を出力するには、次のコードのコメントを解除して実行します
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(f"{answer_content}")// DashScope SDK バージョン >= 2.21.10
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
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.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
// シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1 を使用してください
// 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1 を使用してください
static {Constants.baseHttpApiUrl="https://dashscope-intl.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 handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // デフォルト値
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================完全な応答====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return MultiModalConversationParam.builder()
// 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
// API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.5-plus")
.messages(Arrays.asList(Msg))
.enableThinking(true)
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(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("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "この問題を解いてください")))
.build();
streamCallWithMessage(conv, userMsg);
// 最終結果を出力します
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全な応答====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("例外が発生しました:{}", e.getMessage());
}
System.exit(0);
}
}# ======= 重要 =======
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope-intl.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.5-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題を解いてください"}
]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true
}
}'思考の長さの制限
視覚的推論モデルが過度に長い推論プロセスを生成するのを防ぐには、thinking_budget パラメーターを使用して、推論プロセスで生成されるトークンの最大数を制限できます。推論プロセスがこの制限を超えると、コンテンツは切り捨てられ、モデルは直ちに最終的な回答の生成を開始します。thinking_budget のデフォルト値は、モデルの Chain-of-Thought の最大長です。詳細については、「モデルリスト」をご参照ください。
thinking_budget パラメーターは Qwen3-VL (思考モード) および kimi-k2.5 (思考モード) に対応しています。
OpenAI 互換
thinking_budget パラメーターは、非標準の OpenAI パラメーターです。OpenAI Python SDK を使用する場合、extra_body 辞書を介して渡すことができます。
import os
from openai import OpenAI
client = OpenAI(
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
api_key=os.getenv("DASHSCOPE_API_KEY"),
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1 を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # 完全な思考プロセスを定義します
answer_content = "" # 完全な応答を定義します
is_answering = False # 思考プロセスが終了し、応答が開始されたかどうかを確認します
enable_thinking = True
# チャット補完リクエストを作成します
completion = client.chat.completions.create(
model="qwen3.5-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "この問題の解き方を教えてください。"},
],
},
],
stream=True,
# enable_thinking パラメーターは思考プロセスを有効にします。thinking_budget パラメーターは推論プロセスの最大トークン数を設定します。
# qwen3.5-plus、qwen3-vl-plus、および qwen3-vl-flash の場合、enable_thinking を使用して思考を有効または無効にできます (qwen3.5-plus はデフォルトで有効)。qwen3-vl-235b-a22b-thinking のような 'thinking' サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
extra_body={
'enable_thinking': enable_thinking,
"thinking_budget": 81920},
# 最後のチャンクでトークン使用量を返すには、次のコメントを解除します
# stream_options={
# "include_usage": True
# }
)
if enable_thinking:
print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")
for chunk in completion:
# chunk.choices が空の場合は、使用量を出力します
if not chunk.choices:
print("\n使用量:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# 思考プロセスを出力します
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# 応答を開始します
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20 + "\n")
is_answering = True
# 応答プロセスを出力します
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(answer_content)import OpenAI from "openai";
// OpenAI クライアントを初期化します
const openai = new OpenAI({
// API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
// 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1 を使用してください
// 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1 を使用してください
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "この問題を解いてください" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qwen3.5-plus',
messages: messages,
stream: true,
// 注:Node.js SDK では、enableThinking のような非標準パラメーターは extra_body ではなく、トップレベルのプロパティとして渡されます。
enable_thinking: enableThinking,
thinking_budget: 81920
});
if (enableThinking){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) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// 正式な応答を処理します
else if (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();# ======= 重要 =======
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions を使用してください
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
# === 実行前にこのコメントを削除してください ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.5-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "この問題を解いてください"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true},
"enable_thinking": true,
"thinking_budget": 81920
}'DashScope
import os
import dashscope
from dashscope import MultiModalConversation
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1 を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1 を使用してください
dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
enable_thinking = True
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題の解き方を教えてください。"}
]
}
]
response = MultiModalConversation.call(
# 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:api_key="sk-xxx",
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3.5-plus",
messages=messages,
stream=True,
# enable_thinking パラメーターは思考プロセスを有効にします。
# qwen3.5-plus、qwen3-vl-plus、および qwen3-vl-flash の場合、enable_thinking を使用して思考を有効または無効にできます (qwen3.5-plus はデフォルトで有効)。qwen3-vl-235b-a22b-thinking のような 'thinking' サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
enable_thinking=enable_thinking,
# thinking_budget パラメーターは推論プロセスの最大トークン数を設定します。
thinking_budget=81920,
)
# 完全な思考プロセスを定義します
reasoning_content = ""
# 完全な応答を定義します
answer_content = ""
# 思考プロセスが終了し、応答が開始されたかどうかを確認します
is_answering = False
if enable_thinking:
print("=" * 20 + "思考プロセス" + "=" * 20)
for chunk in response:
# 思考プロセスと応答の両方が空の場合は無視します
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# 現在が思考プロセスの場合
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# 現在が応答の場合
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "完全な応答" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# 完全な思考プロセスと応答を出力するには、次のコードのコメントを解除して実行します
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(f"{answer_content}")// DashScope SDK バージョン >= 2.21.10
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
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.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
// シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1 を使用してください
// 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1 を使用してください
static {Constants.baseHttpApiUrl="https://dashscope-intl.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 handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // デフォルト値
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================思考プロセス====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================完全な応答====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return MultiModalConversationParam.builder()
// 環境変数を設定していない場合は、次の行をお使いの Model Studio API キーに置き換えてください:.apiKey("sk-xxx")
// API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.5-plus")
.messages(Arrays.asList(Msg))
.enableThinking(true)
.thinkingBudget(81920)
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(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("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "この問題を解いてください")))
.build();
streamCallWithMessage(conv, userMsg);
// 最終結果を出力します
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================完全な応答====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("例外が発生しました:{}", e.getMessage());
}
System.exit(0);
}
}# ======= 重要 =======
# API キーはリージョンによって異なります。API キーは https://www.alibabacloud.com/help/ja/model-studio/get-api-key で取得してください
# シンガポールリージョンのベース URL。米国 (バージニア) リージョンのモデルの場合は、https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# 北京リージョンのモデルの場合は、https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation を使用してください
# === 実行前にこのコメントを削除してください ===
curl -X POST https://dashscope-intl.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.5-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "この問題を解いてください"}
]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true,
"thinking_budget": 81920
}
}'その他の例
思考機能に加えて、視覚的推論モデルは、次のような複雑なシナリオ向けのすべての視覚理解機能をサポートしています:
課金
総コスト = (入力トークン × トークンあたりの入力価格) + (出力トークン × トークンあたりの出力価格)。
-
思考プロセス (
reasoning_content) は、出力トークンの一部として請求されます。思考モードでモデルが思考プロセスを出力しない場合、ノンシンキングモードのレートで請求されます。 -
画像または動画のトークン計算方法については、「画像と動画の理解」をご参照ください。
API リファレンス
視覚的推論モデルの入出力パラメーターの詳細については、「Qwen」をご参照ください。
エラーコード
モデルの呼び出しが失敗し、エラーメッセージが返された場合は、「エラーメッセージ」で解決策をご確認ください。