Skip to Content
Руководство для пользователейКонфигурацияПровайдеры моделей

Провайдеры моделей

Qwen Code позволяет настраивать несколько провайдеров моделей через параметр modelProviders в файле settings.json. Это позволяет переключаться между различными AI-моделями и провайдерами с помощью команды /model.

Обзор

Используйте modelProviders для объявления списков моделей по типам аутентификации, между которыми можно переключаться через меню /model. Ключи должны быть валидными типами аутентификации (openai, anthropic, gemini и т.д.). Каждая запись требует указания id и обязательно должна содержать envKey, а также опциональные name, description, baseUrl и generationConfig. Учетные данные никогда не сохраняются в настройках; среда выполнения считывает их из process.env[envKey]. Модели Qwen OAuth остаются захардкоженными и не могут быть переопределены.

Note

Только команда /model предоставляет доступ к нестандартным типам аутентификации. Anthropic, Gemini и другие должны быть определены через modelProviders. Команда /auth отображает Qwen OAuth, Alibaba Cloud Coding Plan и API Key как встроенные варианты аутентификации.

Warning

Дублирование ID моделей в рамках одного authType: Определение нескольких моделей с одинаковым id для одного authType (например, две записи с "id": "gpt-4o" в openai) в настоящее время не поддерживается. При наличии дубликатов применяется первое вхождение, а последующие пропускаются с предупреждением. Обратите внимание, что поле id используется как идентификатор конфигурации и как фактическое имя модели, отправляемое в API, поэтому использование уникальных ID (например, gpt-4o-creative, gpt-4o-balanced) не является рабочим обходным путем. Это известное ограничение, которое мы планируем исправить в будущих релизах.

Примеры конфигурации по типам аутентификации

Ниже приведены подробные примеры конфигурации для различных типов аутентификации, демонстрирующие доступные параметры и их комбинации.

Поддерживаемые типы аутентификации

Ключи объекта modelProviders должны быть валидными значениями authType. В настоящее время поддерживаются следующие типы:

Auth TypeОписание
openaiOpenAI-совместимые API (OpenAI, Azure OpenAI, локальные серверы инференса, такие как vLLM/Ollama)
anthropicAnthropic Claude API
geminiGoogle Gemini API
qwen-oauthQwen OAuth (захардкожен, нельзя переопределить в modelProviders)

[!warning] Если указан невалидный ключ типа аутентификации (например, опечатка вроде "openai-custom"), конфигурация будет молча пропущена, и модели не появятся в меню /model. Всегда используйте один из поддерживаемых значений, перечисленных выше.

SDK, используемые для API-запросов

Qwen Code использует следующие официальные SDK для отправки запросов каждому провайдеру:

Auth TypeSDK Package
openaiopenai — официальный OpenAI Node.js SDK
anthropic@anthropic-ai/sdk — официальный Anthropic SDK
gemini@google/genai — официальный Google GenAI SDK
qwen-oauthopenai с кастомным провайдером (совместим с DashScope)

Это означает, что настраиваемый вами baseUrl должен быть совместим с ожидаемым форматом API соответствующего SDK. Например, при использовании типа аутентификации openai эндпоинт должен принимать запросы в формате OpenAI API.

OpenAI-совместимые провайдеры (openai)

Этот тип аутентификации поддерживает не только официальный API OpenAI, но и любые OpenAI-совместимые эндпоинты, включая агрегаторы моделей, такие как OpenRouter.

