Alibaba Cloud Model Studio は、OpenAI 互換の Responses API をサポートしています。Chat Completions API を基盤として構築された Responses API は、ネイティブなエージェント機能を効率化します。
OpenAI Chat Completions API に対する利点:- 組み込みツール:Web 検索、Web スクレイピング、コードインタープリター、Text-to-Image、Image-to-Image を使用して、複雑なタスクの結果を向上させます。詳細については、「組み込みツールの呼び出し」をご参照ください。
- より柔軟な入力:この API は、標準のチャット形式での直接的な文字列入力とメッセージ配列の両方をサポートしています。
- 簡素化されたコンテキスト管理:
previous_response_idを渡すことで、完全なメッセージ履歴配列を手動で構築する必要がなくなります。
パラメーターの詳細については、「OpenAI Responses API リファレンス」をご参照ください。
前提条件
まず、API キーを取得し、環境変数として設定します。OpenAI SDK を使用する場合は、SDK をインストールしてください。
重要OpenAI 互換 Responses API のレガシパス /api/v2/apps/protocols/compatible-mode/v1/responses は、間もなく非推奨になります。速やかに新しいパス /compatible-mode/v1/responses に移行してください。
重要Alibaba Cloud Model Studio は、中国 (北京)、シンガポール、および中国 (香港) リージョン向けにワークスペース固有のドメインをリリースしました。新しい専用ドメインは、推論リクエストに対して優れたパフォーマンスと高い安定性を提供します。新しいドメインへの移行を推奨します:
- 中国(北京):
https://dashscope.aliyuncs.comからhttps://{WorkspaceId}.cn-beijing.maas.aliyuncs.comへ - シンガポール:
https://dashscope-intl.aliyuncs.comからhttps://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.comに - 中国 (香港):
https://cn-hongkong.dashscope.aliyuncs.comからhttps://{WorkspaceId}.cn-hongkong.maas.aliyuncs.comに
{WorkspaceId} は、Alibaba Cloud Model Studio コンソールの [ワークスペース詳細] ページで確認できるワークスペース ID です。既存のドメインは引き続き完全に機能します。
サポート対象モデル
qwen3.8-max, qwen3.8-flash, qwen3.7-max, qwen3.7-max-2026-05-20, qwen3.7-max-2026-06-08, qwen3.7-max-2026-05-17, qwen3.7-max-preview, qwen3-max, qwen3-max-2026-01-23, qwen3.7-plus, qwen3.7-plus-2026-05-26, qwen3.6-plus, qwen3.6-plus-2026-04-02, qwen3.5-plus, qwen3.5-plus-2026-04-20, qwen3.5-plus-2026-02-15, qwen3.7-flash, qwen3.7-flash-2026-07-15, qwen3.6-flash, qwen3.6-flash-2026-04-16, qwen3.5-flash, qwen3.5-flash-2026-02-23, qwen3.8-2.4t-a95b, qwen3.8-27b, qwen3.6-35b-a3b, qwen3.5-397b-a17b, qwen3.5-122b-a10b, qwen3.5-27b, qwen3.5-35b-a3b, deepseek-v4-pro, deepseek-v4-pro-0813, deepseek-v4-flash, deepseek-v4-flash-0731, glm-5.2, kimi-k3
重要上記リスト外のAlibaba Cloud Model Studio直接提供テキスト生成モデルは基本的な互換機能のみをサポートします。Agent機能(組み込みツールなど)は制限されます。
エンドポイント
シンガポール
SDK 呼び出し構成の base_url: https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses
WorkspaceId には、実際の ワークスペース ID を指定します。
China (Beijing)
SDK 構成の base_url: https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1/responses
WorkspaceId を実際の ワークスペース ID に置き換えます。
米国 (バージニア)
SDK 呼び出し構成の base_url: https://dashscope-us.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://dashscope-us.aliyuncs.com/compatible-mode/v1/responses
中国 (香港)
SDK 呼び出し構成 base_url: https://{WorkspaceId}.cn-hongkong.maas.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://{WorkspaceId}.cn-hongkong.maas.aliyuncs.com/compatible-mode/v1/responses
WorkspaceId を実際のワークスペース ID に置き換えてください。
ドイツ (フランクフルト)
SDK の base_url: https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://{WorkspaceId}.eu-central-1.maas.aliyuncs.com/compatible-mode/v1/responses
WorkspaceId を実際の ワークスペース ID に置き換えます。
日本 (東京)
SDK 呼び出し構成 base_url: https://{WorkspaceId}.ap-northeast-1.maas.aliyuncs.com/compatible-mode/v1
HTTP リクエスト URL:POST https://{WorkspaceId}.ap-northeast-1.maas.aliyuncs.com/compatible-mode/v1/responses
WorkspaceId を、実際の ワークスペース ID に置き換えます。
コード例
基本的な呼び出し
メッセージを送信し、応答を取得します。
import os
from openai import OpenAI
client = OpenAI(
# 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
response = client.responses.create(
model="qwen3.7-plus",
input="あなたに何ができますか?"
)
# モデルの応答を取得
# print(response.model_dump_json())
print(response.output_text)
import OpenAI from "openai";
const openai = new OpenAI({
// 環境変数が設定されていない場合は、ご利用の API キーに置き換えてください: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3.7-plus",
input: "あなたに何ができますか?"
});
// モデルの応答を取得
console.log(response.output_text);
}
main();
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "あなたに何ができますか?"
}'
これは完全な API 応答です。
{
"created_at": 1771226624,
"id": "bf0d5c2e-f14b-9ad7-bc0d-ee0c8c9ee2d8",
"model": "qwen3-max-2026-01-23",
"object": "response",
"output": [
{
"content": [
{
"annotations": [],
"text": "こんにちは! 実は私はかなり......",
"type": "output_text"
}
],
"id": "msg_1e17fdb2-5fc3-4c78-a9e9-cbd78eb043f0",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": false,
"status": "completed",
"tool_choice": "auto",
"tools": [],
"usage": {
"input_tokens": 37,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 220,
"output_tokens_details": {
"reasoning_tokens": 0
},
"total_tokens": 257,
"x_details": [
{
"input_tokens": 37,
"output_tokens": 220,
"total_tokens": 257,
"x_billing_type": "response_api"
}
]
}
}
マルチターン対話
previous_response_id パラメーターは会話コンテキストを自動的に維持するため、メッセージ履歴を手動で構築する必要はありません。各応答の id は 7 日間有効です。
previous_response_idには、output配列内のメッセージid(例:msg_56c860c4-3ad8-4a96-8553-d2f94c259xxx) ではなく、直前の応答のトップレベルid(例:resp_xxx、UUID フォーマット) を指定する必要があります。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# 1 回目の対話
response1 = client.responses.create(
model="qwen3.7-plus",
input="私の名前は佐藤です。覚えておいてください。"
)
print(f"1 回目の応答: {response1.output_text}")
# 2 回目の対話 - previous_response_id を使用してコンテキストをリンク
# 応答 ID は 7 日で有効期限が切れます
response2 = client.responses.create(
model="qwen3.7-plus",
input="私の名前を覚えていますか?",
previous_response_id=response1.id
)
print(f"2 回目の応答: {response2.output_text}")
import OpenAI from "openai";
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() {
// 1 回目の対話
const response1 = await openai.responses.create({
model: "qwen3.7-plus",
input: "私の名前は佐藤です。覚えておいてください。"
});
console.log(`1 回目の応答: ${response1.output_text}`);
// 2 回目の対話 - previous_response_id を使用してコンテキストをリンク
// 応答 ID は 7 日で有効期限が切れます
const response2 = await openai.responses.create({
model: "qwen3.7-plus",
input: "私の名前を覚えていますか?",
previous_response_id: response1.id
});
console.log(`2 回目の応答: ${response2.output_text}`);
}
main();
# 1 回目の対話
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "私の名前は佐藤です。覚えておいてください。"
}'
# 2 回目の対話 - 1 回目の応答の ID を previous_response_id として使用
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "私の名前を覚えていますか?",
"previous_response_id": "response_id_from_first_round"
}'
{
"id": "f0dbb153-117f-9bbf-8176-5284b47f3xxx",
"created_at": 1769173209.0,
"model": "qwen3.7-plus",
"object": "response",
"status": "completed",
"output": [
{
"id": "msg_56c860c4-3ad8-4a96-8553-d2f94c259xxx",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "はい、John さん!あなたの名前を覚えていますよ。今日はどのようなご用件でしょうか?",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 78,
"output_tokens": 16,
"total_tokens": 94,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}
注:2 回目のラウンドでは、input_tokens のカウントは 78 です。この数値には、1 回目のラウンドのコンテキストが含まれており、モデルが "John" という名前を正常に記憶したことを示しています。
ディープシンキング
reasoning パラメーターを使用して、モデルの推論の強度を制御します。reasoning.effort を設定すると、モデルは応答前に思考し、reasoning 出力項目に思考プロセスを返します。effort パラメーターは、以下の値に対応しています。
none:思考を無効にし、直接的な回答を提供します。minimal: 思考を最小限に抑え、応答を最速化します。low:迅速な応答を優先して、簡易的な思考を行います。medium(デフォルト): 速度と深さのバランスを取り、中程度の思考を行います。high: ディープシンキングを行い、複雑で専門的な問題にフォーカスします。
thinking_budgetパラメーターを使用して思考の最大長を制御することはできません。reasoning.effortはenable_thinkingより優先されます。enable_thinkingは非推奨になるため、reasoning.effortを使用してください。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
response = client.responses.create(
model="qwen3.7-plus",
input="9.9 と 9.11 ではどちらが大きいですか?",
reasoning={"effort": "medium"}
)
# 出力を処理
for item in response.output:
if item.type == "reasoning":
print("=== 思考プロセス ===")
for summary in item.summary:
print(summary.text)
elif item.type == "message":
print("\n=== 最終回答 ===")
print(item.content[0].text)
# 思考トークン数を確認
print(f"\n思考トークン数: {response.usage.output_tokens_details.reasoning_tokens}")
import OpenAI from "openai";
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() {
const response = await openai.responses.create({
model: "qwen3.7-plus",
input: "9.9 と 9.11 ではどちらが大きいですか?",
reasoning: { effort: "medium" }
});
for (const item of response.output) {
if (item.type === "reasoning") {
console.log("=== 思考プロセス ===");
for (const summary of item.summary) {
console.log(summary.text);
}
} else if (item.type === "message") {
console.log("\n=== 最終回答 ===");
console.log(item.content[0].text);
}
}
// 思考トークン数を確認
console.log(`\n思考トークン数: ${response.usage.output_tokens_details.reasoning_tokens}`);
}
main();
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "9.9 と 9.11 ではどちらが大きいですか?",
"reasoning": {"effort": "medium"}
}'
{
"created_at": 1774498317,
"id": "resp_xxx",
"model": "qwen3.7-plus",
"object": "response",
"output": [
{
"id": "msg_xxx",
"summary": [
{
"text": "思考プロセス:\n\n1. リクエストの分析:\n * 質問:「9.9 と 9.11 ではどちらが大きいですか?」\n * コンテキスト:ユーザーは単純な数学的な比較の質問をしています。\n * 現在の日付:2026年3月26日木曜日 (システムプロンプトで提供)。\n * 知識のカットオフ:2026年 (システムプロンプトで提供)。\n\n2. 数値の評価:\n * 数値 A:9.9\n * 数値 B:9.11\n * これらは 10 進数です。\n * 整数部分を比較:両方とも 9 です。\n * 十分の一の位 (小数点第一位) を比較:\n * 9.9 の十分の一の位は 9 です。\n * 9.11 の十分の一の位は 1 です。\n * 9 > 1 なので、9.9 は 9.11 より大きいです。\n\n3. 潜在的な曖昧さの検討:\n * これはバージョン番号でしょうか?(例:ソフトウェアのバージョン)。バージョン管理では、9.11 は 9.9 よりも「新しい」または「高い」と見なされることが多いです。しかし、数学的には 9.9 > 9.11 です。\n * これは日付でしょうか?(9月9日 vs 9月11日)。11日の方が後です。\n * 標準的な解釈:コンテキストがない場合、10 進数は数学的な値と見なされます。\n * よくある落とし穴:一部の人は、10 進数を整数のように扱い (11 > 9)、9.11 > 9.9 と考えてしまうことがあります。これは、小学校の算数で知られている認知バイアスまたは誤解です。\n * 決定:数学的な答えを明確に提供しますが、関連性があればバージョン管理のコンテキストにも言及するかもしれません (ただし、通常、この特定の質問は数学のテストです)。単純さを考えると、まず数学的な真実に固執します。\n\n4. 回答の策定:\n * 直接的な回答:9.9 の方が大きいです。\n * 説明:位の値を比較します。9.9 = 9.90、9.11 = 9.11。90 百分の一 > 11 百分の一。\n * トーン:親切で明確。\n\n5. 応答のドラフト作成 (内部の独白/下書き):\n * よし、数学的には 9.9 の方が大きい。9.9 は 9 と 9/10。9.11 は 9 と 11/100 (または 1/10 と 1/100)。9/10 は 1/10 よりも大きい。\n * したがって、9.9 > 9.11。\n * 質問が英語なので、英語で答えるべきです。\n * 「9.9 is larger.」\n * 混乱を避けるために簡単な説明を追加します。「Because 9.9 equals 9.90, and 9.90 is greater than 9.11.」\n\n6. 「バージョン番号」の可能性に基づく洗練:\n * これは時々、ソフトウェアのバージョンに関する引っかけ問題です。セマンティックバージョニングでは、9.11 > 9.9 です。\n * しかし、通常、「どちらが大きいか」と単純に尋ねられた場合、それは数値的な値を指します。\n * 数値的な回答を主とし、必要であればバージョンに関する注記を追加するかもしれません。しかし、シンプルに保つ方が良いでしょう。ほとんどの場合、これは 10 進数の比較ロジックをテストしています。\n * デフォルトとして数学的な値に固執しましょう。\n\n7. 最終的な推敲:\n * 回答:9.9 の方が大きいです。\n * 理由:10 進数を比較するときは、まず整数部分を見て、次に十分の一の位を見ます。9.9 の十分の一の位の数字は 9 で、9.11 の十分の一の位の数字は 1 です。9 > 1 なので、9.9 > 9.11 です。\n\n8. 出力生成: (思考プロセスに一致させる)\n * どちらが大きいかを明確に述べます。\n * その理由を説明します。\n\n *日付/時刻に関する自己修正:* システムプロンプトには現在の日付が 2026 年であると記載されています。これは数学の質問には影響しませんが、コンテキストを追加する場合 (ここでは不要)、2026 年以降のことに言及しないように注意する必要があります。\n\n *最終決定:* 数学の質問に直接答えるだけにします。\n\n 「数値的には、9.9 の方が大きいです。」\n 説明:9.9 = 9.90、9.11 = 9.11。90 > 11。\n\n 待って、他の解釈はありますか?\n - 日付?9/9 vs 9/11。11日の方が後です。\n - バージョン?9.11 の方が新しいです。\n - しかし、「どちらが大きいか」は通常、大きさを意味します。\n - 数値的な大きさに基づいて答えますが、混乱させずに価値がある場合は、バージョンのコンテキストについて簡単に言及します。実際には、決定的である方が良いです。数値的な値が、数字で「どちらが大きいか」という質問の標準的な解釈です。\n\n 数値的な回答でいきましょう。\n\n 計画:\n 1. 数値的には 9.9 の方が大きいと述べます。\n 2. 10 進数の比較を説明します。\n 3. (任意ですが役立つ) それがバージョン番号である場合、9.11 の方が「高い」と見なされる可能性があることに言及します。しかし、数学を優先します。\n 実際、このような単純なクエリに対して、バージョンについて過剰に説明すると混乱を招く可能性があります。数学に固執しますが、よくある混乱を認めます。\n\n *改訂計画:*\n 1. 直接的な回答:9.9 の方が大きい (数学的に)。\n 2. 説明:位の値。\n 3. 注:それがバージョン番号でない限り。\n\n 簡潔に保ちましょう。\n\n 「数学的な値の観点では、9.9 の方が大きいです。」\n 「なぜなら、9.9 は 9.90 に等しく、9.11 よりも大きいからです。」\n 「それがバージョン番号である場合、通常、バージョン 9.11 はバージョン 9.9 よりも高いです。」\n これで両方の側面をカバーできます。\n\n 待って、一般的な AI トレーニングを見ると、これは AI が 10 進数を整数のように扱うかどうかを確認するための「トラップ」質問であることが多いです。正しい数学的な答えが重要です。\n\n よし、最終的な出力構造:\n 1. 数学的な答え。\n 2. 簡単な説明。\n 3. 文脈上の注記 (バージョン)。\n\n 書きましょう。\n 「数学的な値の観点では、9.9 の方が大きいです。」\n 「10 進数を比較するときは、まず整数部分 (両方とも 9) を比較し、次に十分の一の位を比較します:9.9 の十分の一の位の数字は 9 ですが、9.11 の十分の一の位の数字は 1 です。9 > 1 なので、9.9 > 9.11 です。」\n 「ただし、これらがソフトウェアのバージョン番号である場合、通常、バージョン 9.11 はバージョン 9.9 よりも新しいです。」\n\n これはバランスが取れています。\n\n 待って、もう一度指示を確認する必要があります。「現在の実際の時間を覚えておいてください...」。これは単なるシステムコンテキストです。関連性がない限り、回答で日付に言及する必要はありません。ここでは関連性がありません。\n\n よし、生成の準備ができました。\n\n 待って、もう一度チェック。文化的なコンテキストはありますか?一部のコンテキストでは、11 > 9 なので 9.11 の方が大きいと言う人がいるかもしれません。これは私が修正する必要がある誤解です。\n したがって、数学的なルールを強調することが重要です。\n\n 最終チェック:\n 9.9 = 9 + 9/10 = 9.90\n 9.11 = 9 + 1/10 + 1/100 = 9.11\n 9.90 > 9.11。正しいです。\n\n 応答は英語になります。\n 「数値的な値の観点では、9.9 の方が大きいです。」\n 理由を説明します。\n バージョンの例外に言及します。\n 完了。\n",
"type": "summary_text"
}
],
"type": "reasoning"
},
{
"content": [
{
"annotations": [],
"text": "数学的な値の観点では、9.9 の方が大きいです。\n\n理由は次のとおりです:\n10 進数を比較するときは、まず整数部分を見ます。どちらも 9 です。次に、十分の一の位 (小数点以下の最初の桁) を見ます:\n* 9.9 の十分の一の位の数字は 9 です\n* 9.11 の十分の一の位の数字は 1 です\n\n9 は 1 より大きいので、9.9 > 9.11 となります (比較のために 9.9 を 9.90 と考えることができます)。\n\n注:これらがソフトウェアのバージョン番号である場合、通常、バージョン 9.11 はバージョン 9.9 よりも新しい (または高い) と見なされます。しかし、直接的な数値比較では、9.9 の方が大きいです。",
"type": "output_text"
}
],
"id": "msg_xxx",
"role": "assistant",
"status": "completed",
"type": "message"
}
],
"parallel_tool_calls": false,
"status": "completed",
"tool_choice": "auto",
"tools": [],
"usage": {
"input_tokens": 57,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 2018,
"output_tokens_details": {
"reasoning_tokens": 1861
},
"total_tokens": 2075,
"x_details": [
{
"input_tokens": 57,
"output_tokens": 2018,
"output_tokens_details": {
"reasoning_tokens": 1861
},
"total_tokens": 2075,
"x_billing_type": "response_api"
}
]
}
}
ストリーム出力
モデルからリアルタイムでコンテンツを受信します。特に長文のテキスト生成に役立ちます。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
stream = client.responses.create(
model="qwen3.7-plus",
input="人工知能について簡単に紹介してください。",
stream=True
)
print("ストリーム出力を受信中:")
for event in stream:
# print(event.model_dump_json()) # 生のイベント応答を確認するにはコメントを解除
if event.type == 'response.output_text.delta':
print(event.delta, end='', flush=True)
elif event.type == 'response.completed':
print("\nストリームが完了しました")
print(f"合計トークン数: {event.response.usage.total_tokens}")
import OpenAI from "openai";
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() {
const stream = await openai.responses.create({
model: "qwen3.7-plus",
input: "人工知能について簡単に紹介してください。",
stream: true
});
console.log("ストリーム出力を受信中:");
for await (const event of stream) {
// console.log(JSON.stringify(event)); // 生のイベント応答を確認するにはコメントを解除
if (event.type === 'response.output_text.delta') {
process.stdout.write(event.delta);
} else if (event.type === 'response.completed') {
console.log("\nストリームが完了しました");
console.log(`合計トークン数: ${event.response.usage.total_tokens}`);
}
}
}
main();
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "人工知能について簡単に紹介してください。",
"stream": true
}'
{"response":{"id":"47a71e7d-868c-4204-9693-ef8ff9058xxx","created_at":1769417481.0,"error":null,"incomplete_details":null,"instructions":null,"metadata":null,"model":"","object":"response","output":[],"parallel_tool_calls":false,"temperature":null,"tool_choice":"auto","tools":[],"top_p":null,"background":null,"completed_at":null,"conversation":null,"max_output_tokens":null,"max_tool_calls":null,"previous_response_id":null,"prompt":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":null,"safety_identifier":null,"service_tier":null,"status":"queued","text":null,"top_logprobs":null,"truncation":null,"usage":null,"user":null},"sequence_number":0,"type":"response.created"}
{"response":{"id":"47a71e7d-868c-4204-9693-ef8ff9058xxx","created_at":1769417481.0,"error":null,"incomplete_details":null,"instructions":null,"metadata":null,"model":"","object":"response","output":[],"parallel_tool_calls":false,"temperature":null,"tool_choice":"auto","tools":[],"top_p":null,"background":null,"completed_at":null,"conversation":null,"max_output_tokens":null,"max_tool_calls":null,"previous_response_id":null,"prompt":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":null,"safety_identifier":null,"service_tier":null,"status":"in_progress","text":null,"top_logprobs":null,"truncation":null,"usage":null,"user":null},"sequence_number":1,"type":"response.in_progress"}
{"item":{"id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","content":[],"role":"assistant","status":"in_progress","type":"message"},"output_index":0,"sequence_number":2,"type":"response.output_item.added"}
{"content_index":0,"item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","output_index":0,"part":{"annotations":[],"text":"","type":"output_text","logprobs":null},"sequence_number":3,"type":"response.content_part.added"}
{"content_index":0,"delta":"人工","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":4,"type":"response.output_text.delta"}
{"content_index":0,"delta":"知能","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":5,"type":"response.output_text.delta"}
{"content_index":0,"delta":" (","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":6,"type":"response.output_text.delta"}
{"content_index":0,"delta":"AI","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":7,"type":"response.output_text.delta"}
... (中間イベントは省略) ...
{"content_index":0,"delta":"分野で広く利用されており、私たちの","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":38,"type":"response.output_text.delta"}
{"content_index":0,"delta":"生活や働き方を大きく変え","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":39,"type":"response.output_text.delta"}
{"content_index":0,"delta":"ています。","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":40,"type":"response.output_text.delta"}
{"content_index":0,"item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":41,"text":"人工知能 (AI) は、コンピューターシステムを用いて人間の知的行動をシミュレートする技術および科学です。xxxx","type":"response.output_text.done"}
{"content_index":0,"item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","output_index":0,"part":{"annotations":[],"text":"人工知能 (AI) は、コンピューターシステムを用いて人間の知的行動をシミュレートする技術および科学です。xxx","type":"output_text","logprobs":null},"sequence_number":42,"type":"response.content_part.done"}
{"item":{"id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","content":[{"annotations":[],"text":"人工知能 (AI) は、コンピューターシステムを用いて人間の知的行動をシミュレートする技術および科学です。通常、人間の知能を必要とするタスクを機械に実行させることを目的としています。例えば、\n\n- 学習 (例:データを用いたモデルのトレーニング) \n- 推論 (例:論理的な判断と問題解決) \n- 知覚 (例:画像、音声、テキストの認識) \n- 言語理解 (例:自然言語処理) \n- 意思決定 (例:複雑な環境での最適な選択)\n\nAI は、弱い AI (音声アシスタントやレコメンデーションシステムなど、特定のタスクに特化) と強い AI (人間のような汎用的な知能を持つが、まだ実現されていない) に分けられます。\n\n現在、AI は医療、金融、交通、教育、エンターテインメントなど、さまざまな分野で広く利用されており、私たちの生活や働き方を大きく変えています。","type":"output_text","logprobs":null}],"role":"assistant","status":"completed","type":"message"},"output_index":0,"sequence_number":43,"type":"response.output_item.done"}
{"response":{"id":"47a71e7d-868c-4204-9693-ef8ff9058xxx","created_at":1769417481.0,"error":null,"incomplete_details":null,"instructions":null,"metadata":null,"model":"qwen3.7-plus","object":"response","output":[{"id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","content":[{"annotations":[],"text":"人工知能 (AI) は xxxxxx","type":"output_text","logprobs":null}],"role":"assistant","status":"completed","type":"message"}],"parallel_tool_calls":false,"temperature":null,"tool_choice":"auto","tools":[],"top_p":null,"background":null,"completed_at":null,"conversation":null,"max_output_tokens":null,"max_tool_calls":null,"previous_response_id":null,"prompt":null,"prompt_cache_key":null,"prompt_cache_retention":null,"reasoning":null,"safety_identifier":null,"service_tier":null,"status":"completed","text":null,"top_logprobs":null,"truncation":null,"usage":{"input_tokens":37,"input_tokens_details":{"cached_tokens":0},"output_tokens":166,"output_tokens_details":{"reasoning_tokens":0},"total_tokens":203},"user":null},"sequence_number":44,"type":"response.completed"}
組み込みツールの使用
複雑なタスクには組み込みツールを有効にします。Web エクストラクタとコードインタープリターは期間限定で無料です。サポートされているツールについては、「ツール呼び出し」をご参照ください。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
response = client.responses.create(
model="qwen3.7-plus",
input="Alibaba Cloud のウェブサイトを見つけて、ホームページから主要な情報を抽出してください",
# 最良の結果を得るために、すべての組み込みツールを有効にしてください。
tools=[
{"type": "web_search"},
{"type": "code_interpreter"},
{"type": "web_extractor"}
],
reasoning={"effort": "medium"}
)
# 中間出力を確認するには、次の行のコメントを解除してください。
# print(response.output)
print(response.output_text)
import OpenAI from "openai";
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() {
const response = await openai.responses.create({
model: "qwen3.7-plus",
input: "Alibaba Cloud のウェブサイトを見つけて、ホームページから主要な情報を抽出してください",
tools: [
{ type: "web_search" },
{ type: "code_interpreter" },
{ type: "web_extractor" }
],
reasoning: { effort: "medium" }
});
for (const item of response.output) {
if (item.type === "reasoning") {
console.log("モデルが思考中です...");
} else if (item.type === "web_search_call") {
console.log(`検索クエリ: ${item.action.query}`);
} else if (item.type === "web_extractor_call") {
console.log("Web コンテンツを抽出中...");
} else if (item.type === "message") {
console.log(`応答: ${item.content[0].text}`);
}
}
}
main();
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "Alibaba Cloud のウェブサイトを見つけて、ホームページから主要な情報を抽出してください",
"tools": [
{
"type": "web_search"
},
{
"type": "code_interpreter"
},
{
"type": "web_extractor"
}
],
"reasoning": {"effort": "medium"}
}'
{
"id": "69258b21-5099-9d09-92e8-8492b1955xxx",
"object": "response",
"status": "completed",
"output": [
{
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "ユーザーは Alibaba Cloud のウェブサイトを見つけて情報を抽出したいと考えています..."
}
]
},
{
"type": "web_search_call",
"status": "completed",
"action": {
"query": "Alibaba Cloud 公式ウェブサイト",
"type": "search",
"sources": [
{
"type": "url",
"url": "https://cn.aliyun.com/"
},
{
"type": "url",
"url": "https://www.alibabacloud.com/zh"
}
]
}
},
{
"type": "reasoning",
"summary": [
{
"type": "summary_text",
"text": "検索結果には Alibaba Cloud のウェブサイトの URL が表示されます..."
}
]
},
{
"type": "web_extractor_call",
"status": "completed",
"goal": "Alibaba Cloud のホームページから主要な情報を抽出する",
"output": "Tongyi 大規模言語モデル、全製品ポートフォリオ、AI ソリューション...",
"urls": [
"https://cn.aliyun.com/"
]
},
{
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Alibaba Cloud ウェブサイトからの主要情報:Tongyi 大規模言語モデル、クラウドコンピューティングサービス..."
}
]
}
],
"usage": {
"input_tokens": 40836,
"output_tokens": 2106,
"total_tokens": 42942,
"output_tokens_details": {
"reasoning_tokens": 677
},
"x_tools": {
"web_extractor": {
"count": 1
},
"web_search": {
"count": 1
}
}
}
}
セッションキャッシュ
マルチターン対話では、セッションキャッシュを有効にすることで、サーバーが会話のコンテキストを自動的にキャッシュできます。これにより、手動でのキャッシュ管理なしでレイテンシとコストを削減できます。
使用法: 会話キャッシュを有効にするには、リクエストヘッダーに x-dashscope-session-cache: enable を追加します。無効にするには、値を disable に設定します。デフォルト値は disable です。
サポート対象モデル: qwen3.8-max、qwen3.8-flash、qwen3.8-max-preview、qwen3.7-max、qwen3.7-max-2026-05-20、qwen3.7-max-2026-06-08、qwen3-max、qwen3.7-plus、qwen3.6-plus、qwen3.5-plus、qwen3.7-flash、qwen3.6-flash、qwen3.5-flash、qwen-plus、qwen-flash、qwen3-coder-plus、qwen3-coder-flash
セッションキャッシュは、最小プロンプト長が 1024 トークン必要で、5 分後に有効期限が切れます。これは、明示的キャッシュと同じ制約を共有します。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
# default_headers を介してセッションキャッシュを有効化
default_headers={"x-dashscope-session-cache": "enable"}
)
# キャッシュ作成をトリガーするために 1024 トークンを超える長いテキストを構築します。
# (最初のプロンプトが 1024 トークン未満の場合、サーバーは合計コンテキストがこのしきい値を超えたときにキャッシュを作成します。)
long_context = "人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。" * 50
# 最初のリクエスト
response1 = client.responses.create(
model="qwen3.7-plus",
input=long_context + "\n\n上記の背景知識に基づいて、機械学習におけるランダムフォレストアルゴリズムを簡単に紹介してください。",
)
print(f"最初の応答: {response1.output_text}")
# 2 番目のリクエスト: previous_response_id を使用してコンテキストをリンクします。サーバーはキャッシュを自動的に管理します。
response2 = client.responses.create(
model="qwen3.7-plus",
input="それと GBDT の主な違いは何ですか?",
previous_response_id=response1.id,
)
print(f"2 番目の応答: {response2.output_text}")
# キャッシュヒットステータスを確認
usage = response2.usage
print(f"入力トークン数: {usage.input_tokens}")
print(f"キャッシュされたトークン数: {usage.input_tokens_details.cached_tokens}")
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
// defaultHeaders を介してセッションキャッシュを有効化
defaultHeaders: {"x-dashscope-session-cache": "enable"}
});
// キャッシュ作成をトリガーするために 1024 トークンを超える長いテキストを構築します。
// (最初のプロンプトが 1024 トークン未満の場合、サーバーは合計コンテキストがこのしきい値を超えたときにキャッシュを作成します。)
const longContext = "人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。".repeat(50);
async function main() {
// 最初のリクエスト
const response1 = await openai.responses.create({
model: "qwen3.7-plus",
input: longContext + "\n\n上記の背景知識に基づいて、機械学習におけるランダムフォレストアルゴリズムの基本原則とユースケースを含めて簡単に紹介してください。"
});
console.log(`最初の応答: ${response1.output_text}`);
// 2 番目のリクエスト: previous_response_id を使用してコンテキストをリンクします。サーバーはキャッシュを自動的に管理します。
const response2 = await openai.responses.create({
model: "qwen3.7-plus",
input: "それと GBDT の主な違いは何ですか?",
previous_response_id: response1.id
});
console.log(`2 番目の応答: ${response2.output_text}`);
// キャッシュヒットステータスを確認
console.log(`入力トークン数: ${response2.usage.input_tokens}`);
console.log(`キャッシュされたトークン数: ${response2.usage.input_tokens_details.cached_tokens}`);
}
main();
# 最初のリクエスト
# 'input' テキストはキャッシュ作成をトリガーするために 1024 トークンを超える必要があります。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "x-dashscope-session-cache: enable" \
-d '{
"model": "qwen3.7-plus",
"input": "人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。人工知能は、人間の知能をシミュレート、拡張、拡大できる理論、方法、技術、および応用システムの研究開発に焦点を当てたコンピューターサイエンスの重要な分野です。\n\n上記の背景知識に基づいて、機械学習におけるランダムフォレストアルゴリズムの基本原則とユースケースを含めて簡単に紹介してください。"
}'
# 2 番目のリクエスト - 'previous_response_id' を最初のリクエストの 'id' に設定します。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "x-dashscope-session-cache: enable" \
-d '{
"model": "qwen3.7-plus",
"input": "それと GBDT の主な違いは何ですか?",
"previous_response_id": "id_from_first_response"
}'
Chat Completions API から Responses API への移行
Responses API は、互換性を維持しつつ Chat Completions API のインターフェイスを簡素化します。移行するには、次の手順に従ってください。
1. エンドポイントアドレスの更新
エンドポイントアドレスを /v1/chat/completions から /v1/responses に更新します。
# Chat Completions API
completion = client.chat.completions.create(
model="qwen3.7-plus",
messages=[
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
)
print(completion.choices[0].message.content)
# Responses API - 同じメッセージ形式を使用可能
response = client.responses.create(
model="qwen3.7-plus",
input=[
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
)
print(response.output_text)
# Responses API - または、より簡潔な形式を使用
response = client.responses.create(
model="qwen3.7-plus",
input="こんにちは!"
)
print(response.output_text)
// Chat Completions API
const completion = await client.chat.completions.create({
model: "qwen3.7-plus",
messages: [
{ role: "system", content: "あなたは役立つアシスタントです。" },
{ role: "user", content: "こんにちは!" }
]
});
console.log(completion.choices[0].message.content);
// Responses API - 同じメッセージ形式を使用可能
const response = await client.responses.create({
model: "qwen3.7-plus",
input: [
{ role: "system", content: "あなたは役立つアシスタントです。" },
{ role: "user", content: "こんにちは!" }
]
});
console.log(response.output_text);
// Responses API - または、より簡潔な形式を使用
const response2 = await client.responses.create({
model: "qwen3.7-plus",
input: "こんにちは!"
});
console.log(response2.output_text);
# Chat Completions API
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.7-plus",
"messages": [
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
}'
# Responses API - より簡潔な形式を使用
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.7-plus",
"input": "こんにちは!"
}'
2. 応答処理の更新
Responses API は、異なるレスポンス構造を返します。output_text ショートカットでテキスト出力を取得するか、output 配列から詳細情報にアクセスします。
| |
3. マルチターン対話の簡素化
Chat Completions API では、メッセージ履歴配列を手動で管理する必要があります。Responses API は、previous_response_id パラメーターを使用して会話コンテキストを自動的にリンクすることで、このプロセスを簡素化します。応答の id は 7 日間有効です。
Python
| |
Node.js
| |
4. 組み込みツールの使用
Responses API には組み込みツールが含まれています。tools パラメーターでそれらを指定します。Code Interpreter と Web 検索ツールは期間限定で無料です。詳細については、「ツール呼び出し」をご参照ください。
Python
| |
Node.js
| |
Curl
| |
よくある質問
Q:マルチターン対話のコンテキストを渡す方法は?
A: 前回成功したモデルの応答の id を、次の会話リクエストで previous_response_id パラメーターとして渡します。
Q:「output_text」を出力できないのはなぜですか?
A:この属性は、OpenAI Python SDK の一部のバージョン (1.99.2 など) には存在しません。このエラーを解決するには、SDK を最新バージョンに更新してください。