Qwen2API-A / README.md
github-actions[bot]
Sync from GitHub Viciy2023/Qwen2API-A@f63745db299005430621ddc7259154c5201b5c04
f92c5a1
metadata
title: Qwen2API-A
emoji: 🚀
colorFrom: blue
colorTo: yellow
sdk: docker
pinned: false

✨ 本次重构亮点

当前仓库在保留原项目能力的基础上,已经完成一轮面向生产使用的管理后台重构与增强,重点集中在 控制台体验可观测性Hugging Face 部署适配

控制台界面预览

第一组:整体仪表盘与左侧导航布局

控制台界面预览 1 控制台界面预览 2

第二组:模型面板、日志面板与统计能力展示

控制台界面预览 3 控制台界面预览 4

第三组:控制台顶部状态栏与细节交互展示

控制台界面预览 5

新控制台能力

  • 全站管理后台已重构为更统一的 Vercel 风格控制台 UI
  • 仪表盘从顶部按钮区改为 左侧导航 + 右侧内容区 的控制台布局
  • 顶部新增统一标题栏,支持:
    • 项目标题 Qwen2API Token Manager
    • 当前站点连接状态显示
    • 自动读取当前服务 URL
    • 一键刷新连接状态
    • 一键退出登录
  • 可用模型面板支持:
    • 分类浏览
    • 强度排序
    • 推荐用途提示
    • 模型 ID / 名称 / OpenAI 请求示例一键复制
  • 系统设置已并入主控制台右侧区域,不再依赖独立页面跳转

新增运维与统计能力

  • 新增 日志查看面板,支持:
    • 刷新日志
    • 自动刷新
    • 下载日志
    • 复制日志
    • 清空日志
    • 日志级别筛选
    • 模块筛选
    • 关键词搜索
    • 最近 N 条查看
    • 运行日志启用/关闭
    • 自动滚动到底部
  • 新增 使用统计面板,支持:
    • 总请求数 / 成功数 / 失败数 / 总 Token / 成功率
    • 今日请求 / 今日 Token
    • 各模型请求统计
    • 按总 Token 排序
    • 按请求次数排序
    • 仅看今天
    • 仅看失败模型
    • 模型关键字搜索
    • 今日请求趋势图
    • 今日 Token 趋势图

新增部署与数据能力

  • 已适配 Hugging Face Docker Space 部署
  • 已支持 GitHub -> Hugging Face Space 自动同步
  • 已支持 HF Bucket 持久化
    • 启动时自动恢复数据
    • 运行中自动同步数据
  • 已支持:
    • DATA_DIR
    • CACHE_DIR
    • LOG_DIR 这些目录级环境变量配置

文档说明

  • 原始文档内容已完整保存在:README.original.md
  • 当前 README.md 为增强版说明文档
  • 原作者相关链接、技术参数、部署说明与 API 文档仍然保留

🛠️ 快速开始

项目说明

Qwen-Proxy 是一个将 https://chat.qwen.aiQwen Code / Qwen Cli 转换为 OpenAI 兼容 API 的代理服务。通过本项目,您只需要一个账户,即可以使用任何支持 OpenAI API 的客户端(如 ChatGPT-Next-Web、LobeChat 等)来调用 https://chat.qwen.aiQwen Code / Qwen Cli的各种模型。其中 /cli 端点下的模型由 Qwen Code / Qwen Cli 提供,支持256k上下文,原生 tools 参数支持

主要特性:

  • 兼容 OpenAI API 格式,无缝对接各类客户端
  • 支持多账户轮询,提高可用性
  • 支持流式/非流式响应
  • 支持多模态(图片识别、图片生成)
  • 支持智能搜索、深度思考等高级功能
  • 支持 CLI 端点,提供 256K 上下文和工具调用能力
  • 提供 Web 管理界面,方便配置和监控

⚠️ 高并发说明

重要提示: chat.qwen.ai 对单 IP 有限速策略,目前已知该限制与 Cookie 无关,仅与 IP 相关。

解决方案:

如需高并发使用,建议配合代理池实现 IP 轮换:

方案 配置方式 说明
方案一 PROXY_URL + ProxyFlow 直接配置代理地址,所有请求通过代理池轮换 IP
方案二 QWEN_CHAT_PROXY_URL + UrlProxy + ProxyFlow 通过反代 + 代理池组合,实现更灵活的 IP 轮换