{ "env": { "OPENAI_API_KEY": "sk-your-actual-openai-key-here", "OPENROUTER_API_KEY": "sk-or-your-actual-openrouter-key-here" }, "modelProviders": { "openai": [ { "id": "gpt-4o", "name": "GPT-4o", "envKey": "OPENAI_API_KEY", "baseUrl": "https://api.openai.com/v1", "generationConfig": { "timeout": 60000, "maxRetries": 3, "enableCacheControl": true, "contextWindowSize": 128000, "modalities": { "image": true }, "customHeaders": { "X-Client-Request-ID": "req-123" }, "extra_body": { "enable_thinking": true, "service_tier": "priority" }, "samplingParams": { "temperature": 0.2, "top_p": 0.8, "max_tokens": 4096, "presence_penalty": 0.1, "frequency_penalty": 0.1 } } }, { "id": "gpt-4o-mini", "name": "GPT-4o Mini", "envKey": "OPENAI_API_KEY", "baseUrl": "https://api.openai.com/v1", "generationConfig": { "timeout": 30000, "samplingParams": { "temperature": 0.5, "max_tokens": 2048 } } }, { "id": "openai/gpt-4o", "name": "GPT-4o (via OpenRouter)", "envKey": "OPENROUTER_API_KEY", "baseUrl": "https://openrouter.ai/api/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "samplingParams": { "temperature": 0.7 } } } ] } }

Anthropic (anthropic)

{ "env": { "ANTHROPIC_API_KEY": "sk-ant-your-actual-anthropic-key-here" }, "modelProviders": { "anthropic": [ { "id": "claude-3-5-sonnet", "name": "Claude 3.5 Sonnet", "envKey": "ANTHROPIC_API_KEY", "baseUrl": "https://api.anthropic.com/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "contextWindowSize": 200000, "samplingParams": { "temperature": 0.7, "max_tokens": 8192, "top_p": 0.9 } } }, { "id": "claude-3-opus", "name": "Claude 3 Opus", "envKey": "ANTHROPIC_API_KEY", "baseUrl": "https://api.anthropic.com/v1", "generationConfig": { "timeout": 180000, "samplingParams": { "temperature": 0.3, "max_tokens": 4096 } } } ] } }

Google Gemini (gemini)

{ "env": { "GEMINI_API_KEY": "AIza-your-actual-gemini-key-here" }, "modelProviders": { "gemini": [ { "id": "gemini-2.0-flash", "name": "Gemini 2.0 Flash", "envKey": "GEMINI_API_KEY", "baseUrl": "https://generativelanguage.googleapis.com", "capabilities": { "vision": true }, "generationConfig": { "timeout": 60000, "maxRetries": 2, "contextWindowSize": 1000000, "schemaCompliance": "auto", "samplingParams": { "temperature": 0.4, "top_p": 0.95, "max_tokens": 8192, "top_k": 40 } } } ] } }

Локальные self-hosted модели (через OpenAI-совместимый API)

Большинство локальных серверов инференса (vLLM, Ollama, LM Studio и др.) предоставляют OpenAI-совместимый API-эндпоинт. Настройте их, используя тип аутентификации openai с локальным baseUrl:

{ "env": { "OLLAMA_API_KEY": "ollama", "VLLM_API_KEY": "not-needed", "LMSTUDIO_API_KEY": "lm-studio" }, "modelProviders": { "openai": [ { "id": "qwen2.5-7b", "name": "Qwen2.5 7B (Ollama)", "envKey": "OLLAMA_API_KEY", "baseUrl": "http://localhost:11434/v1", "generationConfig": { "timeout": 300000, "maxRetries": 1, "contextWindowSize": 32768, "samplingParams": { "temperature": 0.7, "top_p": 0.9, "max_tokens": 4096 } } }, { "id": "llama-3.1-8b", "name": "Llama 3.1 8B (vLLM)", "envKey": "VLLM_API_KEY", "baseUrl": "http://localhost:8000/v1", "generationConfig": { "timeout": 120000, "maxRetries": 2, "contextWindowSize": 128000, "samplingParams": { "temperature": 0.6, "max_tokens": 8192 } } }, { "id": "local-model", "name": "Local Model (LM Studio)", "envKey": "LMSTUDIO_API_KEY", "baseUrl": "http://localhost:1234/v1", "generationConfig": { "timeout": 60000, "samplingParams": { "temperature": 0.5 } } } ] } }

Для локальных серверов, не требующих аутентификации, можно использовать любое placeholder-значение для API-ключа:

# Для Ollama (аутентификация не требуется) export OLLAMA_API_KEY="ollama" # Для vLLM (если аутентификация не настроена) export VLLM_API_KEY="not-needed"
Note

Параметр extra_body поддерживается только для OpenAI-совместимых провайдеров (openai, qwen-oauth). Для провайдеров Anthropic и Gemini он игнорируется.

Note

О envKey: Поле envKey указывает имя переменной окружения, а не фактическое значение API-ключа. Чтобы конфигурация работала, необходимо убедиться, что соответствующая переменная окружения установлена с вашим реальным API-ключом. Есть два способа сделать это:

  • Вариант 1: Использование файла .env (рекомендуется для безопасности):
    # ~/.qwen/.env (или корень проекта) OPENAI_API_KEY=sk-your-actual-key-here
    Обязательно добавьте .env в .gitignore, чтобы случайно не закоммитить секреты.
  • Вариант 2: Использование поля env в settings.json (как показано в примерах выше):
    { "env": { "OPENAI_API_KEY": "sk-your-actual-key-here" } }

Каждый пример провайдера включает поле env для демонстрации того, как должен быть настроен API-ключ.

Alibaba Cloud Coding Plan

Alibaba Cloud Coding Plan предоставляет предварительно настроенный набор моделей Qwen, оптимизированных для задач программирования. Эта функция доступна пользователям с доступом к API Alibaba Cloud Coding Plan и предлагает упрощенный процесс настройки с автоматическим обновлением конфигураций моделей.

Обзор

При аутентификации с помощью API-ключа Alibaba Cloud Coding Plan через команду /auth, Qwen Code автоматически настраивает следующие модели:

Model IDNameОписание
qwen3.5-plusqwen3.5-plusПродвинутая модель с включенным режимом рассуждений
qwen3-coder-plusqwen3-coder-plusОптимизирована для задач программирования
qwen3-max-2026-01-23qwen3-max-2026-01-23Последняя max-модель с включенным режимом рассуждений

Настройка

  1. Получите API-ключ Alibaba Cloud Coding Plan:
  2. Выполните команду /auth в Qwen Code
  3. Выберите Alibaba Cloud Coding Plan
  4. Выберите ваш регион
  5. Введите API-ключ по запросу

Модели будут автоматически настроены и добавлены в меню /model.

Регионы

Alibaba Cloud Coding Plan поддерживает два региона:

RegionEndpointОписание
Chinahttps://coding.dashscope.aliyuncs.com/v1Эндпоинт для материкового Китая
Global/Internationalhttps://coding-intl.dashscope.aliyuncs.com/v1Международный эндпоинт

Регион выбирается во время аутентификации и сохраняется в settings.json в поле codingPlan.region. Чтобы сменить регион, повторно выполните команду /auth и выберите другой регион.

Хранение API-ключа

При настройке Coding Plan через команду /auth API-ключ сохраняется с использованием зарезервированного имени переменной окружения BAILIAN_CODING_PLAN_API_KEY. По умолчанию он сохраняется в поле env вашего файла settings.json.

Warning

Рекомендация по безопасности: Для повышения безопасности рекомендуется перенести API-ключ из settings.json в отдельный файл .env и загружать его как переменную окружения. Например:

# ~/.qwen/.env BAILIAN_CODING_PLAN_API_KEY=your-api-key-here

Затем убедитесь, что этот файл добавлен в .gitignore, если вы используете настройки на уровне проекта.

Автоматические обновления

Конфигурации моделей Coding Plan версионируются. Когда Qwen Code обнаруживает более новую версию шаблона модели, вам будет предложено обновиться. Принятие обновления приведет к следующему:

  • Замене существующих конфигураций моделей Coding Plan на последние версии
  • Сохранению любых кастомных конфигураций моделей, добавленных вами вручную
  • Автоматическому переключению на первую модель в обновленной конфигурации

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

Ручная настройка (для продвинутых)

Если вы предпочитаете вручную настраивать модели Coding Plan, вы можете добавить их в settings.json как любой OpenAI-совместимый провайдер:

{ "modelProviders": { "openai": [ { "id": "qwen3-coder-plus", "name": "qwen3-coder-plus", "description": "Qwen3-Coder via Alibaba Cloud Coding Plan", "envKey": "YOUR_CUSTOM_ENV_KEY", "baseUrl": "https://coding.dashscope.aliyuncs.com/v1" } ] } }
Note

При использовании ручной настройки:

  • Вы можете использовать любое имя переменной окружения для envKey
  • Вам не нужно настраивать codingPlan.*
  • Автоматические обновления не будут применяться к вручную настроенным моделям Coding Plan
Warning

Если вы также используете автоматическую настройку Coding Plan, автоматические обновления могут перезаписать ваши ручные конфигурации, если они используют те же envKey и baseUrl, что и автоматическая настройка. Чтобы избежать этого, по возможности убедитесь, что ваша ручная конфигурация использует другой envKey.

Слои разрешения и атомарность

Фактические значения аутентификации/модели/учетных данных выбираются для каждого поля по следующему приоритету (первое найденное побеждает). Вы можете комбинировать --auth-type с --model, чтобы напрямую указать на запись провайдера; эти CLI-флаги обрабатываются до других слоев.

Layer (highest → lowest)authTypemodelapiKeybaseUrlapiKeyEnvKeyproxy
Программные переопределения/authВвод /authВвод /authВвод /auth
Выбор провайдера моделиmodelProvider.idenv[modelProvider.envKey]modelProvider.baseUrlmodelProvider.envKey
Аргументы CLI--auth-type--model--openaiApiKey (или эквиваленты для провайдера)--openaiBaseUrl (или эквиваленты для провайдера)
Переменные окруженияМаппинг для провайдера (напр. OPENAI_MODEL)Маппинг для провайдера (напр. OPENAI_API_KEY)Маппинг для провайдера (напр. OPENAI_BASE_URL)
Настройки (settings.json)security.auth.selectedTypemodel.namesecurity.auth.apiKeysecurity.auth.baseUrl
По умолчанию / вычисляемыеОткат к AuthType.QWEN_OAUTHВстроенное значение по умолчанию (OpenAI ⇒ qwen3-coder-plus)Config.getProxy(), если настроен

*При наличии CLI-флаги аутентификации переопределяют настройки. В противном случае тип аутентификации определяется через security.auth.selectedType или неявное значение по умолчанию. Qwen OAuth и OpenAI — единственные типы аутентификации, доступные без дополнительной настройки.

Warning

Устаревание security.auth.apiKey и security.auth.baseUrl: Прямая настройка учетных данных API через security.auth.apiKey и security.auth.baseUrl в settings.json устарела. Эти поля использовались в исторических версиях для учетных данных, введенных через UI, но поток ввода учетных данных был удален в версии 0.10.1. Эти поля будут полностью удалены в будущем релизе. Настоятельно рекомендуется перейти на modelProviders для всех конфигураций моделей и учетных данных. Используйте envKey в modelProviders для ссылки на переменные окружения в целях безопасного управления учетными данными вместо хардкода в файлах настроек.

Слои конфигурации генерации: Непроницаемый слой провайдера

Разрешение конфигурации следует строгой модели слоев с одним ключевым правилом: слой modelProvider является непроницаемым.

Как это работает

  1. Когда выбрана модель modelProvider (например, через команду /model, выбирающую модель, настроенную провайдером):

    • Вся generationConfig от провайдера применяется атомарно
    • Слой провайдера полностью непроницаем — нижние слои (CLI, env, настройки) вообще не участвуют в разрешении generationConfig
    • Все поля, определенные в modelProviders[].generationConfig, используют значения провайдера
    • Все поля, не определенные провайдером, устанавливаются в undefined (не наследуются из настроек)
    • Это гарантирует, что конфигурации провайдеров действуют как полный, самодостаточный «запечатанный пакет»
  2. Когда модель modelProvider НЕ выбрана (например, использование --model с сырым ID модели или прямое использование CLI/env/настроек):

    • Разрешение переходит к нижним слоям
    • Поля заполняются из CLI → env → настройки → значения по умолчанию
    • Это создает Runtime Model (см. следующий раздел)

Приоритет по полям для generationConfig

PrioritySourceBehavior
1Программные переопределенияИзменения во время выполнения через /model, /auth
2modelProviders[authType][].generationConfigНепроницаемый слой — полностью заменяет все поля generationConfig; нижние слои не участвуют
3settings.model.generationConfigИспользуется только для Runtime Models (когда модель провайдера не выбрана)
4Значения по умолчанию генератора контентаЗначения по умолчанию, специфичные для провайдера (например, OpenAI vs Gemini) — только для Runtime Models

Атомарная обработка полей

Следующие поля обрабатываются как атомарные объекты — значения провайдера полностью заменяют весь объект, слияние не происходит:

  • samplingParams — Temperature, top_p, max_tokens и т.д.
  • customHeaders — Кастомные HTTP-заголовки
  • extra_body — Дополнительные параметры тела запроса

Пример

// Пользовательские настройки (~/.qwen/settings.json) { "model": { "generationConfig": { "timeout": 30000, "samplingParams": { "temperature": 0.5, "max_tokens": 1000 } } } } // Конфигурация modelProviders { "modelProviders": { "openai": [{ "id": "gpt-4o", "envKey": "OPENAI_API_KEY", "generationConfig": { "timeout": 60000, "samplingParams": { "temperature": 0.2 } } }] } }

При выборе gpt-4o из modelProviders:

  • timeout = 60000 (от провайдера, переопределяет настройки)
  • samplingParams.temperature = 0.2 (от провайдера, полностью заменяет объект настроек)
  • samplingParams.max_tokens = undefined (не определено в провайдере, и слой провайдера не наследует значения из настроек — поля явно устанавливаются в undefined, если не предоставлены)

При использовании сырой модели через --model gpt-4 (не из modelProviders, создается Runtime Model):

  • timeout = 30000 (из настроек)
  • samplingParams.temperature = 0.5 (из настроек)
  • samplingParams.max_tokens = 1000 (из настроек)

Стратегия слияния для самого modelProviders — REPLACE: весь modelProviders из настроек проекта полностью переопределяет соответствующий раздел в пользовательских настройках, а не сливается с ним.

Модели провайдеров vs Runtime-модели

Qwen Code различает два типа конфигураций моделей:

Модель провайдера

  • Определена в конфигурации modelProviders
  • Имеет полный, атомарный пакет конфигурации
  • При выборе ее конфигурация применяется как непроницаемый слой
  • Отображается в списке команды /model с полными метаданными (имя, описание, возможности)
  • Рекомендуется для рабочих процессов с несколькими моделями и обеспечения согласованности в команде

Runtime-модель

  • Создается динамически при использовании сырых ID моделей через CLI (--model), переменные окружения или настройки
  • Не определена в modelProviders
  • Конфигурация строится путем «проецирования» через слои разрешения (CLI → env → настройки → значения по умолчанию)
  • Автоматически сохраняется как RuntimeModelSnapshot при обнаружении полной конфигурации
  • Позволяет повторно использовать без повторного ввода учетных данных

Жизненный цикл RuntimeModelSnapshot

При настройке модели без использования modelProviders, Qwen Code автоматически создает RuntimeModelSnapshot для сохранения вашей конфигурации:

# Это создает RuntimeModelSnapshot с ID: $runtime|openai|my-custom-model qwen --auth-type openai --model my-custom-model --openaiApiKey $KEY --openaiBaseUrl https://api.example.com/v1

Снимок (snapshot):

  • Захватывает ID модели, API-ключ, базовый URL и конфигурацию генерации
  • Сохраняется между сессиями (хранится в памяти во время выполнения)
  • Отображается в списке команды /model как runtime-опция
  • Можно переключиться с помощью /model $runtime|openai|my-custom-model

Ключевые отличия

AspectМодель провайдераRuntime-модель
Источник конфигурацииmodelProviders в настройкахСлои CLI, env, настройки
Атомарность конфигурацииПолный, непроницаемый пакетПослойная, каждое поле разрешается независимо
Возможность повторного использованияВсегда доступна в списке /modelСохраняется как снимок, появляется при полной конфигурации
Совместное использование в командеДа (через закоммиченные настройки)Нет (локально для пользователя)
Хранение учетных данныхСсылка только через envKeyМожет захватывать фактический ключ в снимке

Когда что использовать

  • Используйте модели провайдеров, когда: у вас есть стандартные модели, общие для команды, требуется согласованность конфигураций или нужно предотвратить случайные переопределения
  • Используйте Runtime-модели, когда: быстро тестируете новую модель, используете временные учетные данные или работаете с ad-hoc эндпоинтами

Сохранение выбора и рекомендации

Important

Определяйте modelProviders в ~/.qwen/settings.json на уровне пользователя, когда это возможно, и избегайте сохранения переопределений учетных данных в любой области. Хранение каталога провайдеров в пользовательских настройках предотвращает конфликты слияния/переопределения между областями проекта и пользователя и гарантирует, что обновления /auth и /model всегда записываются в согласованную область.

  • /model и /auth сохраняют model.name (где применимо) и security.auth.selectedType в ближайшую доступную для записи область, которая уже определяет modelProviders; в противном случае происходит откат к области пользователя. Это синхронизирует файлы рабочей области/пользователя с активным каталогом провайдеров.
  • Без modelProviders резолвер смешивает слои CLI/env/настроек, создавая Runtime-модели. Это нормально для настроек с одним провайдером, но неудобно при частом переключении. Определяйте каталоги провайдеров, когда распространены рабочие процессы с несколькими моделями, чтобы переключения оставались атомарными, имели явный источник и были удобны для отладки.
Last updated on