MCPcopy Index your code
hub / github.com/Rfym21/Qwen2API

github.com/Rfym21/Qwen2API @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
360 symbols 1,098 edges 51 files 105 documented · 29%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

中文 | 🇷🇺 Русская версия | English

🚀 Qwen-Proxy

Version Node.js Docker

🔗 Присоединиться к чату | 📖 Документация | 🐳 Развертывание Docker

🛠️ Быстрый старт

Описание проекта

Qwen-Proxy — это прокси-сервис, преобразующий https://chat.qwen.ai и Qwen Code / Qwen Cli в API, совместимый с OpenAI. С помощью этого проекта вам нужен всего один аккаунт, чтобы использовать любой клиент с поддержкой OpenAI API (например, ChatGPT-Next-Web, LobeChat и др.) для вызова различных моделей https://chat.qwen.ai и Qwen Code / Qwen Cli. Модели в эндпоинте /cli предоставляются Qwen Code / Qwen Cli, поддерживают контекст 256K и нативный параметр tools.

Основные возможности: - Совместимость с форматом OpenAI API, бесшовная интеграция с различными клиентами - Поддержка ротации нескольких аккаунтов для повышения доступности - Поддержка потоковых/непотоковых ответов - Поддержка мультимодальности (распознавание изображений, генерация изображений) - Поддержка интеллектуального поиска, глубокого размышления и других продвинутых функций - Поддержка CLI-эндпоинта с контекстом 256K и возможностью вызова инструментов - Веб-интерфейс управления для удобной настройки и мониторинга - Массовое добавление аккаунтов с отображением прогресса в реальном времени, параллельность входа настраивается в системных настройках

⚠️ Примечание о высокой нагрузке

Важно: chat.qwen.ai ограничивает скорость запросов по IP. Известно, что это ограничение не связано с Cookie, а только с IP-адресом.

Решения:

Для высоконагруженного использования рекомендуется применять пул прокси для ротации IP:

Вариант Способ настройки Описание
Вариант 1 PROXY_URL + ProxyFlow Прямая настройка прокси-адреса, все запросы проходят через пул с ротацией IP
Вариант 2 QWEN_CHAT_PROXY_URL + UrlProxy + ProxyFlow Комбинация обратного прокси + пул прокси для более гибкой ротации IP

Примеры настройки:

# Вариант 1: Прямое использование пула прокси
PROXY_URL=http://127.0.0.1:8282  # Адрес ProxyFlow

# Вариант 2: Обратный прокси + пул прокси
QWEN_CHAT_PROXY_URL=http://127.0.0.1:8000/qwen  # Адрес обратного прокси UrlProxy (UrlProxy настроен с HTTP_PROXY на ProxyFlow)

🌐 Прокси для каждого аккаунта / Per-account proxy

Каждому аккаунту можно назначить собственный исходящий прокси, чтобы разные аккаунты ходили с разных IP одновременно и не попадали под массовый бан chat.qwen.ai по корреляции IP.

Приоритет: account.proxy > глобальный PROXY_URL > без прокси

Поддерживаемые протоколы: HTTP / HTTPS / SOCKS5 (как у PROXY_URL)

Через панель (рекомендуется): Откройте dashboard → при добавлении аккаунта заполните поле «Proxy URL», либо нажмите кнопку «Изменить proxy» на карточке существующего аккаунта.

Через ENV (DATA_SAVE_MODE=none):

# Старый формат (обратная совместимость, прокси не задан)
ACCOUNTS=user1@mail.com:pass1,user2@mail.com:pass2

# Новый формат (URL прокси через `|`, можно смешивать со старым)
ACCOUNTS=user1@mail.com:pass1|http://10.0.0.1:8080,user2@mail.com:pass2|socks5://10.0.0.2:1080

Схема data/data.json (file-режим):

{
  "accounts": [
    {
      "email": "user@mail.com",
      "password": "...",
      "token": "...",
      "expires": 1234567890,
      "proxy": "http://10.0.0.1:8080"
    }
  ]
}

Если поле proxy равно null или отсутствует, аккаунт ходит через глобальный PROXY_URL (если он задан).

⚠️ Внимание: прокси-URL в ответах API не маскируются. Проект рассчитан на запуск в доверенной локальной/частной сети с единственным администратором.

Требования к окружению

  • Node.js 18+ (необходим при развертывании из исходников)
  • Docker (опционально)
  • Redis (опционально, для персистентного хранения данных)

⚙️ Настройка окружения

Создайте файл .env и настройте следующие параметры:

# 🌐 Конфигурация сервиса
LISTEN_ADDRESS=localhost       # Адрес прослушивания
SERVICE_PORT=3000             # Порт сервиса

# 🔐 Безопасность
API_KEY=sk-123456,sk-456789   # API-ключи (обязательно, поддержка нескольких ключей)
ACCOUNTS=                     # Настройка аккаунтов (формат: user1:pass1[|proxy_url],user2:pass2[|proxy_url])