配置示例:

# 方案一:直接使用代理池
PROXY_URL=http://127.0.0.1:8282  # ProxyFlow 代理地址

# 方案二:反代 + 代理池组合
QWEN_CHAT_PROXY_URL=http://127.0.0.1:8000/qwen  # UrlProxy 反代地址(UrlProxy 配置 HTTP_PROXY 指向 ProxyFlow)

环境要求

  • Node.js 18+ (源码部署时需要)
  • Docker (可选)
  • Redis (可选,用于数据持久化)

⚙️ 环境配置

创建 .env 文件并配置以下参数:

# 🌐 服务配置
LISTEN_ADDRESS=localhost       # 监听地址
SERVICE_PORT=3000             # 服务端口

# 🔐 安全配置
API_KEY=sk-123456,sk-456789   # API 密钥 (必填,支持多密钥)
ACCOUNTS=                     # 账户配置 (格式: user1:pass1,user2:pass2)

# 🚀 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)
SIMPLE_MODEL_MAP=false        # 简化模型映射 (true/false)

# 🌐 代理与反代配置
QWEN_CHAT_PROXY_URL=          # 自定义 Chat API 反代URL (默认: https://chat.qwen.ai)
QWEN_CLI_PROXY_URL=           # 自定义 CLI API 反代URL (默认: 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://)

# 📸 缓存配置
CACHE_MODE=default            # 图片缓存模式 (default/file)

📋 配置说明

参数 说明 示例
LISTEN_ADDRESS 服务监听地址 localhost0.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 搜索结果展示格式 tabletext
OUTPUT_THINK 是否显示 AI 思考过程 truefalse
SIMPLE_MODEL_MAP 简化模型映射,只返回基础模型不包含变体 truefalse
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:6379rediss://xxx.upstash.io
CACHE_MODE 图片缓存存储方式 default/file
LOG_LEVEL 日志级别 DEBUG/INFO/WARN/ERROR
ENABLE_FILE_LOG 是否启用文件日志 truefalse
LOG_DIR 日志文件目录 ./logs
MAX_LOG_FILE_SIZE 最大日志文件大小(MB) 10
MAX_LOG_FILES 保留的日志文件数量 5

💡 提示: 可以在 Upstash 免费创建 Redis 实例,使用 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访问权限
  • 安全隔离: 将管理权限与普通使用权限分离

注意事项:

  • 第一个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 部署

方式一:直接运行

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

方式二: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 部署

推荐使用 Docker Space + GitHub 自动同步 的方式部署。这个项目本身已经提供 docker/Dockerfile,因此在 Hugging Face 上使用 Docker Space 是最稳妥的方案。

Deploy to Hugging Face

Hugging Face Deployment

推荐部署方式

部署链路如下:

本地修改代码 -> Push 到 GitHub main -> GitHub Actions 自动同步到 Hugging Face Space -> Hugging Face 自动重建并启动

第一步:创建 Hugging Face Space

  • 在 Hugging Face 新建 Space
  • SDK 请选择 Docker
  • Space 名称示例:DanielleNguyen/Qwen2API-A

第二步:在 GitHub 配置自动同步变量

仓库中已提供自动同步工作流:.github/workflows/huggingface-sync.yml

请在 GitHub 仓库中配置以下内容:

GitHub Actions Secrets:

HF_TOKEN=你的_huggingface_token

GitHub Actions Variables:

HF_SPACE_ID=DanielleNguyen/Qwen2API-A

配置位置:GitHub 仓库 -> Settings -> Secrets and variables -> Actions

⚠️ 注意:HF_TOKEN 必须放在 Secrets 中,不要写入仓库文件,也不要提交到 .env 中。

第三步:在 Hugging Face Space 配置运行时变量

进入:Hugging Face Space -> Settings -> Variables and secrets

如果你采用 HF Bucket 持久化,建议至少配置以下变量:

SERVICE_PORT=7860
LISTEN_ADDRESS=0.0.0.0
PM2_INSTANCES=1
PM2_MAX_MEMORY=4G
NODE_ENV=production
OUTPUT_THINK=true
SEARCH_INFO_MODE=table
SIMPLE_MODEL_MAP=false
DATA_SAVE_MODE=file
DATA_DIR=/data/qwen2api/data
CACHE_DIR=/data/qwen2api/caches
LOG_DIR=/data/qwen2api/logs
HF_BUCKET_REPO=DanielleNguyen/Qwen2API-A-Storage
HF_BUCKET_LOCAL_DIR=/data/qwen2api
HF_BUCKET_REMOTE_DIR=runtime
HF_BUCKET_SYNC_INTERVAL=300
LOG_LEVEL=INFO
ENABLE_FILE_LOG=false
CACHE_MODE=file

