すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:OpenAI-compatible - Responses

最終更新日:Jul 15, 2026

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} は、お使いのワークスペース ID であり、Alibaba Cloud Model Studio コンソールの [ワークスペース詳細] ページで確認できます。既存のドメインは引き続き完全に機能します。

サポート対象モデル

qwen3-maxqwen3-max-2026-01-23qwen3.7-maxqwen3.7-max-2026-05-20qwen3.7-max-2026-06-08qwen3.7-max-previewqwen3.7-max-2026-05-17qwen3.7-plusqwen3.7-plus-2026-05-26qwen3.6-plusqwen3.6-plus-2026-04-02qwen3.5-plusqwen3.5-plus-2026-02-15qwen3.5-plus-2026-04-20qwen3.6-flashqwen3.6-flash-2026-04-16qwen3.5-flashqwen3.5-flash-2026-02-23qwen3.6-35b-a3bqwen3.5-397b-a17bqwen3.5-122b-a10bqwen3.5-27bqwen3.5-35b-a3bqwen-plusqwen-flashqwen3-coder-plusqwen3-coder-flash、および qwen3-coder-next

エンドポイント

シンガポール

SDK 呼び出し構成 base_urlhttps://{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_urlhttps://{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_urlhttps://{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_urlhttps://{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に置き換えてください。

コード例

基本的な呼び出し

メッセージを送信し、応答を取得します。

Python

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)

Node.js

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

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": "Hi there!  I'm actually quite ......",
                    "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 フォーマット) を指定する必要があります。

Python

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"First response: {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"Second response: {response2.output_text}")

Node.js

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(`First response: ${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(`Second response: ${response2.output_text}`);
}

main();

Curl

# 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"
}'

2 回目の対話の応答例

{
  "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.effortenable_thinking よりも優先されます。enable_thinking は非推奨となるため、reasoning.effort を使用してください。

Python

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}")

Node.js

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

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    *   これらは小数です。\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    *   標準的な解釈:コンテキストがない場合、小数は数学的な値と見なされます。\n    *   よくある落とし穴:一部の人々は、小数を整数のように扱い (11 > 9)、9.11 > 9.9 と誤って考えることがあります。これは、初等数学における既知の認知バイアスまたは誤解です。\n    *   決定:数学的な答えを明確に提供しますが、関連性がある場合はバージョン管理のコンテキストにも言及するかもしれません (ただし、通常、この特定の質問は数学のテストです)。単純さを考えると、まず数学的な真実に固執します。\n\n4.  回答の策定:\n    *   直接的な回答:9.9 の方が大きいです。\n    *   説明:位の値を比較します。9.9 = 9.90、9.11 = 9.11。90/100 > 11/100。\n    *   トーン:親切で明確。\n\n5.  回答のドラフト作成 (内部独白/下書き):\n    *   OK、数学的には 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    *   数値的な回答を主とし、必要であればバージョンに関する注記を追加するかもしれません。しかし、シンプルに保つ方が良いでしょう。おそらく、これは小数の比較ロジックをテストするものです。\n    *   デフォルトとして数学的な値に固執しましょう。\n\n7.  最終的な推敲:\n    *   回答:9.9 の方が大きいです。\n    *   理由:小数を比較するときは、まず整数部分を見て、次に十分の一の位を見ます。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. 小数の比較を説明する。\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.90 は 9.11 よりも大きいからです。」\n    「それがバージョン番号である場合、通常、バージョン 9.11 はバージョン 9.9 よりも高いです。」\n    これで両方の側面をカバーできます。\n\n    待ってください、一般的な AI トレーニングを見ると、これは AI が小数を整数のように扱うかどうかを確認するための「引っかけ」問題であることがよくあります。正しい数学的な答えが重要です。\n\n    OK、最終的な出力構造:\n    1. 数学的な回答。\n    2. 簡単な説明。\n    3. コンテキストに関する注記 (バージョン)。\n\n    書きましょう。\n    「数学的な値の観点では、9.9 の方が大きいです。」\n    「小数を比較するときは、まず整数部分 (両方とも 9) を比較し、次に十分の一の位を比較します:9.9 の十分の一の位の数字は 9 ですが、9.11 の十分の一の位の数字は 1 です。9 > 1 なので、9.9 > 9.11 です。」\n    「ただし、これらがソフトウェアのバージョン番号である場合、通常、バージョン 9.11 はバージョン 9.9 よりも新しいと見なされます。」\n\n    これはバランスが取れています。\n\n    待ってください、もう一度指示を確認する必要があります。「現在の実際の時間を覚えておいてください...」。これは単なるシステムコンテキストです。関連性がない限り、回答で日付に言及する必要はありません。ここでは関連性がありません。\n\n    OK、生成の準備ができました。\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理由は次のとおりです:\n小数を比較するときは、まず整数部分 (両方とも 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"
            }
        ]
    }
}

ストリーム出力

モデルからリアルタイムでコンテンツを受信します。これは特に長文テキスト生成に役立ちます。

Python

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}")

Node.js

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

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 エクストラクターとコードインタープリターは期間限定で無料です。サポートされているツールについては、「ツール呼び出し」をご参照ください。

Python

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)

Node.js

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

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 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": "通義大規模言語モデル、全製品ポートフォリオ、AI ソリューション...",
            "urls": [
                "https://cn.aliyun.com/"
            ]
        },
        {
            "type": "message",
            "role": "assistant",
            "status": "completed",
            "content": [
                {
                    "type": "output_text",
                    "text": "Alibaba Cloud ウェブサイトからの主要情報:通義大規模言語モデル、クラウドコンピューティングサービス..."
                }
            ]
        }
    ],
    "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.7-maxqwen3.7-max-2026-05-20qwen3.7-max-2026-06-08qwen3-maxqwen3.7-plusqwen3.6-plusqwen3.5-plusqwen3.6-flashqwen3.5-flashqwen-plusqwen-flashqwen3-coder-plusqwen3-coder-flash

セッションキャッシュには、1024 トークン以上のプロンプト長が必要で、5 分後に有効期限が切れます。これは、明示的なキャッシュと同じ制約を共有します。

Python

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"First response: {response1.output_text}")

# 2 番目のリクエスト:previous_response_id を使用してコンテキストをリンクします。サーバーはキャッシュを自動的に管理します。
response2 = client.responses.create(
    model="qwen3.7-plus",
    input="それと GBDT の主な違いは何ですか?",
    previous_response_id=response1.id,
)
print(f"Second response: {response2.output_text}")

# キャッシュのヒット状況を確認
usage = response2.usage
print(f"入力トークン数: {usage.input_tokens}")
print(f"キャッシュされたトークン数: {usage.input_tokens_details.cached_tokens}")

Node.js

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(`First response: ${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(`Second response: ${response2.output_text}`);

    // キャッシュのヒット状況を確認
    console.log(`入力トークン数: ${response2.usage.input_tokens}`);
    console.log(`キャッシュされたトークン数: ${response2.usage.input_tokens_details.cached_tokens}`);
}

main();

curl

# 最初のリクエスト
# '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 に更新します。

Python

# Chat Completions API
completion = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)
print(completion.choices[0].message.content)

