Назад ко всем статьям
Руководства

Вызов Qwen3.7 Plus через OpenAI SDK в совместимом режиме DashScope

23 июля 2026 г. · 27 мин чтения · Claude / GPT / Gemini

Редакционная обложка на кремовом фоне: терминал разработчика соединен тремя терракотовыми линиями маршрутизации с помеченным a

Qwen3.7 Plus достаточно дешев, чтобы тестировать его всерьез: по состоянию на 23 июля 2026 года Qwen Cloud указывает цену qwen3.7-plus как $0.40 за 1 млн входных токенов и $1.60 за 1 млн выходных токенов при объеме до 256K входных токенов, затем $1.20 за входные и $4.80 за выходные токены в диапазоне от 256K до 1M (цены Qwen Cloud). Это главная причина, почему такой порт стоит сделать до того, как вы начнете что-то переписывать.

Самое полезное здесь — форма API. Qwen Cloud документирует OpenAI-совместимый endpoint Chat Completions по адресу:

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

На собственной странице миграции сказано, что существующий код для OpenAI SDK можно переключить, изменив base_url, api_key и model, а в примерах используется model="qwen3.7-plus" (совместимость Qwen Cloud с OpenAI). Это значит, что большинство чат-приложений, eval-скриптов, небольших агентов и внутренних инструментов можно перенести за минуты. Внимания требуют параметры thinking, игнорируемые поля OpenAI, тарификация длинного контекста и поведение кэша.

Диаграмма миграции «до и после»: приложение на OpenAI SDK слева меняет только api_key, base_url и model на r

1. Настройте клиент

Установите официальный Python SDK OpenAI:

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).

Если вы поддерживаете код, который переключается между провайдерами, держите настройки провайдера вне места вызова:

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, пользовательские таймауты, повторы и доступ к raw-ответам; в README описаны автоматические повторы при ошибках соединения, а также ошибках 408, 409, 429 и 500-го уровня, плюс параметры max_retries и timeout (openai-python).

2. Перенесите параметры, а не только URL

Счастливый путь прост. Острые углы — в различиях параметров.

Qwen Cloud говорит, что Chat Completions API в целом совместим с Chat API OpenAI, но Qwen-специфичные параметры в Python SDK нужно передавать через extra_body (совместимость Qwen Cloud с OpenAI). Это важно для thinking, поиска и некоторых настроек sampling.

Пример с включенным 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 включает reasoning для гибридных моделей, thinking_budget ограничивает токены thinking, а токены thinking тарифицируются как выходные токены (Qwen Cloud thinking). Именно последний пункт разработчики часто упускают. Модель, которая «думает» 2 000 токенов перед тем, как написать ответ на 300 токенов, — это не вызов с 300 выходными токенами.

Также проверьте неподдерживаемые поля OpenAI перед переносом production-кода. Qwen Cloud сообщает, что поля, включая reasoning_effort, max_completion_tokens, metadata, store, verbosity, prompt_cache_key и ряд других, молча игнорируются в совместимом режиме Chat Completions (совместимость Qwen Cloud с OpenAI). Если ваше OpenAI-приложение зависит от одного из этих полей для контроля стоимости или поведения продукта, замените его явно.

3. Оцените стоимость длинного контекста до отправки

Разделение тарифов для qwen3.7-plus простое, но с последствиями.

Входные токены в одном запросе Цена входа / 1M Цена выхода / 1M
≤ 256K $0.40 $1.60
256K to 1M $1.20 $4.80

Источник: цены Qwen Cloud.

Страница модели в маркетплейсе для снапшота от 26 мая указывает qwen3.7-plus-2026-05-26 как модель с текстовым, image- и video-входом и текстовым выходом, а также определяет ее как снапшот от 26 мая 2026 года (страница модели Qwen Cloud). В changelog Qwen Cloud отдельно перечислены qwen3.7-plus и qwen3.7-plus-2026-05-26 под датой 1 июня 2026 года, а серия Plus описана как добавляющая улучшенные vision-language-возможности при сохранении сценариев для coding, tool use и продуктивных workflow (релизы моделей Qwen Cloud).