# 🚀 Многопроцессная конфигурация PM2
PM2_INSTANCES=1               # Количество процессов PM2 (1/число/max)
PM2_MAX_MEMORY=1G             # Ограничение памяти PM2 (100M/1G/2G и т.д.)
                              # Примечание: в кластерном режиме PM2 все процессы используют один порт

# 🔍 Конфигурация функций
SEARCH_INFO_MODE=table        # Режим отображения результатов поиска (table/text)
OUTPUT_THINK=true             # Выводить ли процесс размышления (true/false)
LEGACY_REASONING_IN_CONTENT=false # Формат рассуждений: false=поле reasoning_content, true=старый режим <think> внутри content (true/false)
SIMPLE_MODEL_MAP=false        # Упрощенное сопоставление моделей (true/false)
MODELS_CACHE_TTL=3600         # Срок жизни кэша списка моделей (сек), 0=бессрочно

# 🌐 Прокси и обратный прокси
QWEN_CHAT_PROXY_URL=          # Пользовательский URL обратного прокси Chat API (по умолчанию: https://chat.qwen.ai)
QWEN_CLI_PROXY_URL=           # Пользовательский URL обратного прокси CLI API (по умолчанию: https://portal.qwen.ai)
PROXY_URL=                    # Адрес HTTP/HTTPS/SOCKS5 прокси (например: http://127.0.0.1:7890)

# 🗄️ Хранение данных
DATA_SAVE_MODE=none           # Режим сохранения данных (none/file/redis)
REDIS_URL=                    # Адрес подключения к Redis (опционально, при TLS используйте rediss://)
BATCH_LOGIN_CONCURRENCY=5     # Параллельность входа при массовом добавлении аккаунтов

# 📸 Конфигурация кэширования
CACHE_MODE=default            # Режим кэширования изображений (default/file)

📋 Описание параметров

Параметр Описание Пример
LISTEN_ADDRESS Адрес прослушивания сервиса localhost или 0.0.0.0
SERVICE_PORT Порт работы сервиса 3000
API_KEY API-ключи доступа, поддержка нескольких ключей. Первый ключ — администраторский (доступ к панели управления), остальные — обычные (только вызов API). Разделяются запятой sk-admin123,sk-user456,sk-user789
PM2_INSTANCES Количество процессов PM2 1/4/max
PM2_MAX_MEMORY Ограничение памяти PM2 100M/1G/2G
SEARCH_INFO_MODE Формат отображения результатов поиска table или text
OUTPUT_THINK Отображать ли процесс размышления AI true или false
LEGACY_REASONING_IN_CONTENT Формат вывода рассуждений. По умолчанию false = рассуждения в отдельном поле reasoning_content; true = старый режим (<think> внутри content) true или false
SIMPLE_MODEL_MAP Упрощенное сопоставление моделей, возвращает только базовые модели без вариантов true или false
MODELS_CACHE_TTL Срок жизни кэша списка моделей (в секундах); по истечении следующий запрос обновит список; 0 = бессрочный кэш 3600
QWEN_CHAT_PROXY_URL Пользовательский адрес обратного прокси Chat API https://your-proxy.com
QWEN_CLI_PROXY_URL Пользовательский адрес обратного прокси CLI API https://your-cli-proxy.com
PROXY_URL Адрес прокси для исходящих запросов, поддержка HTTP/HTTPS/SOCKS5 http://127.0.0.1:7890
DATA_SAVE_MODE Способ персистентного хранения данных none/file/redis
REDIS_URL Адрес подключения к Redis, при использовании TLS-шифрования необходим протокол rediss:// redis://localhost:6379 или rediss://xxx.upstash.io
BATCH_LOGIN_CONCURRENCY Параллельность входа при массовом добавлении аккаунтов, можно динамически менять в системных настройках фронтенда 5
CACHE_MODE Способ хранения кэша изображений default/file
LOG_LEVEL Уровень логирования DEBUG/INFO/WARN/ERROR
ENABLE_FILE_LOG Включить ли файловое логирование true или false
LOG_DIR Директория файлов логов ./logs
MAX_LOG_FILE_SIZE Максимальный размер файла лога (МБ) 10
MAX_LOG_FILES Количество сохраняемых файлов логов 5

💡 Подсказка: Можно бесплатно создать экземпляр Redis на Upstash, при использовании протокола TLS адрес имеет формат rediss://...

Upstash Redis

🔑 Настройка нескольких API_KEY

Переменная окружения API_KEY поддерживает настройку нескольких API-ключей для реализации разных уровней доступа:

Формат настройки:

# Один ключ (права администратора)
API_KEY=sk-admin123

# Несколько ключей (первый — администратор, остальные — обычные пользователи)
API_KEY=sk-admin123,sk-user456,sk-user789

Описание прав:

Тип ключа Область прав Описание функций
Администраторский ключ Полные права • Доступ к панели управления

• Изменение системных настроек

• Вызов всех API-эндпоинтов

• Добавление/удаление обычных ключей | | Обычный ключ | Права вызова API | • Только вызов API-эндпоинтов

• Нет доступа к панели управления