# Responses API - 同じメッセージ形式を使用可能
response = client.responses.create(
    model="qwen3.7-plus",
    input=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
)
print(response.output_text)

# Responses API - または、より簡潔な形式を使用
response = client.responses.create(
    model="qwen3.7-plus",
    input="Hello!"
)
print(response.output_text)

Node.js

// Chat Completions API
const completion = await client.chat.completions.create({
    model: "qwen3.7-plus",
    messages: [
        { role: "system", content: "You are a helpful assistant." },
        { role: "user", content: "Hello!" }
    ]
});
console.log(completion.choices[0].message.content);

// Responses API - 同じメッセージ形式を使用可能
const response = await client.responses.create({
    model: "qwen3.7-plus",
    input: [
        { role: "system", content: "You are a helpful assistant." },
        { role: "user", content: "Hello!" }
    ]
});
console.log(response.output_text);

// Responses API - または、より簡潔な形式を使用
const response2 = await client.responses.create({
    model: "qwen3.7-plus",
    input: "Hello!"
});
console.log(response2.output_text);

Curl

# 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": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ]
}'

# 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": "Hello!"
}'

2. 応答処理の更新

レスポンス API は、異なるレスポンス構造体を返します。output_text ショートカットを使用してテキスト出力を取得するか、output 配列を介して詳細情報にアクセスします。

応答の比較

# Chat Completions の応答
{
  "id": "chatcmpl-416b0ea5-e362-9fec-97c5-0a60b5d7xxx",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "こんにちは!お会いできてうれしいです〜 何かお手伝いできることはありますか?",
        "refusal": null,
        "role": "assistant",
        "function_call": null,
        "tool_calls": null
      }
    }
  ],
  "created": 1769416269,
  "model": "qwen3.7-plus",
  "object": "chat.completion",
  "service_tier": null,
  "system_fingerprint": null,
  "usage": {
    "completion_tokens": 14,
    "prompt_tokens": 22,
    "total_tokens": 36,
    "prompt_tokens_details": {
      "cached_tokens": 0
    }
  }
}
# Responses API の応答
{
  "id": "d69c735d-0f5e-4b6c-9c2a-8cab5eb14xxx",
  "created_at": 1769416269.0,
  "model": "qwen3.7-plus",
  "object": "response",
  "status": "completed",
  "output": [
    {
      "id": "msg_3426d3e5-8da7-4dd8-a6a5-7c2cd866xxx",
      "type": "message",
      "role": "assistant",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "text": "こんにちは!今日は 2026 年 1 月 26 日月曜日です。何かお手伝いできることはありますか? ",
          "annotations": []
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 34,
    "output_tokens": 25,
    "total_tokens": 59,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens_details": {
      "reasoning_tokens": 0
    }
  }
}