Для продуктового кода добавьте предварительную оценку. Вам не нужна идеальная токенизация, чтобы предотвратить случайную отправку запросов на 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

Второй вызов — это не просто «немного больше контекста». Он пересекает границу тарифного уровня.

Компактный график цен, сравнивающий тарифные уровни токенов qwen3.7-plus, с осью x, подписанной как input tokens per request from 0 to 1M, и осью y-

4. Используйте кэш, когда префиксы повторяются

Кэширование контекста — место, где Qwen может стать заметно дешевле для повторяющихся длинных промптов. Qwen Cloud документирует три режима кэша: explicit, implicit и session cache (кэш контекста Qwen Cloud).

Правила биллинга конкретные:

Режим кэша Стоимость создания Стоимость hit Минимум кэшируемых токенов
Explicit cache 125% от стандартной цены входа 10% от стандартной цены входа 1,024
Implicit cache 100% от стандартной цены входа 20% от стандартной цены входа 256
Session cache 125% от стандартной цены входа 10% от стандартной цены входа 1,024

Для qwen3.7-plus на уровне ≤256K это соответствует $0.08 за 1 млн токенов при hit implicit-cache, $0.50 за 1 млн токенов создания explicit-cache и $0.04 за 1 млн токенов чтения explicit-cache на странице модели (страница модели Qwen Cloud).

Используйте кэш для стабильных префиксов: документов с политиками, длинных system prompts, руководств по инструментам, схем или сводок репозитория. Не рассчитывайте, что он спасет промпты, где каждый запрос начинается по-разному. Qwen Cloud также указывает, что скидки Batch и cache нельзя совмещать в одном запросе (цены Qwen Cloud).

5. Production-чеклист и вариант с gateway

Перед переключением трафика проверьте такие случаи:

  1. Базовый non-streaming chat.
  2. Streaming chat.
  3. Режим thinking с extra_body.
  4. Tool calling, если ваше приложение использует functions.
  5. JSON-вывод, помня, что совместимый режим Qwen поддерживает json_object, а не OpenAI json_schema.
  6. Длинные промпты рядом с 256K входных токенов.
  7. Вызовы с повторяющимся префиксом, активно использующие кэш.
  8. Поведение повторов и таймаутов.

Для fallback-маршрутизации между семействами моделей простой путь — onehop. Измените один base URL OpenAI SDK на https://api.onehop.ai/v1 и используйте один gateway для GPT, Claude, Gemini и других моделей. OneHop документирует OpenAI-совместимый endpoint https://api.onehop.ai/v1, Anthropic-совместимый https://api.onehop.ai/anthropic и Vertex/Gemini-совместимый https://api.onehop.ai/vertex-ai (документация onehop). Он также позиционируется как более дешевый, чем first-party, а новые аккаунты получают $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 для одного workflow, GPT для другого и Gemini для мультимодальных тестов — без подключения трех биллинговых систем и трех конфигураций SDK. Начните здесь, чтобы вызывать Claude и другие модели через onehop, или зарегистрируйтесь и получите $10 бесплатного кредита.

6. Практический перенос

Перенос — это три строки, пока все не становится сложнее: base_url, api_key, model. После этого реальная работа — убрать игнорируемые параметры OpenAI, перенести настройки Qwen в extra_body и поставить жесткие ограничения вокруг длинного контекста.

Используйте qwen3.7-plus, когда вам нужна сбалансированная модель стоимости с длинным контекстом и поддержкой мультимодального входа. Оставляйте thinking выключенным для простой extraction и classification. Включайте его для code review, оркестрации инструментов или многошагового reasoning, задавая thinking_budget, чтобы стоимость не уплывала. Кэшируйте стабильные префиксы. Следите за границей уровня 256K.

Командам, которым в том же продукте также нужны Claude, GPT или Gemini, стоит держать готовым путь через gateway: вызывайте Claude и другие модели через onehop, а затем зарегистрируйтесь и получите $10 бесплатного кредита, когда захотите запустить настоящие smoke tests без добавления карты.