すべての記事へ戻る
ガイド

DashScope 互換モード経由で OpenAI SDK から Qwen3.7 Plus を呼び出す

2026年7月23日 · 21分で読めます · Claude / GPT / Gemini

クリーム色の背景に、開発者ターミナルからテラコッタ色の 3 本のルーティング線がラベル付きの a へ接続されているエディトリアル風カバー

Qwen3.7 Plus は、本格的に試すのに十分安価です。2026 年 7 月 23 日時点で、Qwen Cloud は qwen3.7-plus の料金を、入力トークン 256K までは 100 万入力トークンあたり $0.40、100 万出力トークンあたり $1.60、256K から 1M までは入力が $1.20、出力が $4.80 としています(Qwen Cloud pricing)。これこそが、何かを書き直す前にこの移行を行う価値がある主な理由です。

便利なのは API の形です。Qwen Cloud は、OpenAI 互換の Chat Completions エンドポイントを次のようにドキュメント化しています。

https://dashscope-intl.aliyuncs.com/compatible-mode/v1

同社の移行ページでは、既存の OpenAI SDK コードは base_urlapi_keymodel を変更することで切り替えられると説明しており、例では model="qwen3.7-plus" を使用しています(Qwen Cloud OpenAI compatibility)。つまり、多くのチャットアプリ、評価スクリプト、小さなエージェント、社内ツールは数分で移行できます。注意が必要なのは、thinking パラメータ、無視される OpenAI フィールド、長コンテキスト料金、キャッシュの挙動です。

移行前後の図。左側の OpenAI SDK アプリが api_key、base_url、model だけを変更して r へ移行する様子

1. クライアントをセットアップする

公式の OpenAI Python SDK をインストールします。

python -m pip install --upgrade openai

DashScope キーを設定します。

export DASHSCOPE_API_KEY="sk-your-dashscope-key"

そして、可能な限り最小の Chat Completions 呼び出しを行います。

# qwen_chat.py
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DASHSCOPE_API_KEY"],
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {"role": "system", "content": "You are a concise senior Python engineer."},
        {"role": "user", "content": "Write a Python function that chunks a list into size-n batches."},
    ],
    temperature=0.2,
)

print(completion.choices[0].message.content)
print(completion.usage)

実行します。

python qwen_chat.py

同じパターンは Node でも使えます。Qwen Cloud のクイック移行ページでは、JavaScript SDK についても baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"model: "qwen3.7-plus" の組み合わせが示されています(Qwen Cloud OpenAI compatibility)。

複数プロバイダーを切り替えるコードを保守している場合は、プロバイダー設定を呼び出し箇所の外に置いておきます。

PROVIDERS = {
    "qwen": {
        "api_key_env": "DASHSCOPE_API_KEY",
        "base_url": "https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
        "model": "qwen3.7-plus",
    }
}

def make_client(provider_name: str) -> tuple[OpenAI, str]:
    cfg = PROVIDERS[provider_name]
    return (
        OpenAI(
            api_key=os.environ[cfg["api_key_env"]],
            base_url=cfg["base_url"],
        ),
        cfg["model"],
    )

OpenAI SDK 自体は、base_url、カスタムタイムアウト、リトライ、生レスポンスへのアクセスをサポートしています。README では、接続エラー、408、409、429、500 番台エラーに対する自動リトライに加え、max_retriestimeout オプションが説明されています(openai-python)。

2. URL だけでなくパラメータも移行する

うまくいくケースは簡単です。厄介なのはパラメータ差分です。

Qwen Cloud によると、Chat Completions API は OpenAI の Chat API とおおむね互換ですが、Qwen 固有のパラメータは Python SDK では extra_body 経由で渡す必要があります(Qwen Cloud OpenAI compatibility)。これは、thinking、検索、一部のサンプリング制御で重要になります。

thinking を有効にした例です。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["DASHSCOPE_API_KEY"],
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

