Alibaba Cloud Model Studio の Qwen モデルは、OpenAI 互換の Responses API をサポートしています。Responses API は Chat Completions API の進化版であり、ネイティブなエージェント機能をより簡潔な方法で提供します。すべての新規プロジェクトでこの API を使用することを推奨します。
OpenAI Chat Completions API に対する利点:
組み込みツール:ウェブ検索、ウェブスクレイピング、コードインタープリターなどの組み込みツールが含まれています。これらのツールを同時に有効にすることで、複雑なタスクを処理する際に最良の結果を得ることができます。詳細については、「組み込みツールの呼び出し」をご参照ください。
より柔軟な入力:文字列を直接モデルの入力として渡すことをサポートし、チャットフォーマットのメッセージ配列とも互換性があります。
簡素化されたコンテキスト管理:前回の応答から
previous_response_idを渡すことで、手動で完全なメッセージ履歴配列を構築する手間を省くことができます。
前提条件
まず、API キーを取得し、API キーを環境変数として設定する (非推奨、API キーの設定に統合予定) 必要があります。OpenAI ソフトウェア開発キット (SDK) を使用して呼び出しを行う場合は、SDK をインストールする必要もあります。
サポート対象モデル
現在、qwen3-max-2026-01-23 のみがサポートされています。
サービスエンドポイント
現在、Singaporeリージョンのみがサポートされています。
シンガポール
SDK 呼び出しの base_url は https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1 です。
HTTP リクエストアドレスは POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses です。
China (Beijing)
SDK 呼び出しの base_url は https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1 です。
HTTP リクエストアドレスは POST https://dashscope.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses です。
コード例
基本的な呼び出し
メッセージを送信し、モデルの応答を受け取ることができます。
Python
import os
from openai import OpenAI
client = OpenAI(
# 環境変数が設定されていない場合は、次のように置き換えます: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)
response = client.responses.create(
model="qwen3-max-2026-01-23",
input="こんにちは、一文で自己紹介をしてください。"
)
# モデルの応答を取得
# print(response.model_dump_json())
print(response.output_text)Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// 環境変数が設定されていない場合は、次のように置き換えます: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "こんにちは、一文で自己紹介をしてください。"
});
// モデルの応答を取得
console.log(response.output_text);
}
main();curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "こんにちは、一文で自己紹介をしてください。"
}'応答例
以下に完全な API 応答を示します。
{
"id": "b8104cd2-ee57-903d-aae0-93d99254axxx",
"created_at": 1769084048.0,
"model": "qwen3-max-2026-01-23",
"object": "response",
"status": "completed",
"output": [
{
"id": "msg_1eb85c78-a627-4c7e-aac6-22235c173xxx",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "こんにちは!私は Tongyi Lab によって開発された大規模言語モデルの Qwen です。質問に答えたり、テキストを作成したり、コードを書いたり、意見を述べたりすることができます。正確で、有用で、フレンドリなサポートを提供することに努めています。",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 39,
"output_tokens": 46,
"total_tokens": 85,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens_details": {
"reasoning_tokens": 0
}
}
}マルチターン対話
previous_response_id パラメーターを使用して、手動でメッセージ履歴を構築することなく、コンテキストを自動的にリンクできます。現在の応答 id は 7 日間有効です。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)
# 1回目
response1 = client.responses.create(
model="qwen3-max-2026-01-23",
input="私の名前は田中です。覚えておいてください。"
)
print(f"1回目の応答: {response1.output_text}")
# 2回目 - previous_response_id を使用してコンテキストをリンクします
# 応答 ID は 7 日で有効期限が切れます
response2 = client.responses.create(
model="qwen3-max-2026-01-23",
input="私の名前を覚えていますか?",
previous_response_id=response1.id
)
print(f"2回目の応答: {response2.output_text}")Node.js
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
// 1回目
const response1 = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "私の名前は田中です。覚えておいてください。"
});
console.log(`1回目の応答: ${response1.output_text}`);
// 2回目 - previous_response_id を使用してコンテキストをリンクします
// 応答 ID は 7 日で有効期限が切れます
const response2 = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "私の名前を覚えていますか?",
previous_response_id: response1.id
});
console.log(`2回目の応答: ${response2.output_text}`);
}
main();curl
# 1回目
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "私の名前は田中です。覚えておいてください。"
}'
# 2回目 - 1回目の応答の ID を previous_response_id として使用します
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "私の名前を覚えていますか?",
"previous_response_id": "response_id_from_first_round"
}'2回目の対話の応答例
{
"id": "4730f70e-6aa3-9315-b4d1-c43c8e509xxx",
"created_at": 1769173209.0,
"model": "qwen3-max-2026-01-23",
"object": "response",
"status": "completed",
"output": [
{
"id": "msg_869508e7-590f-46c0-bd8d-e3b5e970exxx",
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "はい、田中さん!お名前を覚えています。今日はどのようなご用件でしょうか?",
"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" という名前を正しく記憶しました。
ストリーミング出力
ストリーミング出力を通じて、モデルが生成したコンテンツをリアルタイムで受け取ることができます。この機能は、長文生成シナリオに適しています。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)
stream = client.responses.create(
model="qwen3-max-2026-01-23",
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}")Node.js
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
const stream = await openai.responses.create({
model: "qwen3-max-2026-01-23",
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
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"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":" (Art","item_id":"msg_16db29d6-c1d3-47d7-9177-0fba81964xxx","logprobs":[],"output_index":0,"sequence_number":5,"type":"response.output_text.delta"}
{"content_index":0,"delta":"ificial Intelligence,","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\n人工知能は、**弱い 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-max-2026-01-23","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"}組み込みツールの呼び出し
組み込みツールを同時に有効にすることで、複雑なタスクを処理する際に最良の結果を得ることができます。ウェブスクレイピングとコードインタープリターツールは現在、期間限定で無料です。詳細については、「ウェブ検索」、「ウェブスクレイピング」、「コードインタープリター」をご参照ください。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1",
)
response = client.responses.create(
model="qwen3-max-2026-01-23",
input="Alibaba Cloud のウェブサイトを見つけて、主要な情報を抽出してください",
# 最良の結果を得るために、すべての組み込みツールを有効にします
tools=[
{"type": "web_search"},
{"type": "code_interpreter"},
{"type": "web_extractor"}
],
extra_body={"enable_thinking": True}
)
# 中間出力を表示するには、以下の行のコメントを解除します
# print(response.output)
print(response.output_text)
Node.js
import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY,
baseURL: "https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1"
});
async function main() {
const response = await openai.responses.create({
model: "qwen3-max-2026-01-23",
input: "Alibaba Cloud のウェブサイトを見つけて、主要な情報を抽出してください",
tools: [
{ type: "web_search" },
{ type: "code_interpreter" },
{ type: "web_extractor" }
],
enable_thinking: true
});
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("ウェブコンテンツを抽出中...");
} else if (item.type === "message") {
console.log(`応答: ${item.content[0].text}`);
}
}
}
main();curl
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"input": "Alibaba Cloud のウェブサイトを見つけて、主要な情報を抽出してください",
"tools": [
{
"type": "web_search"
},
{
"type": "code_interpreter"
},
{
"type": "web_extractor"
}
],
"enable_thinking": true
}'応答例
{
"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 official website",
"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": "Qwen LLM、完全なプロダクトシステム、AI ソリューション...",
"urls": [
"https://cn.aliyun.com/"
]
},
{
"type": "message",
"role": "assistant",
"status": "completed",
"content": [
{
"type": "output_text",
"text": "Alibaba Cloud 公式サイトからの主要情報:Qwen LLM、クラウドコンピューティングサービス..."
}
]
}
],
"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
}
}
}
}Chat Completions API から Responses API への移行
OpenAI Chat Completions API を使用している場合、以下の手順で Responses API に移行できます。Responses API は Chat Completions API と互換性がありますが、よりシンプルなインターフェイスと強力な機能を提供します。
1. エンドポイントアドレスと base_url の更新
以下の両方の項目を更新する必要があります:
エンドポイントパス:パスを
/v1/chat/completionsから/v1/responsesに更新します。base_url:
シンガポール:URL を
https://dashscope-intl.aliyuncs.com/compatible-mode/v1からhttps://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1に更新します。
Python
# Chat Completions API
completion = client.chat.completions.create(
model="qwen3-max-2026-01-23",
messages=[
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
)
print(completion.choices[0].message.content)
# Responses API - 同じメッセージフォーマットを使用できます
response = client.responses.create(
model="qwen3-max-2026-01-23",
input=[
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
)
print(response.output_text)
# Responses API - または、より簡潔なフォーマットを使用します
response = client.responses.create(
model="qwen3-max-2026-01-23",
input="こんにちは!"
)
print(response.output_text)Node.js
// Chat Completions API
const completion = await client.chat.completions.create({
model: "qwen3-max-2026-01-23",
messages: [
{ role: "system", content: "あなたは役立つアシスタントです。" },
{ role: "user", content: "こんにちは!" }
]
});
console.log(completion.choices[0].message.content);
// Responses API - 同じメッセージフォーマットを使用できます
const response = await client.responses.create({
model: "qwen3-max-2026-01-23",
input: [
{ role: "system", content: "あなたは役立つアシスタントです。" },
{ role: "user", content: "こんにちは!" }
]
});
console.log(response.output_text);
// Responses API - または、より簡潔なフォーマットを使用します
const response2 = await client.responses.create({
model: "qwen3-max-2026-01-23",
input: "こんにちは!"
});
console.log(response2.output_text);curl
# Chat Completions API
curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"messages": [
{"role": "system", "content": "あなたは役立つアシスタントです。"},
{"role": "user", "content": "こんにちは!"}
]
}'
# Responses API - より簡潔なフォーマットを使用します
curl -X POST https://dashscope-intl.aliyuncs.com/api/v2/apps/protocols/compatible-mode/v1/responses \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-max-2026-01-23",
"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 パラメーターで指定できます。コードインタープリターとウェブスクレイピングツールは現在、期間限定で無料です。詳細については、「ウェブ検索」、「コードインタープリター」、「ウェブスクレイピング」をご参照ください。
Python
| |
Node.js
| |
curl
| |
よくある質問
Q:マルチターン対話のコンテキストはどのように渡しますか?
A:前回の成功した応答の id を、次の呼び出しで previous_response_id パラメーターとして渡すことで、対話を継続できます。