3. マルチターン対話の簡素化

Chat Completions API では、メッセージ履歴の配列を手動で管理する必要があります。Responses API は、previous_response_id パラメーターを使用して会話のコンテキストを自動的にリンクすることで、このプロセスを簡素化します。応答の id は 7 日間有効です。

Python

# Chat Completions - 手動でのメッセージ履歴管理
messages = [
    {"role": "system", "content": "You are a helpful assistant."},
    {"role": "user", "content": "フランスの首都はどこですか?"}
]
res1 = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=messages
)

# 応答を履歴に手動で追加
messages.append(res1.choices[0].message)
messages.append({"role": "user", "content": "その人口はどのくらいですか?"})

res2 = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=messages
)
# Responses API - previous_response_id による自動リンク
res1 = client.responses.create(
    model="qwen3.7-plus",
    input="フランスの首都はどこですか?"
)

# 前の応答 ID を渡すだけ
res2 = client.responses.create(
    model="qwen3.7-plus",
    input="その人口はどのくらいですか?",
    previous_response_id=res1.id
)

Node.js

// Chat Completions - 手動でのメッセージ履歴管理
let messages = [
    { role: "system", content: "You are a helpful assistant." },
    { role: "user", content: "フランスの首都はどこですか?" }
];
const res1 = await client.chat.completions.create({
    model: "qwen3.7-plus",
    messages
});

// 応答を履歴に手動で追加
messages = messages.concat([res1.choices[0].message]);
messages.push({ role: "user", content: "その人口はどのくらいですか?" });

const res2 = await client.chat.completions.create({
    model: "qwen3.7-plus",
    messages
});
// Responses API - previous_response_id による自動リンク
const res1 = await client.responses.create({
    model: "qwen3.7-plus",
    input: "フランスの首都はどこですか?"
});

// 前の応答 ID を渡すだけ
const res2 = await client.responses.create({
    model: "qwen3.7-plus",
    input: "その人口はどのくらいですか?",
    previous_response_id: res1.id
});

4. 組み込みツールの使用

Responses API には組み込みツールが含まれています。それらを tools パラメーターで指定します。Code Interpreter と Web 検索ツールは期間限定で無料です。詳細については、「ツール呼び出し」をご参照ください。

Python

# Chat Completions - ツールを自分で実装する必要があります
def web_search(query):
    # Web 検索ロジックを自分で実装する必要があります
    import requests
    r = requests.get(f"https://api.example.com/search?q={query}")
    return r.json().get("results", [])

completion = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[{"role": "user", "content": "現在のフランス大統領は誰ですか?"}],
    functions=[{
        "name": "web_search",
        "description": "Web で情報を検索する",
        "parameters": {
            "type": "object",
            "properties": {"query": {"type": "string"}},
            "required": ["query"]
        }
    }]
)
# Responses API - 組み込みツールを直接使用
response = client.responses.create(
    model="qwen3.7-plus",
    input="現在のフランス大統領は誰ですか?",
    tools=[{"type": "web_search"}]  # Web 検索を直接有効にする
)
print(response.output_text)

Node.js

// Chat Completions - ツールを自分で実装する必要があります
async function web_search(query) {
    const fetch = (await import('node-fetch')).default;
    const res = await fetch(`https://api.example.com/search?q=${query}`);
    const data = await res.json();
    return data.results;
}

const completion = await client.chat.completions.create({
    model: "qwen3.7-plus",
    messages: [{ role: "user", content: "現在のフランス大統領は誰ですか?" }],
    functions: [{
        name: "web_search",
        description: "Web で情報を検索する",
        parameters: {
            type: "object",
            properties: { query: { type: "string" } },
            required: ["query"]
        }
    }]
});
// Responses API - 組み込みツールを直接使用
const response = await client.responses.create({
    model: "qwen3.7-plus",
    input: "現在のフランス大統領は誰ですか?",
    tools: [{ type: "web_search" }]  // Web 検索を直接有効にする
});
console.log(response.output_text);

Curl

# Chat Completions - ツールを自分で実装する必要があります
# 外部検索 API の呼び出し例
curl https://api.example.com/search \
  -G \
  --data-urlencode "q=current president of France" \
  --data-urlencode "key=$SEARCH_API_KEY"
# 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": "現在のフランス大統領は誰ですか?",
    "tools": [{"type": "web_search"}]
}'

よくある質問

Q:マルチターン対話のコンテキストを渡す方法は?

A: 前回の成功したモデル応答の id を、次の会話リクエストで previous_response_id パラメーターとして渡します。

Q:「output_text」を出力できないのはなぜですか?

A:この属性は、1.99.2 など、一部のバージョンの OpenAI Python SDK には存在しません。このエラーを解決するには、SDK を最新バージョンに更新してください。