stream = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {"role": "user", "content": "Find the bug in this retry loop and explain the fix."}
    ],
    extra_body={
        "enable_thinking": True,
        "thinking_budget": 500,
    },
    stream=True,
)

for chunk in stream:
    if not chunk.choices:
        continue

    delta = chunk.choices[0].delta

    if getattr(delta, "reasoning_content", None):
        print(delta.reasoning_content, end="", flush=True)

    if getattr(delta, "content", None):
        print(delta.content, end="", flush=True)

Qwen の thinking ガイドでは、enable_thinking はハイブリッドモデルの推論をオンにし、thinking_budget は thinking トークンの上限を設定し、thinking トークンは出力トークンとして課金されると説明されています(Qwen Cloud thinking)。この最後の点を開発者は見落としがちです。300 トークンの回答を書く前に 2,000 トークン分考えるモデルは、300 トークン出力の呼び出しではありません。

また、本番コードを移行する前に、サポートされていない OpenAI フィールドも確認してください。Qwen Cloud によると、Chat Completions 互換モードでは、reasoning_effortmax_completion_tokensmetadatastoreverbosityprompt_cache_key などのフィールドは黙って無視されます(Qwen Cloud OpenAI compatibility)。OpenAI アプリがコスト制御やプロダクトの挙動のためにこれらのフィールドに依存している場合は、明示的に置き換えてください。

3. 送信前に長コンテキストの料金を見積もる

qwen3.7-plus の料金境界はシンプルですが、影響は大きいです。

1 リクエスト内の入力トークン 入力料金 / 1M 出力料金 / 1M
≤ 256K $0.40 $1.60
256K から 1M $1.20 $4.80

出典: Qwen Cloud pricing

5 月 26 日スナップショットのモデルマーケットプレイスページでは、qwen3.7-plus-2026-05-26 はテキスト、画像、動画入力に対応し、テキストを出力するモデルとして掲載されており、2026 年 5 月 26 日のスナップショットとされています(Qwen Cloud model page)。Qwen Cloud の changelog では別途、2026 年 6 月 1 日の項目に qwen3.7-plusqwen3.7-plus-2026-05-26 が記載され、Plus シリーズはコーディング、ツール利用、生産性ワークフローを維持しつつ、強化された vision-language 能力を追加したものと説明されています(Qwen Cloud model releases)。

プロダクトコードには、事前見積もりを追加してください。900K トークンの呼び出しが誤って高額な料金帯に入るのを防ぐために、完全なトークナイズは不要です。

def estimate_qwen37_plus_cost(input_tokens: int, output_tokens: int) -> float:
    if input_tokens <= 256_000:
        input_per_m = 0.40
        output_per_m = 1.60
    else:
        input_per_m = 1.20
        output_per_m = 4.80

    return (input_tokens / 1_000_000 * input_per_m) + (
        output_tokens / 1_000_000 * output_per_m
    )

print(estimate_qwen37_plus_cost(180_000, 4_000))  # 0.0784
print(estimate_qwen37_plus_cost(400_000, 4_000))  # 0.4992

2 つ目の呼び出しは単に「コンテキストが少し増えた」だけではありません。料金帯の境界を越えています。

qwen3.7-plus のトークン料金帯を比較するコンパクトな価格チャート。x 軸は 1 リクエストあたりの入力トークン数 0 から 1M、y- とラベル付けされている

4. プレフィックスが繰り返される場合はキャッシュを使う

コンテキストキャッシュは、長いプロンプトを繰り返す場合に Qwen を実質的にかなり安くできる部分です。Qwen Cloud は、明示的キャッシュ、暗黙的キャッシュ、セッションキャッシュの 3 つのキャッシュモードをドキュメント化しています(Qwen Cloud context cache)。

課金ルールは具体的です。

キャッシュモード 作成コスト ヒットコスト 最小キャッシュトークン数
明示的キャッシュ 標準入力の 125% 標準入力の 10% 1,024
暗黙的キャッシュ 標準入力の 100% 標準入力の 20% 256
セッションキャッシュ 標準入力の 125% 標準入力の 10% 1,024

