API Qwen за 30 минут: ключ, бесплатная квота, первые запросы

Урок 3 из 7 курса «Qwen на практике»: неофициальный курс AI University о Qwen. Этот урок бесплатный.

Этот урок переводит вас от бесед в Qwen Studio (урок 2) к работе с Qwen через программный интерфейс. За полчаса вы зарегистрируетесь на одной из двух платформ, получите ключ API, включите защиту от случайных трат и отправите первые запросы из командной строки и из кода на Python. Заодно разберётесь, как считать стоимость запроса по цифрам из ответа модели и что делать с типичными ошибками вроде 401 или исчерпанной квоты. Модель qwen3.8-flash, которую мы возьмём для тренировок, стоит на 04.10.2026 всего 0,15 доллара за миллион входных токенов, так что экспериментировать можно без тревоги за счёт.

Неофициальный курс AI University. Тексты, примеры и задания написаны нашей командой по открытой документации Qwen, QwenCloud и Alibaba Cloud Model Studio и опыту разработчиков на 04.10.2026; курс не связан с компанией Alibaba Cloud и не одобрен ею. Модели и цены меняются, сверяйтесь с документацией.

QwenCloud и Model Studio: выбираем платформу

У Qwen на 04.10.2026 есть два международных способа получить доступ по API, и прежде чем писать код, стоит понять разницу.

QwenCloud (qwencloud.com) это отдельная платформа Qwen, рассчитанная именно на разработчиков. Вход делается через GitHub или почту, аккаунт Alibaba Cloud не нужен. Адрес для OpenAI-совместимого клиента:

https://maas.qwencloudapi.com/compatible-mode/v1

Alibaba Cloud Model Studio это облачная платформа Alibaba Cloud, где модели Qwen соседствуют с другими сервисами компании. Вход через аккаунт Alibaba Cloud, а адрес привязан к конкретному рабочему пространству и региону:

https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1

Здесь {WorkspaceId} нужно подставить своим идентификатором рабочего пространства, а ap-southeast-1 это код региона Singapore (International), с которым мы и будем работать в этом курсе. У Model Studio есть и другие регионы: Китай (Пекин), Германия (Франкфурт), Япония (Токио), Гонконг, США (Вирджиния). Важно помнить: у каждого региона свой адрес, свой ключ и свой список моделей, они не взаимозаменяемы. Если вы создали ключ в одном регионе, а обращаетесь по адресу другого, получите ошибку 401 invalid_api_key, даже если сам ключ действующий. Для курса и для большинства задач за пределами Китая достаточно Singapore (International).

Отдельно стоит сказать про старый домен dashscope-intl.aliyuncs.com, который встречается во многих старых инструкциях и даже в части официальных примеров 2026 года. Он продолжает работать, но после 30 сентября 2026 года новые функции на нём не появляются, и рекомендуется переходить на домен вида {WorkspaceId}.{region}.maas.aliyuncs.com. Миграция сводится к замене адреса в коде, остальная логика не меняется. Если вы начинаете с нуля, разумно сразу брать новый адрес и не привыкать к устаревающему.

Обе платформы используют одну и ту же переменную окружения для ключа, DASHSCOPE_API_KEY, и один и тот же OpenAI-совместимый формат запросов, поэтому код из этого урока подойдёт в обоих случаях, разница только в base_url. Если вы уже работали с китайским 百炼 (bailian.console.aliyun.com), знайте, что это тот же продукт Model Studio, но в регионе материкового Китая, со своим адресом и своей бесплатной квотой, не связанной с международной.

Для этого курса мы по умолчанию ориентируемся на QwenCloud или на Model Studio International, как на более простые точки входа для специалистов вне Китая.

Регистрация и ключ API

Процесс в обоих случаях похож на регистрацию в любом облачном сервисе.

На QwenCloud: откройте home.qwencloud.com и войдите через GitHub или почту. В разделе API Keys создайте ключ кнопкой «Create API key». Полный ключ показывается только один раз, поэтому сразу сохраните его в надёжном месте. Отдельно обратите внимание: чтобы активировать бесплатную квоту, платформа просит заполнить платёжные данные, даже если вы не планируете платить сразу.

На Model Studio: с 15 сентября 2026 года, по официальной документации, нужно заполнить данные аккаунта ещё до первого использования сервиса. Дальше ключ создаётся в консоли рабочего пространства.

Полученный ключ нужно положить в переменную окружения DASHSCOPE_API_KEY, именно её ждут и официальные примеры, и код в этом уроке. В Linux и macOS (bash):

export DASHSCOPE_API_KEY="ваш_ключ_сюда"

В Windows (PowerShell):

$env:DASHSCOPE_API_KEY = "ваш_ключ_сюда"