建议作为 Secret 配置的敏感项:

API_KEY=sk-admin-yourkey,sk-user-yourkey
HF_TOKEN=hf_xxx
HF_BUCKET_TOKEN=
REDIS_URL=
ACCOUNTS=
PROXY_URL=
QWEN_CHAT_PROXY_URL=
QWEN_CLI_PROXY_URL=

💡 项目中已提供 Hugging Face 示例模板:.env.hf.example

第四步:HF Bucket 持久化工作方式

当前项目已适配如下持久化链路:

容器启动 -> 从 HF Bucket 拉取 /data/qwen2api -> 应用用 file 模式读写本地文件 -> 后台定时同步回 HF Bucket

默认会持久化这些目录:

DATA_DIR=/data/qwen2api/data
CACHE_DIR=/data/qwen2api/caches
LOG_DIR=/data/qwen2api/logs

推荐的 Bucket 名称:

HF_BUCKET_REPO=DanielleNguyen/Qwen2API-A-Storage

第五步:端口与监听地址说明

为兼容 Hugging Face Docker Space,推荐固定使用:

SERVICE_PORT=7860
LISTEN_ADDRESS=0.0.0.0

原因:

  • 7860 是 Hugging Face Space 常见服务端口
  • 0.0.0.0 可确保容器外部可以访问到服务
  • 项目实际启动端口由环境变量 SERVICE_PORT 控制

第六步:推送代码触发自动部署

当你推送代码到 main 分支后:

  • GitHub Actions 会自动执行 .github/workflows/huggingface-sync.yml
  • 自动将仓库代码同步到 Hugging Face Space
  • Hugging Face 收到新代码后会自动重建容器并启动服务

推荐的 Hugging Face 配置

如果你只是先跑通服务并启用 Bucket 持久化,建议使用:

SERVICE_PORT=7860
LISTEN_ADDRESS=0.0.0.0
PM2_INSTANCES=1
DATA_SAVE_MODE=file
CACHE_MODE=file
DATA_DIR=/data/qwen2api/data
CACHE_DIR=/data/qwen2api/caches
LOG_DIR=/data/qwen2api/logs
HF_BUCKET_REPO=DanielleNguyen/Qwen2API-A-Storage
ENABLE_FILE_LOG=false

如果你要让运行数据真正可恢复,请再补上 Secret:

HF_TOKEN=你的_huggingface_token

Space 访问 Bucket 时可以直接使用 Hugging Face 账号 Token。若你希望和 GitHub Actions 用途隔离,也可以额外配置 HF_BUCKET_TOKEN 专供 Bucket 读写使用。

常见问题

1. 为什么不建议在仓库里提交真实 .env

因为 API_KEYHF_TOKENHF_BUCKET_TOKENREDIS_URL 等都属于敏感信息,应该放在 GitHub Secrets 或 Hugging Face Secrets 中。

2. 为什么推荐 Docker Space?

因为本项目是完整的 Node.js 服务,并且已经自带 docker/Dockerfile,使用 Docker Space 可以直接复用现有构建和启动流程。

3. 如果 GitHub 已经配置了 HF_TOKENHF_SPACE_ID,还需要在 HF 里配置它们吗?

不需要。

  • HF_TOKENHF_SPACE_ID 只用于 GitHub -> Hugging Face 同步代码
  • Hugging Face Space 内只需要配置项目运行时环境变量,例如 API_KEYSERVICE_PORTLISTEN_ADDRESS

4. Space 怎么和 Bucket 通信?一定要单独的 HF_BUCKET_TOKEN 吗?

不一定。

  • 在 Hugging Face Space 里,运行时可以直接使用你的 Hugging Face 账号 Token,即 HF_TOKEN
  • 当前项目已兼容:优先读取 HF_BUCKET_TOKEN,如果没设置则自动回退到 HF_TOKEN
  • 如果你想把“GitHub 同步代码”和“Space 访问 Bucket”分开控制,可以单独再配 HF_BUCKET_TOKEN