• Нет возможности изменять системные настройки |

Сценарии использования: - Командная работа: назначение ключей с разными правами для разных членов команды - Интеграция приложений: предоставление ограниченного API-доступа сторонним приложениям - Разделение безопасности: разделение административных и пользовательских прав

Примечания: - Первый API_KEY автоматически становится администраторским ключом с максимальными правами - Администратор может динамически добавлять или удалять обычные ключи через панель управления - Все ключи могут вызывать API-эндпоинты, различия в правах касаются только функций управления

📸 Описание режимов CACHE_MODE

Переменная окружения CACHE_MODE управляет способом хранения кэша изображений для оптимизации производительности загрузки и обработки:

Режим Описание Сценарий использования
default Кэширование в памяти (по умолчанию) Однопроцессное развертывание, кэш теряется при перезапуске
file Файловое кэширование Многопроцессное развертывание, кэш сохраняется в директорию ./caches/

Рекомендуемая настройка: - Однопроцессное развертывание: используйте CACHE_MODE=default, максимальная производительность - Многопроцессное/кластерное развертывание: используйте CACHE_MODE=file, обеспечивает общий кэш между процессами - Развертывание Docker: рекомендуется CACHE_MODE=file с монтированием директории ./caches

Структура директории файлового кэша:

caches/
├── [signature1].txt    # Файл кэша, содержит URL изображения
├── [signature2].txt
└── ...

🚀 Способы развертывания

🐳 Развертывание Docker

Способ 1: Прямой запуск

docker run -d \
  -p 3000:3000 \
  -e API_KEY=sk-admin123,sk-user456,sk-user789 \
  -e DATA_SAVE_MODE=none \
  -e CACHE_MODE=file \
  -e ACCOUNTS= \
  -v ./caches:/app/caches \
  --name qwen2api \
  rfym21/qwen2api:latest

Способ 2: Docker Compose

# Скачать файл конфигурации
curl -o docker-compose.yml https://raw.githubusercontent.com/Rfym21/Qwen2API/refs/heads/main/docker/docker-compose.yml

# Запустить сервис
docker compose pull && docker compose up -d

📦 Локальное развертывание

# Клонировать проект
git clone https://github.com/Rfym21/Qwen2API.git
cd Qwen2API

# Установить зависимости
npm install

# Настроить переменные окружения
cp .env.example .env
# Отредактировать файл .env

# Умный запуск (рекомендуется — автоматически определяет одно-/многопроцессный режим)
npm start

# Режим разработки
npm run dev

🚀 Многопроцессное развертывание PM2

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

Важно: В кластерном режиме PM2 все процессы используют один порт, PM2 автоматически выполняет балансировку нагрузки.

🤖 Умный режим запуска

Используйте npm start для автоматического определения способа запуска:

  • При PM2_INSTANCES=1 — однопроцессный режим
  • При PM2_INSTANCES>1 — кластерный режим Node.js
  • Количество процессов автоматически ограничивается числом ядер CPU

☁️ Развертывание на Hugging Face

Быстрое развертывание на Hugging Face Spaces:

Deploy to Hugging Face

Hugging Face Deployment

☁️ Развертывание на Vercel

Быстрое развертывание на Vercel:

Развернуть с Vercel

Необходимо настроить переменные окружения:

ACCOUNTS=email:password
SERVICE_PORT=80
API_KEY=sk-xxx
DATA_SAVE_MODE=none

📁 Структура проекта

``` Qwen2API/ ├── README.md ├── ecosystem.config.js # Конфигурация PM2 ├── package.json │ ├── docker/ # Директория конфигурации Docker │ ├── Dockerfile │ ├── docker-compose.yml │ └── docker-compose-redis.yml │ ├── caches/ # Директория файлов кэша ├── data/ # Директория файлов данных │ ├── data.json │ └── data_template.json ├── scripts/ # Директория скриптов │ └── fingerprint

Core symbols most depended-on inside this repo

error
called by 170
src/utils/logger.js
info
called by 85
src/utils/logger.js
warn
called by 31
src/utils/logger.js
success
called by 26
src/utils/logger.js
generateUUID
called by 16
src/utils/tools.js
writeAnthropicEvent
called by 12
src/controllers/anthropic.js
ensureConnection
called by 12
src/utils/redis.js
getProxyAgent
called by 12
src/utils/proxy-helper.js

Shape

Function 237
Method 109
Class 14

Languages

TypeScript100%

Modules by API surface

src/controllers/chat.image.video.js49 symbols
src/utils/account.js44 symbols
src/utils/redis.js28 symbols
src/utils/logger.js22 symbols
src/controllers/anthropic.js21 symbols
src/utils/data-persistence.js19 symbols
src/utils/account-rotator.js19 symbols
src/controllers/chat.js15 symbols
src/utils/chat-helpers.js14 symbols
src/utils/token-manager.js12 symbols
src/controllers/cli.chat.js12 symbols
src/utils/tool-prompt.js11 symbols

For agents

$ claude mcp add Qwen2API \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact