Skip to Content

Поставщики моделей

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

Обзор

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

Note

Только команда /model предоставляет доступ к типам аутентификации, отличным от используемых по умолчанию. Anthropic, Gemini, Vertex AI и т.д. должны быть определены через modelProviders. Команда /auth намеренно перечисляет только встроенные потоки Qwen OAuth и OpenAI.

Warning

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

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

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

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

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

Тип аутентификацииОписание
openaiСовместимые с OpenAI API (OpenAI, Azure OpenAI, локальные серверы вывода, такие как vLLM/Ollama)
anthropicAPI Anthropic Claude
geminiAPI Google Gemini
vertex-aiGoogle Vertex AI
qwen-oauthQwen OAuth (жестко закодированный, не может быть переопределен в modelProviders)

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

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

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

Тип аутентификацииПакет SDK
openaiopenai - Официальный SDK OpenAI для Node.js
anthropic@anthropic-ai/sdk - Официальный SDK Anthropic
gemini / vertex-ai@google/genai - Официальный SDK Google GenAI
qwen-oauthopenai с пользовательским провайдером (совместимо с DashScope)

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

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

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

{ "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, "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 (через OpenRouter)", "envKey": "OPENROUTER_API_KEY", "baseUrl": "https://openrouter.ai/api/v1", "generationConfig": { "timeout": 120000, "maxRetries": 3, "samplingParams": { "temperature": 0.7 } } } ] } }

Anthropic (anthropic)

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

{ "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 } } } ] } }

Google Vertex AI (vertex-ai)

{ "modelProviders": { "vertex-ai": [ { "id": "gemini-1.5-pro-vertex", "name": "Gemini 1.5 Pro (Vertex AI)", "envKey": "GOOGLE_API_KEY", "baseUrl": "https://generativelanguage.googleapis.com", "generationConfig": { "timeout": 90000, "contextWindowSize": 2000000, "samplingParams": { "temperature": 0.2, "max_tokens": 8192 } } } ] } }

Локальные модели с самостоятельным хостингом (через совместимое с OpenAI API)

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

{ "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 } } } ] } }

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

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

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

План кодирования Bailian

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

Обзор

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

Идентификатор моделиНазваниеОписание
qwen3.5-plusqwen3.5-plusУсовершенствованная модель с включенным мышлением
qwen3-coder-plusqwen3-coder-plusОптимизирована для задач программирования
qwen3-max-2026-01-23qwen3-max-2026-01-23Последняя максимальная модель с включенным мышлением

Настройка

  1. Получите API-ключ Bailian Coding Plan:
  2. Выполните команду /auth в Qwen Code
  3. Выберите метод аутентификации по API-ключу
  4. Выберите свой регион (Китай или Глобальный/Международный)
  5. Введите свой API-ключ, когда будет предложено

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

Регионы

План Bailian Coding поддерживает два региона:

РегионКонечная точкаОписание
Китайhttps://coding.dashscope.aliyuncs.com/v1Конечная точка для материкового Китая
Глобальный/Международныйhttps://coding-intl.dashscope.aliyuncs.com/v1Международная конечная точка

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

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

Когда вы настраиваете Coding Plan с помощью команды /auth, API-ключ сохраняется с использованием зарезервированного имени переменной окружения BAILIAN_CODING_PLAN_API_KEY. По умолчанию он сохраняется в поле settings.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 через Bailian 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/model/credential выбираются для каждого поля с использованием следующего приоритета (первый присутствующий побеждает). Вы можете комбинировать --auth-type с --model, чтобы напрямую указать на запись провайдера; эти флаги CLI выполняются перед другими слоями.

Слой (самый высокий → самый низкий)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 устарела. Эти настройки использовались в предыдущих версиях для учетных данных, введенных через пользовательский интерфейс, но поток ввода учетных данных был удален в версии 0.10.1. Эти поля будут полностью удалены в будущем релизе. Настоятельно рекомендуется перейти на modelProviders для всех настроек моделей и учетных данных. Используйте envKey в modelProviders, чтобы ссылаться на переменные окружения для безопасного управления учетными данными вместо жесткого кодирования учетных данных в файлах настроек.

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

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

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

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

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

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

Приоритетность на уровне полей для generationConfig

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

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

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

  • samplingParams — Температура, 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 — ЗАМЕНА: весь modelProviders из настроек проекта переопределит соответствующий раздел в пользовательских настройках, а не будет объединять два объекта.

Модели поставщиков и модели выполнения

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

Модель поставщика

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

Модель выполнения

  • Создается динамически при использовании идентификаторов моделей через 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

Снимок:

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

Ключевые различия

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

Когда использовать каждый из них

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

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

Important

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

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