📁 项目结构

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-injector.js      # 浏览器指纹注入脚本
│
├── src/                             # 后端源代码目录
│   ├── server.js                    # 主服务器文件
│   ├── start.js                     # 智能启动脚本 (自动判断单进程/多进程)
│   ├── config/
│   │   └── index.js                 # 配置文件
│   ├── controllers/                 # 控制器目录
│   │   ├── chat.js                  # 聊天控制器
│   │   ├── chat.image.video.js      # 图片/视频生成控制器
│   │   ├── cli.chat.js              # CLI聊天控制器
│   │   └── models.js                # 模型控制器
│   ├── middlewares/                 # 中间件目录
│   │   ├── authorization.js         # 授权中间件
│   │   └── chat-middleware.js       # 聊天中间件
│   ├── models/                      # 模型目录
│   │   └── models-map.js            # 模型映射配置
│   ├── routes/                      # 路由目录
│   │   ├── accounts.js              # 账户路由
│   │   ├── chat.js                  # 聊天路由
│   │   ├── cli.chat.js              # CLI聊天路由
│   │   ├── models.js                # 模型路由
│   │   ├── settings.js              # 设置路由
│   │   └── verify.js                # 验证路由
│   └── utils/                       # 工具函数目录
│       ├── account-rotator.js       # 账户轮询器
│       ├── account.js               # 账户管理
│       ├── chat-helpers.js          # 聊天辅助函数
│       ├── cli.manager.js           # CLI管理器
│       ├── cookie-generator.js      # Cookie生成器
│       ├── data-persistence.js      # 数据持久化
│       ├── fingerprint.js           # 浏览器指纹生成
│       ├── img-caches.js            # 图片缓存
│       ├── logger.js                # 日志工具
│       ├── precise-tokenizer.js     # 精确分词器
│       ├── proxy-helper.js          # 代理辅助函数
│       ├── redis.js                 # Redis连接
│       ├── request.js               # HTTP请求封装
│       ├── setting.js               # 设置管理
│       ├── ssxmod-manager.js        # ssxmod参数管理
│       ├── token-manager.js         # Token管理器
│       ├── tools.js                 # 工具调用处理
│       └── upload.js                # 文件上传
│
└── public/                          # 前端项目目录
    ├── dist/                        # 编译后的前端文件
    │   ├── assets/                  # 静态资源
    │   ├── favicon.png
    │   └── index.html
    ├── src/                         # 前端源代码
    │   ├── App.vue                  # 主应用组件
    │   ├── main.js                  # 入口文件
    │   ├── style.css                # 全局样式
    │   ├── assets/                  # 静态资源
    │   │   └── background.mp4
    │   ├── routes/                  # 路由配置
    │   │   └── index.js
    │   └── views/                   # 页面组件
    │       ├── auth.vue             # 认证页面
    │       ├── dashboard.vue        # 仪表板页面
    │       └── settings.vue         # 设置页面
    ├── package.json                 # 前端依赖配置
    ├── package-lock.json
    ├── index.html                   # 前端入口HTML
    ├── postcss.config.js            # PostCSS配置
    ├── tailwind.config.js           # TailwindCSS配置
    ├── vite.config.js               # Vite构建配置
    └── public/                      # 公共静态资源
        └── favicon.png

📖 API 文档

🔐 API 认证说明

本API支持多密钥认证机制,所有API请求都需要在请求头中包含有效的API密钥:

Authorization: Bearer sk-your-api-key

支持的密钥类型:

  • 管理员密钥: 第一个配置的API_KEY,拥有完整权限
  • 普通密钥: 其他配置的API_KEY,仅可调用API接口

认证示例:

# 使用管理员密钥
curl -H "Authorization: Bearer sk-admin123" http://localhost:3000/v1/models

# 使用普通密钥
curl -H "Authorization: Bearer sk-user456" http://localhost:3000/v1/chat/completions

🔍 获取模型列表

获取所有可用的 AI 模型列表。

GET /v1/models
Authorization: Bearer sk-your-api-key
GET /models (免认证)

响应示例:

{
  "object": "list",
  "data": [
    {
      "id": "qwen-max-latest",
      "object": "model",
      "created": 1677610602,
      "owned_by": "qwen"
    }
  ]
}

💬 聊天对话

发送聊天消息并获取 AI 回复。

POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-your-api-key

请求体:

{
  "model": "qwen-max-latest",
  "messages": [
    {
      "role": "system",
      "content": "你是一个有用的助手。"
    },
    {
      "role": "user",
      "content": "你好,请介绍一下自己。"
    }
  ],
  "stream": false,
  "temperature": 0.7,
  "max_tokens": 2000
}

响应示例:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "qwen-max-latest",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!我是一个AI助手..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 50,
    "total_tokens": 70
  }
}

🎨 图像生成/编辑

使用 -image 模型启用文本到图像生成功能。 使用 -image-edit 模型启用图像修改功能。 当使用 -image 模型时你可以通过在请求体中添加 size 参数或在消息内容中包含特定关键词 1:1, 4:3, 3:4, 16:9, 9:16 来控制图片尺寸。

POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-your-api-key

请求体:

{
  "model": "qwen-max-latest-image",
  "messages": [
    {
      "role": "user",
      "content": "画一只在花园里玩耍的小猫咪,卡通风格"
    }
  ],
  "size": "1:1",
  "stream": false
}

支持的参数:

  • size: 图片尺寸,支持 "1:1""4:3""3:4""16:9""9:16"
  • stream: 支持流式和非流式响应

响应示例:

{
  "created": 1677652288,
  "model": "qwen-max-latest",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "![image](https://example.com/generated-image.jpg)"
      },
      "finish_reason": "stop"
    }
  ]
}

🎯 高级功能

🔍 智能搜索模式

在模型名称后添加 -search 后缀启用搜索功能:

{
  "model": "qwen-max-latest-search",
  "messages": [...]
}

🧠 推理模式

在模型名称后添加 -thinking 后缀启用思考过程输出:

{
  "model": "qwen-max-latest-thinking",
  "messages": [...]
}

🔍🧠 组合模式

同时启用搜索和推理功能:

{
  "model": "qwen-max-latest-thinking-search",
  "messages": [...]
}

🎨 T2I 生图模式

通过设置 chat_type 参数为 t2i 启用文本到图像生成功能:

{
  "model": "qwen-max-latest",
  "chat_type": "t2i",
  "messages": [
    {
      "role": "user",
      "content": "画一只可爱的小猫咪"
    }
  ],
  "size": "1:1"
}

支持的图片尺寸: 1:14:33:416:99:16

智能尺寸识别: 系统会自动从提示词中识别尺寸关键词并设置对应尺寸

🖼️ 多模态支持

API 自动处理图像上传,支持在对话中发送图片:

{
  "model": "qwen-max-latest",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "text",
          "text": "这张图片里有什么?"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,..."
          }
        }
      ]
    }
  ]
}

🖥️ CLI 端点

CLI 端点使用 Qwen Code / Qwen Cli 的 OAuth 令牌访问,支持 256K 上下文和工具调用(Function Calling)。

支持的模型:

模型 ID 说明
qwen3-coder-plus Qwen3 Coder Plus
qwen3-coder-flash Qwen3 Coder Flash(速度更快)
coder-model Qwen 3.5 Plus(带思维链,256K 上下文)
qwen3.5-plus coder-model 的别名,自动重定向

💬 CLI 聊天对话

通过 CLI 端点发送聊天请求,支持流式和非流式响应。

POST /cli/v1/chat/completions
Content-Type: application/json
Authorization: Bearer API_KEY

请求体:

{
  "model": "qwen3-coder-plus",
  "messages": [
    {
      "role": "user",
      "content": "你好,请介绍一下自己。"
    }
  ],
  "stream": false,
  "temperature": 0.7,
  "max_tokens": 2000
}

使用 coder-model(即 Qwen 3.5 Plus)或其别名 qwen3.5-plus

{
  "model": "coder-model",
  "messages": [
    {
      "role": "user",
      "content": "写一个快速排序算法。"
    }
  ],
  "stream": false
}

流式请求:

{
  "model": "qwen3-coder-flash",
  "messages": [
    {
      "role": "user",
      "content": "写一首关于春天的诗。"
    }
  ],
  "stream": true
}

响应格式:

非流式响应与标准 OpenAI API 格式相同:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "model": "qwen3-coder-plus",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!我是一个AI助手..."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 20,
    "completion_tokens": 50,
    "total_tokens": 70
  }
}

流式响应使用 Server-Sent Events (SSE) 格式:

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"qwen3-coder-flash","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}

data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"qwen3-coder-flash","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}

data: [DONE]