Обе команды действуют только для текущего сеанса терминала. Для постоянного хранения используйте файл профиля вашей оболочки или системные переменные окружения Windows, но ни в коем случае не вписывайте ключ прямо в код: во всех примерах курса ключ читается только из переменной окружения.

По поводу оплаты: документация QwenCloud перечисляет карты Visa, Mastercard, JCB, AmEx, UnionPay, Diners, Discover, а также PayPal, при этом для привязки карты нужен номер телефона с подтверждением по SMS. Списание идёт автоматически при достижении заданного порога, а при задержке платежа даётся 15 дней отсрочки. Отметим отдельно: принимает ли платформа карты, выпущенные в России, ни один из доступных материалов не подтверждает и не опровергает, а значит это не входит в рамки официальной документации. Если вам важна оплата именно российской картой, проверьте это самостоятельно перед тем, как планировать расходы, и не рассчитывайте на то, что курс даёт такую гарантию.

Также стоит знать про проверку личности (KYC): если система риск-контроля сработает на вашем аккаунте, перед покупкой токенов или пополнением баланса потребуется пройти проверку.

Бесплатная квота и защита от случайных трат

Новым пользователям обеих платформ на 04.10.2026 положена бесплатная квота на 90 дней с момента активации сервиса. Срок не ставится на паузу и не продлевается, а повторная регистрация нового аккаунта не даёт новую квоту.

Квота считается отдельно на каждую модель и, как указано в документации, обычно составляет около одного миллиона токенов на модель, причём вход и выход списываются из одного и того же остатка. У моделей для картинок и видео единица другая: например, qwen-image-3.0(-pro) даёт 10 бесплатных изображений, а wan3.0-video 30 секунд видео. Снимки моделей с конкретной датой в названии и версия без даты в документации считаются разными моделями для целей квоты, это стоит иметь в виду, если вы вызываете конкретный снимок.

Критически важное условие: бесплатная квота на Model Studio действует только для моделей в регионе Singapore с областью развёртывания International. Если вы случайно работаете в другом регионе или с другой областью развёртывания, квота не применяется, а счёт выставляется по обычным тарифам.

Квота появляется на аккаунте не мгновенно, документация называет срок до двух часов после активации, так что сразу после регистрации не паникуйте, если баланс квоты пока пустой.

Отдельного внимания заслуживает переключатель Free Quota Only, который в документации называют «worry-free mode», режимом без забот. По умолчанию он выключен. Это значит, что после исчерпания бесплатной квоты запросы продолжат выполняться, но уже за деньги с привязанного способа оплаты. Если вы делаете первые шаги и не хотите случайно получить счёт, включите Free Quota Only на странице Free Quota в консоли. После исчерпания квоты при включённом режиме вызовы начнут завершаться ошибкой AllocationQuota.FreeTierOnly, без каких-либо списаний. Учтите, что изменение этой настройки вступает в силу не мгновенно, а выключение, по документации, синхронизируется около 30 минут, так что не рассчитывайте на мгновенный эффект, если решите вернуть платный режим.

Отдельно документация предупреждает: если вы тестируете API через IDE-плагины вроде Cline или CodeBuddy, они часто отправляют модели весь контекст открытого файла целиком. В приведённом в документации примере 2000 символов кода превратились в 1758 токенов против 26 токенов у короткого текстового сообщения, разница почти в 67 раз. Для первых опытов с квотой лучше отправлять короткие, осознанные запросы, а не весь проект целиком.

QwenCloud и Model Studio по-разному информируют об остатке квоты: Model Studio присылает уведомления при остатке 20 процентов и при полном исчерпании, а в документации QwenCloud прямо сказано, что на 04.10.2026 механизма уведомлений там нет. Это разные продукты с разными возможностями, так что если вы выбрали QwenCloud, привыкайте проверять остаток квоты вручную в консоли, не полагаясь на уведомления.

Первый запрос: curl и Python

Самый быстрый способ убедиться, что ключ работает, это отправить запрос через curl.

curl https://maas.qwencloudapi.com/compatible-mode/v1/chat/completions \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen3.8-flash",
    "messages": [
      {"role": "user", "content": "Назови одно практическое применение больших языковых моделей в малом бизнесе."}
    ]
  }'

Мы взяли qwen3.8-flash специально: на 04.10.2026 это одна из самых дешёвых актуальных моделей Qwen, 0,15 доллара за миллион входных токенов и 0,47 доллара за миллион выходных, что делает её удобной для тренировок и отладки кода, прежде чем переходить на более мощные и дорогие модели вроде qwen3.8-max.

Теперь то же самое на Python через библиотеку openai, которая понимает формат Qwen благодаря совместимому режиму:

import os
from openai import OpenAI

# ключ читаем только из переменной окружения, никогда не пишем его в код
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://maas.qwencloudapi.com/compatible-mode/v1",
)

response = client.chat.completions.create(
    model="qwen3.8-flash",
    messages=[
        {"role": "user", "content": "Назови одно практическое применение больших языковых моделей в малом бизнесе."}
    ],
)

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

Если вы работаете через Model Studio, поменяйте только base_url на адрес вашего рабочего пространства и региона, остальной код не меняется.

Важная особенность, о которой часто забывают разработчики, впервые работающие с API Qwen: модель не хранит историю диалога на своей стороне. API без состояния, это значит, что при каждом запросе вы должны сами передавать весь нужный контекст в списке messages. Если вы хотите продолжить разговор, добавьте в список предыдущий ответ модели с ролью assistant и новое сообщение пользователя:

messages = [
    {"role": "user", "content": "Назови одно применение LLM в малом бизнесе."},
    {"role": "assistant", "content": "Например, автоматический ответ на частые вопросы клиентов в чате."},
    {"role": "user", "content": "А как оценить, окупается ли это?"},
]

response = client.chat.completions.create(model="qwen3.8-flash", messages=messages)
print(response.choices[0].message.content)

Такой подход даёт гибкость: вы сами решаете, что включать в контекст, можете урезать старые сообщения, чтобы не платить за лишние токены, или наоборот сохранять полную историю для сложных задач.

Сколько это стоит: считаем токены и деньги

Главное преимущество API перед интерфейсом Qwen Studio в том, что вы точно видите, за что платите. Каждый ответ модели содержит объект usage с числом входных и выходных токенов. Напишем небольшую функцию, которая считает примерную стоимость запроса по актуальным ценам на 04.10.2026 для региона Singapore (International):

# цены указаны в долларах за один миллион токенов, актуальны на 04.10.2026
# для региона Singapore (International); перед реальными расчётами
# сверяйтесь с текущей страницей цен, тарифы меняются
PRICES_PER_MILLION = {
    "qwen3.8-max": {"input": 2.0, "output": 6.0},
    "qwen3.7-plus": {"input": 0.4, "output": 1.6},  # до 256K контекста
    "qwen3.8-flash": {"input": 0.15, "output": 0.47},
}


def estimate_cost(usage, model: str) -> float:
    """Считает примерную стоимость запроса в долларах по данным usage.
    Токены размышлений (reasoning) в ответе уже включены в число
    выходных токенов, отдельно их вычитать не нужно."""
    prices = PRICES_PER_MILLION[model]
    input_cost = usage.prompt_tokens / 1_000_000 * prices["input"]
    output_cost = usage.completion_tokens / 1_000_000 * prices["output"]
    return input_cost + output_cost


response = client.chat.completions.create(
    model="qwen3.8-flash",
    messages=[{"role": "user", "content": "Коротко объясни, что такое токенизация."}],
)

cost = estimate_cost(response.usage, "qwen3.8-flash")
print(f"Входных токенов: {response.usage.prompt_tokens}")
print(f"Выходных токенов: {response.usage.completion_tokens}")
print(f"Примерная стоимость: ${cost:.6f}")

Несколько тонкостей, которые стоит держать в голове при планировании расходов.

Во-первых, токены размышлений считаются выходными. Если вы включите режим рассуждений (подробно о нём в уроке 4), модель будет генерировать внутренние размышления перед финальным ответом, и это тоже войдёт в completion_tokens, а значит, и в стоимость по цене выхода.

Во-вторых, цена может зависеть от объёма контекста запроса. Например, qwen3.7-plus стоит 0,4 доллара за вход и 1,6 доллара за выход при контексте до 256 тысяч токенов, но дороже при большем объёме. Весь запрос при этом тарифицируется по одному уровню, определяемому по объёму входа, а не разбивается на части по разным ценам.

В-третьих, есть два способа сэкономить. Batch API, пакетная обработка запросов без требования мгновенного ответа, стоит 50 процентов от обычной цены. Кэширование контекста даёт скидку при повторном использовании одного и того же префикса промпта: попадание в кэш стоит 10 процентов от цены входа, хотя создание явного кэша обходится дороже обычного входа. Важно, что batch и кэш не складываются друг с другом, это альтернативные способы экономии, а не взаимодополняющие.

В-четвёртых, встроенные инструменты модели, например веб-поиск, тарифицируются отдельно от токенов, обычно по числу вызовов, а не по объёму текста. Для курса это пока не критично, подробнее об инструментах поговорим в уроке 4.

И последнее: ошибочные вызовы, которые завершились сбоем на стороне сервиса, не тарифицируются, так что повторные попытки после технической ошибки не удваивают счёт.

Типичные ошибки и как их обрабатывать

При первых запросах почти неизбежно встретится одна из нескольких стандартных ошибок, и полезно заранее понимать их причину.