qwen3.7-plus の ≤256K 料金帯では、モデルページ上で、これは暗黙的キャッシュのヒットトークン 100 万あたり $0.08、明示的キャッシュ作成トークン 100 万あたり $0.50、明示的キャッシュ読み取りトークン 100 万あたり $0.04 に相当します(Qwen Cloud model page)。

キャッシュは、ポリシードキュメント、長いシステムプロンプト、ツールマニュアル、スキーマ、リポジトリ要約など、安定したプレフィックスに使ってください。すべてのリクエストが異なる内容で始まるようなプロンプトを救ってくれるとは期待しないでください。Qwen Cloud はまた、Batch とキャッシュの割引は同じリクエストで併用できないとも述べています(Qwen Cloud pricing)。

5. 本番チェックリストとゲートウェイの選択肢

トラフィックを切り替える前に、次のケースをテストしてください。

  1. 基本的な非ストリーミングチャット。
  2. ストリーミングチャット。
  3. extra_body を使った thinking モード。
  4. アプリが functions を使っている場合のツール呼び出し。
  5. JSON 出力。Qwen 互換モードは json_object をサポートしますが、OpenAI の json_schema はサポートしない点に注意してください。
  6. 入力トークンが 256K 付近の長いプロンプト。
  7. キャッシュを多用する、プレフィックスが繰り返される呼び出し。
  8. リトライとタイムアウトの挙動。

モデルファミリーをまたいだフォールバックルーティングには、onehop が簡単です。OpenAI SDK の base URL を 1 つ https://api.onehop.ai/v1 に変更し、GPT、Claude、Gemini、その他のモデルに対して 1 つのゲートウェイを使います。OneHop は、OpenAI 互換の https://api.onehop.ai/v1、Anthropic 互換の https://api.onehop.ai/anthropic、Vertex/Gemini 互換の https://api.onehop.ai/vertex-ai エンドポイントをドキュメント化しています(onehop docs)。また、ファーストパーティより安価であると位置付けられており、新規アカウントにはカード不要で $10 分が無料付与されます。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ONEHOP_API_KEY"],
    base_url="https://api.onehop.ai/v1",
)

response = client.chat.completions.create(
    model="openai/gpt-5.5",
    messages=[{"role": "user", "content": "Summarize this incident report in 5 bullets."}],
)

print(response.choices[0].message.content)

これは、上で説明した Qwen 固有の作業を置き換えるものではありません。アプリがあるワークフローには Claude、別のワークフローには GPT、マルチモーダルテストには Gemini を必要とする場合に、3 つの課金システムと 3 つの SDK 設定を配線せずに済む、よりすっきりした経路を提供します。まずは onehop で Claude などのモデルを呼び出す ところから始めるか、登録して $10 分の無料クレジットを受け取る ことができます。

6. 実践的な移行

移行は、そうでなくなるまでは 3 行です。base_urlapi_keymodel。その後の本当の作業は、無視される OpenAI パラメータを取り除き、Qwen の制御を extra_body に移し、長コンテキストに厳格なガードを設けることです。

長コンテキストとマルチモーダル入力サポートを備えた、バランスのよいコストモデルが欲しい場合は qwen3.7-plus を使ってください。単純な抽出や分類では thinking をオフにしておきます。コードレビュー、ツールオーケストレーション、多段推論では、コストがずれないよう thinking_budget を設定してオンにします。安定したプレフィックスはキャッシュします。256K の料金帯境界に注意してください。

同じプロダクト内で Claude、GPT、Gemini も必要とするチームは、ゲートウェイ経路を用意しておきましょう。onehop で Claude などのモデルを呼び出す ところから始め、カードを追加せずに実際のスモークテストを行いたくなったら 登録して $10 分の無料クレジットを受け取る とよいでしょう。