--- 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.ai` 和 `Qwen Code / Qwen Cli` 转换为 OpenAI 兼容 API 的代理服务。通过本项目,您只需要一个账户,即可以使用任何支持 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 上下文和工具调用能力 - 提供 Web 管理界面,方便配置和监控 ### ⚠️ 高并发说明 > **重要提示**: `chat.qwen.ai` 对单 IP 有限速策略,目前已知该限制与 Cookie 无关,仅与 IP 相关。 **解决方案:** 如需高并发使用,建议配合代理池实现 IP 轮换: | 方案 | 配置方式 | 说明 | |------|----------|------| | **方案一** | `PROXY_URL` + [ProxyFlow](https://github.com/Rfym21/ProxyFlow) | 直接配置代理地址,所有请求通过代理池轮换 IP | | **方案二** | `QWEN_CHAT_PROXY_URL` + [UrlProxy](https://github.com/Rfym21/UrlProxy) + [ProxyFlow](https://github.com/Rfym21/ProxyFlow) | 通过反代 + 代理池组合,实现更灵活的 IP 轮换 | **配置示例:** ```bash # 方案一:直接使用代理池 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` 文件并配置以下参数: ```bash # 🌐 服务配置 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` | 服务监听地址 | `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` | | `SIMPLE_MODEL_MAP` | 简化模型映射,只返回基础模型不包含变体 | `true` 或 `false` | | `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` | | `CACHE_MODE` | 图片缓存存储方式 | `default`/`file` | | `LOG_LEVEL` | 日志级别 | `DEBUG`/`INFO`/`WARN`/`ERROR` | | `ENABLE_FILE_LOG` | 是否启用文件日志 | `true` 或 `false` | | `LOG_DIR` | 日志文件目录 | `./logs` | | `MAX_LOG_FILE_SIZE` | 最大日志文件大小(MB) | `10` | | `MAX_LOG_FILES` | 保留的日志文件数量 | `5` | > 💡 **提示**: 可以在 [Upstash](https://upstash.com/) 免费创建 Redis 实例,使用 TLS 协议时地址格式为 `rediss://...`
Upstash Redis
#### 🔑 多API_KEY配置说明 `API_KEY` 环境变量支持配置多个API密钥,用于实现不同权限级别的访问控制: **配置格式:** ```bash # 单个密钥(管理员权限) 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 部署 #### 方式一:直接运行 ```bash 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 ```bash # 下载配置文件 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 ``` ### 📦 本地部署 ```bash # 克隆项目 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](https://img.shields.io/badge/🤗%20Hugging%20Face-Deploy-yellow)](https://huggingface.co/spaces/devme/q2waepnilm)
Hugging Face Deployment
#### 推荐部署方式 部署链路如下: ```text 本地修改代码 -> 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:** ```bash HF_TOKEN=你的_huggingface_token ``` **GitHub Actions Variables:** ```bash 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 持久化**,建议至少配置以下变量: ```bash 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 配置的敏感项: ```bash 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 持久化工作方式 当前项目已适配如下持久化链路: ```text 容器启动 -> 从 HF Bucket 拉取 /data/qwen2api -> 应用用 file 模式读写本地文件 -> 后台定时同步回 HF Bucket ``` 默认会持久化这些目录: ```bash DATA_DIR=/data/qwen2api/data CACHE_DIR=/data/qwen2api/caches LOG_DIR=/data/qwen2api/logs ``` 推荐的 Bucket 名称: ```bash HF_BUCKET_REPO=DanielleNguyen/Qwen2API-A-Storage ``` #### 第五步:端口与监听地址说明 为兼容 Hugging Face Docker Space,推荐固定使用: ```bash 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 持久化,建议使用: ```bash 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: ```bash HF_TOKEN=你的_huggingface_token ``` > Space 访问 Bucket 时可以直接使用 Hugging Face 账号 Token。若你希望和 GitHub Actions 用途隔离,也可以额外配置 `HF_BUCKET_TOKEN` 专供 Bucket 读写使用。 #### 常见问题 **1. 为什么不建议在仓库里提交真实 `.env`?** 因为 `API_KEY`、`HF_TOKEN`、`HF_BUCKET_TOKEN`、`REDIS_URL` 等都属于敏感信息,应该放在 GitHub Secrets 或 Hugging Face Secrets 中。 **2. 为什么推荐 Docker Space?** 因为本项目是完整的 Node.js 服务,并且已经自带 `docker/Dockerfile`,使用 Docker Space 可以直接复用现有构建和启动流程。 **3. 如果 GitHub 已经配置了 `HF_TOKEN` 和 `HF_SPACE_ID`,还需要在 HF 里配置它们吗?** 不需要。 - `HF_TOKEN` 和 `HF_SPACE_ID` 只用于 **GitHub -> Hugging Face 同步代码** - Hugging Face Space 内只需要配置项目运行时环境变量,例如 `API_KEY`、`SERVICE_PORT`、`LISTEN_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密钥: ```http Authorization: Bearer sk-your-api-key ``` **支持的密钥类型:** - **管理员密钥**: 第一个配置的API_KEY,拥有完整权限 - **普通密钥**: 其他配置的API_KEY,仅可调用API接口 **认证示例:** ```bash # 使用管理员密钥 curl -H "Authorization: Bearer sk-admin123" http://localhost:3000/v1/models # 使用普通密钥 curl -H "Authorization: Bearer sk-user456" http://localhost:3000/v1/chat/completions ``` ### 🔍 获取模型列表 获取所有可用的 AI 模型列表。 ```http GET /v1/models Authorization: Bearer sk-your-api-key ``` ```http GET /models (免认证) ``` **响应示例:** ```json { "object": "list", "data": [ { "id": "qwen-max-latest", "object": "model", "created": 1677610602, "owned_by": "qwen" } ] } ``` ### 💬 聊天对话 发送聊天消息并获取 AI 回复。 ```http POST /v1/chat/completions Content-Type: application/json Authorization: Bearer sk-your-api-key ``` **请求体:** ```json { "model": "qwen-max-latest", "messages": [ { "role": "system", "content": "你是一个有用的助手。" }, { "role": "user", "content": "你好,请介绍一下自己。" } ], "stream": false, "temperature": 0.7, "max_tokens": 2000 } ``` **响应示例:** ```json { "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` 来控制图片尺寸。 ```http POST /v1/chat/completions Content-Type: application/json Authorization: Bearer sk-your-api-key ``` **请求体:** ```json { "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`: 支持流式和非流式响应 **响应示例:** ```json { "created": 1677652288, "model": "qwen-max-latest", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "![image](https://example.com/generated-image.jpg)" }, "finish_reason": "stop" } ] } ``` ### 🎯 高级功能 #### 🔍 智能搜索模式 在模型名称后添加 `-search` 后缀启用搜索功能: ```json { "model": "qwen-max-latest-search", "messages": [...] } ``` #### 🧠 推理模式 在模型名称后添加 `-thinking` 后缀启用思考过程输出: ```json { "model": "qwen-max-latest-thinking", "messages": [...] } ``` #### 🔍🧠 组合模式 同时启用搜索和推理功能: ```json { "model": "qwen-max-latest-thinking-search", "messages": [...] } ``` #### 🎨 T2I 生图模式 通过设置 `chat_type` 参数为 `t2i` 启用文本到图像生成功能: ```json { "model": "qwen-max-latest", "chat_type": "t2i", "messages": [ { "role": "user", "content": "画一只可爱的小猫咪" } ], "size": "1:1" } ``` **支持的图片尺寸:** `1:1`、`4:3`、`3:4`、`16:9`、`9:16` **智能尺寸识别:** 系统会自动从提示词中识别尺寸关键词并设置对应尺寸 #### 🖼️ 多模态支持 API 自动处理图像上传,支持在对话中发送图片: ```json { "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 端点发送聊天请求,支持流式和非流式响应。 ```http POST /cli/v1/chat/completions Content-Type: application/json Authorization: Bearer API_KEY ``` **请求体:** ```json { "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`: ```json { "model": "coder-model", "messages": [ { "role": "user", "content": "写一个快速排序算法。" } ], "stream": false } ``` **流式请求:** ```json { "model": "qwen3-coder-flash", "messages": [ { "role": "user", "content": "写一首关于春天的诗。" } ], "stream": true } ``` **响应格式:** 非流式响应与标准 OpenAI API 格式相同: ```json { "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] ```