Поставщики моделей
Qwen Code позволяет настроить несколько поставщиков моделей с помощью параметра modelProviders в файле settings.json. Это позволяет переключаться между различными ИИ-моделями и поставщиками с помощью команды /model.
Обзор
Используйте modelProviders, чтобы объявить отобранные списки моделей для каждого типа аутентификации, между которыми может переключаться выборщик моделей /model. Ключи должны быть допустимыми типами аутентификации (openai, anthropic, gemini и т. д.). Каждая запись требует поля id и обязательно должна включать envKey, а также опционально — name, description, baseUrl и generationConfig. Учётные данные никогда не сохраняются в настройках; среда выполнения считывает их из process.env[envKey]. Модели Qwen с OAuth остаются жёстко заданными и не могут быть переопределены.
Только команда /model предоставляет доступ к типам аутентификации, отличным от значения по умолчанию. Anthropic, Gemini и другие должны быть определены через modelProviders. Команда /auth отображает встроенные варианты аутентификации: OAuth Qwen, план Alibaba Cloud Coding и ключ API.
Дублирующиеся идентификаторы моделей в рамках одного типа аутентификации: Определение нескольких моделей с одинаковым значением id в рамках одного authType (например, две записи с "id": "gpt-4o" в разделе openai) в настоящее время не поддерживается. При наличии дубликатов будет использована первая запись, а последующие дубли будут пропущены с предупреждением. Обратите внимание, что поле id используется как для идентификации конфигурации, так и в качестве фактического имени модели, передаваемого в API, поэтому использование уникальных идентификаторов (например, gpt-4o-creative, gpt-4o-balanced) не является рабочим решением. Это известное ограничение, которое мы планируем устранить в одном из будущих релизов.
Примеры конфигурации в зависимости от типа аутентификации
Ниже приведены подробные примеры конфигурации для различных типов аутентификации с указанием доступных параметров и их комбинаций.
Поддерживаемые типы аутентификации
Ключи объекта modelProviders должны быть допустимыми значениями authType. В настоящее время поддерживаются следующие типы аутентификации:
| Тип аутентификации | Описание |
|---|---|
openai | API, совместимые с OpenAI (OpenAI, Azure OpenAI, локальные серверы вывода, например vLLM/Ollama) |
anthropic | API Anthropic Claude |
gemini | API Google Gemini |
qwen-oauth | OAuth Qwen (жёстко задано, не может быть переопределено в modelProviders) |
[!warning] Если используется недопустимый ключ типа аутентификации (например, опечатка вроде
"openai-custom"), конфигурация будет тихо пропущена, и модели не появятся в выборе/model. Всегда используйте один из поддерживаемых типов аутентификации, перечисленных выше.
SDK, используемые для API-запросов
Qwen Code использует следующие официальные SDK для отправки запросов каждому провайдеру:
| Тип аутентификации | Пакет SDK |
|---|---|
openai | openai — официальный Node.js SDK OpenAI |
anthropic | @anthropic-ai/sdk — официальный SDK Anthropic |
gemini | @google/genai — официальный SDK Google GenAI |
qwen-oauth | openai с пользовательским провайдером (совместимым с DashScope) |
Это означает, что настраиваемый параметр baseUrl должен быть совместим с ожидаемым форматом API соответствующего SDK. Например, при использовании типа аутентификации openai конечная точка должна принимать запросы в формате API OpenAI.
Поставщики, совместимые с 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,
"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 (через 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
}
}
}
]
}
}Локальные самостоятельно размещённые модели (через API, совместимое с OpenAI)
Большинство локальных серверов вывода (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": "Локальная модель (LM Studio)",
"envKey": "LMSTUDIO_API_KEY",
"baseUrl": "http://localhost:1234/v1",
"generationConfig": {
"timeout": 60000,
"samplingParams": {
"temperature": 0.5
}
}
}
]
}
}Для локальных серверов, которым не требуется аутентификация, в качестве значения ключа API можно использовать любое заглушечное значение:
# Для Ollama (аутентификация не требуется)
export OLLAMA_API_KEY="ollama"
# Для vLLM (если аутентификация не настроена)
export VLLM_API_KEY="not-needed"Параметр extra_body поддерживается только для провайдеров, совместимых с OpenAI (openai, qwen-oauth). Он игнорируется провайдерами Anthropic и Gemini.
План кодирования Alibaba Cloud
План кодирования Alibaba Cloud предоставляет предварительно настроенный набор моделей Qwen, оптимизированных для задач программирования. Эта функция доступна пользователям, имеющим доступ к API Плана кодирования Alibaba Cloud, и обеспечивает упрощённый процесс настройки с автоматическим обновлением конфигурации моделей.
Обзор
При аутентификации с помощью ключа API Alibaba Cloud Coding Plan через команду /auth Qwen Code автоматически настраивает следующие модели:
| Идентификатор модели | Название | Описание |
|---|---|---|
qwen3.5-plus | qwen3.5-plus | Усовершенствованная модель с включённым режимом рассуждения |
qwen3-coder-plus | qwen3-coder-plus | Оптимизирована для задач программирования |
qwen3-max-2026-01-23 | qwen3-max-2026-01-23 | Последняя модель max с включённым режимом рассуждения |
Настройка
- Получите API-ключ Alibaba Cloud Coding Plan:
- Выполните команду
/authв Qwen Code - Выберите Alibaba Cloud Coding Plan
- Выберите свой регион
- Введите свой API-ключ при запросе
Модели будут автоматически настроены и добавлены в ваш выбор моделей /model.
Регионы
План кодирования Alibaba Cloud поддерживает два региона:
| Регион | Конечная точка | Описание |
|---|---|---|
| Китай | 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. По умолчанию он сохраняется в поле env файла settings.json.
Рекомендация по безопасности: Для повышения безопасности рекомендуется перенести ключ API из файла settings.json в отдельный файл .env и загружать его как переменную окружения. Например:
# ~/.qwen/.env
BAILIAN_CODING_PLAN_API_KEY=ваш-ключ-api-здесьЗатем убедитесь, что этот файл добавлен в ваш .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 через Alibaba Cloud Coding Plan",
"envKey": "YOUR_CUSTOM_ENV_KEY",
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1"
}
]
}
}При использовании ручной настройки:
- Для параметра
envKeyможно использовать любое имя переменной окружения - Нет необходимости настраивать параметры
codingPlan.* - Автоматические обновления не применяются к моделям Coding Plan, настроенным вручную
Если вы также используете автоматическую настройку Coding Plan, автоматические обновления могут перезаписать ваши ручные настройки, если они используют тот же envKey и baseUrl, что и автоматическая настройка. Чтобы избежать этого, по возможности используйте в ручной настройке отличное имя переменной окружения envKey.
Слои разрешения и атомарность
Эффективные значения аутентификации, модели и учётных данных выбираются для каждого поля в соответствии со следующим приоритетом (первое найденное значение побеждает). Вы можете комбинировать флаг --auth-type с флагом --model, чтобы напрямую указать на запись провайдера; эти флаги CLI выполняются до других слоёв.
| Слой (от самого высокого к самому низкому) | authType | model | apiKey | baseUrl | apiKeyEnvKey | proxy |
|---|---|---|---|---|---|---|
| Программные переопределения | /auth | Входные данные /auth | Входные данные /auth | Входные данные /auth | — | — |
| Выбор провайдера модели | — | modelProvider.id | env[modelProvider.envKey] | modelProvider.baseUrl | modelProvider.envKey | — |
| Аргументы командной строки | --auth-type | --model | --openaiApiKey (или эквиваленты, специфичные для провайдера) | --openaiBaseUrl (или эквиваленты, специфичные для провайдера) | — | — |
| Переменные окружения | — | Сопоставление, специфичное для провайдера (например, OPENAI_MODEL) | Сопоставление, специфичное для провайдера (например, OPENAI_API_KEY) | Сопоставление, специфичное для провайдера (например, OPENAI_BASE_URL) | — | — |
Настройки (settings.json) | security.auth.selectedType | model.name | security.auth.apiKey | security.auth.baseUrl | — | — |
| Значения по умолчанию / вычисленные | Используется AuthType.QWEN_OAUTH | Встроенное значение по умолчанию (OpenAI ⇒ qwen3-coder-plus) | — | — | — | Config.getProxy(), если настроен |
*Если присутствуют флаги аутентификации CLI, они переопределяют настройки. В противном случае тип аутентификации определяется значением security.auth.selectedType или неявным значением по умолчанию. Qwen OAuth и OpenAI — единственные типы аутентификации, доступные без дополнительной конфигурации.
Устаревание параметров security.auth.apiKey и security.auth.baseUrl: Прямая настройка учётных данных API через параметры security.auth.apiKey и security.auth.baseUrl в файле settings.json объявлена устаревшей. Эти параметры использовались в предыдущих версиях для учётных данных, введённых через пользовательский интерфейс, однако поток ввода учётных данных был удалён в версии 0.10.1. Эти поля будут полностью удалены в одной из будущих версий. Настоятельно рекомендуется перейти на использование modelProviders для всех конфигураций моделей и учётных данных. Используйте параметр envKey в modelProviders, чтобы ссылаться на переменные окружения для безопасного управления учётными данными вместо их жёсткого кодирования в файлах настроек.
Слои конфигурации генерации: неизменяемый слой поставщика моделей
Разрешение конфигурации следует строгой многоуровневой модели с одним ключевым правилом: слой modelProvider является неизменяемым.
Как это работает
-
Когда выбрана модель
modelProvider(например, с помощью команды/model, выбирающей модель, настроенную для поставщика):- Вся конфигурация
generationConfigот поставщика применяется атомарно. - Слой поставщика полностью изолирован: нижележащие слои (CLI, переменные окружения, настройки) не участвуют в разрешении
generationConfigвообще. - Все поля, определённые в
modelProviders[].generationConfig, используют значения, заданные поставщиком. - Все поля, не определённые поставщиком, устанавливаются в
undefined(они не наследуются из настроек). - Это гарантирует, что конфигурации поставщиков действуют как полный, самодостаточный «запечатанный пакет».
- Вся конфигурация
-
Когда модель
modelProviderНЕ выбрана (например, при использовании флага--modelс «сырым» идентификатором модели или при прямом использовании CLI/переменных окружения/настроек):- Разрешение переходит к нижележащим слоям.
- Поля заполняются в порядке: CLI → переменные окружения → настройки → значения по умолчанию.
- В результате создаётся модель времени выполнения (см. следующий раздел).
Приоритет параметров generationConfig по отдельным полям
| Приоритет | Источник | Поведение |
|---|---|---|
| 1 | Программные переопределения | Изменения в режиме выполнения через /model, /auth |
| 2 | modelProviders[authType][].generationConfig | Непроницаемый уровень — полностью заменяет все поля generationConfig; уровни ниже не участвуют |
| 3 | settings.model.generationConfig | Используется только для моделей времени выполнения (когда не выбрана модель провайдера) |
| 4 | Стандартные значения генератора контента | Стандартные значения, специфичные для провайдера (например, OpenAI или Gemini) — применяются только к моделям времени выполнения |
Обработка атомарных полей
Следующие поля рассматриваются как атомарные объекты: значения провайдера полностью заменяют весь объект, слияние не выполняется:
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, создаётся модель во время выполнения):
timeout= 30000 (из настроек);samplingParams.temperature= 0.5 (из настроек);samplingParams.max_tokens= 1000 (из настроек).
Стратегия объединения для modelProviders — ЗАМЕНА: весь раздел modelProviders из проектных настроек полностью заменит соответствующий раздел в пользовательских настройках, а не объединит их.
Модели провайдеров и модели среды выполнения
Qwen Code различает два типа конфигураций моделей:
Модель провайдера
- Определяется в конфигурации
modelProviders. - Имеет полный, атомарный набор параметров.
- При выборе её конфигурация применяется как непроницаемый слой.
- Отображается в списке команды
/modelсо всей метаинформацией (имя, описание, возможности). - Рекомендуется для рабочих процессов с несколькими моделями и обеспечения согласованности в команде.
Модель среды выполнения
- Создаётся динамически при использовании «сырых» идентификаторов моделей через CLI (
--model), переменные окружения или настройки. - Не определена в
modelProviders. - Конфигурация формируется путём «проекции» через уровни разрешения (CLI → переменные окружения → настройки → значения по умолчанию).
- Автоматически сохраняется как RuntimeModelSnapshot, когда обнаруживается полная конфигурация.
- Позволяет повторно использовать модель без повторного ввода учётных данных.
Жизненный цикл RuntimeModelSnapshot
При настройке модели без использования параметра modelProviders Qwen Code автоматически создаёт объект RuntimeModelSnapshot, чтобы сохранить вашу конфигурацию:
# Эта команда создаёт RuntimeModelSnapshot с идентификатором: $runtime|openai|my-custom-model
qwen --auth-type openai --model my-custom-model --openaiApiKey $KEY --openaiBaseUrl https://api.example.com/v1Снимок:
- Фиксирует идентификатор модели, ключ API, базовый URL и конфигурацию генерации
- Сохраняется между сеансами (хранится в памяти во время выполнения)
- Отображается в списке команды
/modelкак вариант для выполнения - Может быть выбран с помощью команды
/model $runtime|openai|my-custom-model
Ключевые различия
| Аспект | Модель провайдера | Модель среды выполнения |
|---|---|---|
| Источник конфигурации | modelProviders в настройках | CLI, переменные окружения, уровни настроек |
| Атомарность конфигурации | Полный, неизменяемый пакет | Слоистая: каждое поле разрешается независимо |
| Повторное использование | Всегда доступно в списке /model | Сохраняется как снимок; отображается при полном заполнении |
| Совместное использование в команде | Да (через зафиксированные настройки) | Нет (локально для пользователя) |
| Хранение учётных данных | Только ссылка через envKey | Может содержать фактический ключ в снимке |
Когда использовать каждый из них
- Используйте модели провайдера, когда: у вас есть стандартные модели, общие для всей команды, необходима согласованная конфигурация или вы хотите предотвратить случайную перезапись параметров
- Используйте модели времени выполнения, когда: быстро тестируете новую модель, используете временные учётные данные или работаете с разовыми конечными точками
Сохранение выбора модели и рекомендации
Всегда определяйте modelProviders в пользовательском файле настроек ~/.qwen/settings.json, если это возможно, и избегайте сохранения переопределений учётных данных в любом другом контексте. Размещение каталога поставщиков моделей в пользовательских настройках предотвращает конфликты слияния и переопределения между проектным и пользовательским контекстами и гарантирует, что обновления через /auth и /model всегда записываются в согласованный контекст.
- Команды
/modelи/authсохраняютmodel.name(если применимо) иsecurity.auth.selectedTypeв ближайший доступный для записи контекст, в котором уже определён параметрmodelProviders; в противном случае они используют пользовательский контекст по умолчанию. Это обеспечивает синхронизацию файлов рабочей области и пользователя с активным каталогом поставщиков. - При отсутствии
modelProvidersрезолвер объединяет слои CLI/переменных окружения/настроек, создавая модели времени выполнения (Runtime Models). Это допустимо при использовании одного поставщика, но неудобно при частой смене поставщиков. Определяйте каталоги поставщиков всякий раз, когда часто используются многомодельные рабочие процессы — это делает переключения атомарными, привязанными к источнику и удобными для отладки.