Ошибка 401 с кодом invalid_api_key означает, что ключ не подходит; частая причина: ключ одного региона используется с адресом другого. Напомним: у каждого региона Model Studio свой адрес, свой ключ и свой список моделей, их нельзя смешивать. Решение простое: проверьте, что base_url в коде соответствует региону, в котором вы создавали ключ.

Ошибка AllocationQuota.FreeTierOnly появляется, когда включён режим Free Quota Only, а бесплатная квота на эту модель уже исчерпана. Это не сбой, а сознательная защита, которую вы сами включили: чтобы продолжить работу с моделью, нужно либо выключить Free Quota Only и перейти на платные запросы, либо выбрать другую модель, на которой квота ещё осталась.

Ошибка модерации, связанная с кодом data_inspection_failed, означает, что запрос или ответ не прошли автоматическую проверку содержимого. Документация прямо говорит, что все запросы к API проходят автоматическую модерацию входа и выхода. Если вы столкнулись с такой ошибкой на безобидном, на ваш взгляд, запросе, попробуйте переформулировать текст, убрать потенциально чувствительные формулировки или разбить задачу на более нейтральные части.

Лимиты скорости, RPM (запросов в минуту) и TPM (токенов в минуту), действуют на уровне аккаунта и распространяются на все ваши ключи и рабочие пространства сразу. При превышении лимита сервис обычно возвращает ошибку, указывающую на превышение частоты запросов. Разумная практика в коде, особенно если вы отправляете запросы в цикле, это обработка такой ошибки с паузой и повторной попыткой:

import time
from openai import APIError, RateLimitError

def ask_with_retry(client, model, messages, max_attempts=3):
    """Отправляет запрос с несколькими попытками при временных ошибках."""
    for attempt in range(1, max_attempts + 1):
        try:
            return client.chat.completions.create(model=model, messages=messages)
        except RateLimitError:
            # превышен лимит скорости, ждём и пробуем снова
            wait = 2 ** attempt  # пауза растёт с каждой попыткой
            print(f"Лимит скорости, пауза {wait} с, попытка {attempt}")
            time.sleep(wait)
        except APIError as error:
            print(f"Ошибка API: {error}")
            raise
    raise RuntimeError("Не удалось получить ответ после нескольких попыток")

Такой подход с постепенно растущей паузой между попытками (экспоненциальная задержка) хорошо работает и для временных сбоев сети, и для кратковременных превышений лимита, хотя он не поможет с исчерпанной квотой или с проблемами модерации, это сущностно другие причины отказа, и для них нужна не пауза, а изменение логики запроса.

Попробуйте сами

  1. Зарегистрируйтесь на QwenCloud или в Model Studio (регион Singapore), создайте ключ API и положите его в переменную DASHSCOPE_API_KEY. Отправьте первый запрос к модели qwen3.8-flash любым способом, curl или Python, и получите осмысленный ответ. Критерий успеха: в терминале напечатался текст ответа модели, а не сообщение об ошибке.

  2. Включите переключатель Free Quota Only в консоли выбранной платформы. Отправьте несколько запросов подряд к одной и той же модели и проверьте остаток бесплатной квоты в консоли. Критерий успеха: вы нашли в консоли страницу с состоянием квоты и видите, как расходуются токены после каждого запроса.

  3. Возьмите функцию estimate_cost из раздела про деньги, отправьте через неё три разных запроса (короткий, средний и длинный по объёму текста) и сравните полученную стоимость. Критерий успеха: вы вывели на экран число входных и выходных токенов и примерную стоимость для каждого из трёх запросов и видите, что стоимость растёт вместе с объёмом текста.

Итоги

  • Для доступа к API Qwen на 04.10.2026 есть две международные платформы, QwenCloud и Alibaba Cloud Model Studio, с общим форматом запросов, но разными адресами и правилами, при этом регион, ключ и список моделей Model Studio не переносятся между собой.
  • Ключ хранится в переменной окружения DASHSCOPE_API_KEY и никогда не должен попадать в код напрямую; способ оплаты поддерживает основные международные карты и PayPal, а работа российских карт не проверена и требует самостоятельной проверки.
  • Новым пользователям положена бесплатная квота на 90 дней, примерно миллион токенов на модель, только в регионе Singapore, и для защиты от неожиданного счёта стоит сразу включить переключатель Free Quota Only.
  • API Qwen не хранит историю диалога на своей стороне, всю нужную историю сообщений нужно передавать в запросе самостоятельно.
  • Стоимость запроса считается по полям usage в ответе, при этом токены размышлений входят в стоимость выхода, а batch-обработка и кэширование контекста дают скидку, но не суммируются друг с другом.
  • Типичные ошибки, 401 из-за несовпадения региона, исчерпанная квота, отказ модерации и превышение лимита скорости, имеют разную природу и требуют разных решений: от смены адреса до паузы с повторной попыткой.

Официальные материалы Qwen

Полезные гиды