mirror of
https://github.com/BlueSkyXN/AI2API.git
synced 2025-12-24 13:07:56 +08:00
242 lines
5.4 KiB
Markdown
242 lines
5.4 KiB
Markdown
# Qwen2API
|
||
## 项目简介
|
||
|
||
Qwen2API,用于将通义千问(Qwen AI)的WEB转换为OpenAI兼容的API接口格式,让您可以通过标准的OpenAI API调用方式来使用通义千问模型。该代理支持包括模型列表查询、聊天补全(流式和非流式)、图像生成,以及图片上传功能,为开发者提供了便捷的集成方式。
|
||
|
||
## 特性
|
||
|
||
- **OpenAI API兼容**: 提供与OpenAI API格式兼容的接口,方便现有OpenAI项目迁移
|
||
- **模型支持**: 支持通义千问的各类模型,包括qwen-max、qwen-plus等
|
||
- **模型变体**: 自动扩展模型名称,支持以下后缀功能:
|
||
- `-thinking`: 启用思考模式
|
||
- `-search`: 启用搜索增强
|
||
- `-draw`: 启用图像生成 【可能存在问题】
|
||
- 以上后缀可组合使用,如`qwen-max-latest-thinking-search`
|
||
- **流式输出**: 支持流式响应,减少首字等待时间
|
||
- **多模态交互**: 支持图片上传和图像生成【可能存在问题】
|
||
- **图像生成**: 提供专用的图像生成接口【可能存在问题】
|
||
|
||
## 部署要求
|
||
|
||
- CloudFlare账号
|
||
- CloudFlare Workers服务
|
||
|
||
## 安装部署
|
||
|
||
1. 登录CloudFlare Workers控制台
|
||
2. 创建新的Worker
|
||
3. 将[qwen2api-cf.js](qwen2api-cf.js)代码复制到Worker编辑器中
|
||
4. 保存并部署
|
||
|
||
## 配置选项
|
||
|
||
您可以通过环境变量配置以下选项:
|
||
|
||
| 变量名 | 描述 | 默认值 |
|
||
|-------|------|--------|
|
||
| API_PREFIX | API路径前缀,可用于自定义路由 | 空字符串 |
|
||
|
||
## 使用方法
|
||
|
||
### 认证
|
||
|
||
使用通义千问的Token作为API密钥,在请求头中设置`Authorization: Bearer {YOUR_QWEN_TOKEN}`。
|
||
|
||
**获取Token方法**:
|
||
1. 访问[通义千问官网](https://chat.qwen.ai/)
|
||
2. 登录您的账号
|
||
3. 从Cookie中提取`token`字段的值
|
||
|
||
### 支持的API端点
|
||
|
||
#### 1. 获取模型列表
|
||
|
||
```
|
||
GET /v1/models
|
||
```
|
||
|
||
**响应示例**:
|
||
```json
|
||
{
|
||
"object": "list",
|
||
"data": [
|
||
{
|
||
"id": "qwen-max-latest",
|
||
"object": "model",
|
||
"created": 1709128113453,
|
||
"owned_by": "qwen"
|
||
},
|
||
{
|
||
"id": "qwen-max-latest-thinking",
|
||
"object": "model",
|
||
"created": 1709128113453,
|
||
"owned_by": "qwen"
|
||
},
|
||
// 更多模型...
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 2. 聊天补全
|
||
|
||
```
|
||
POST /v1/chat/completions
|
||
```
|
||
|
||
**请求体示例**:
|
||
```json
|
||
{
|
||
"model": "qwen-max-latest",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "你好,请介绍一下自己"
|
||
}
|
||
],
|
||
"stream": false
|
||
}
|
||
```
|
||
|
||
**特殊功能**:
|
||
- 使用`-thinking`后缀启用思考模式
|
||
- 使用`-search`后缀启用搜索增强
|
||
- 同时传递图片(多模态)
|
||
|
||
**多模态示例**:
|
||
```json
|
||
{
|
||
"model": "qwen2.5-vl-72b-instruct",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": [
|
||
{
|
||
"type": "text",
|
||
"text": "这张图片是什么?"
|
||
},
|
||
{
|
||
"type": "image_url",
|
||
"image_url": {
|
||
"url": "data:image/jpeg;base64,/9j/4AAQ..."
|
||
}
|
||
}
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
#### 3. 图像生成
|
||
|
||
**方法1**: 使用聊天接口
|
||
|
||
```
|
||
POST /v1/chat/completions
|
||
```
|
||
|
||
```json
|
||
{
|
||
"model": "qwen-max-latest-draw",
|
||
"messages": [
|
||
{
|
||
"role": "user",
|
||
"content": "画一只可爱的猫咪"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**方法2**: 使用专用图像生成接口
|
||
|
||
```
|
||
POST /v1/images/generations
|
||
```
|
||
|
||
```json
|
||
{
|
||
"model": "qwen-max-latest-draw",
|
||
"prompt": "画一只可爱的猫咪",
|
||
"n": 1,
|
||
"size": "1024*1024"
|
||
}
|
||
```
|
||
|
||
## 支持的模型
|
||
|
||
系统内置了以下默认模型,当API获取失败时会使用这些模型:
|
||
|
||
- qwen-max-latest
|
||
- qwen-plus-latest
|
||
- qwen2.5-vl-72b-instruct
|
||
- qwen2.5-14b-instruct-1m
|
||
- qvq-72b-preview
|
||
- qwq-32b-preview
|
||
- qwen2.5-coder-32b-instruct
|
||
- qwen-turbo-latest
|
||
- qwen2.5-72b-instruct
|
||
|
||
每个模型都支持添加后缀变体(-thinking、-search、-draw)。
|
||
|
||
## 技术实现细节
|
||
|
||
### 架构概述
|
||
|
||
该代理作为中间层,将OpenAI格式的请求转换为通义千问API格式,并将通义千问的响应转换回OpenAI格式。主要处理流程包括:
|
||
|
||
1. 解析请求和提取Token
|
||
2. 根据URL路径分发到不同处理函数
|
||
3. 转换请求格式并调用通义千问API
|
||
4. 处理响应并转换格式
|
||
5. 特殊处理流式响应和图像生成
|
||
|
||
### 模型处理机制
|
||
|
||
- 基础模型名称处理:从请求中提取模型名称
|
||
- 后缀功能处理:解析后缀并应用相应的配置
|
||
- `-thinking`: 设置`feature_config.thinking_enabled = true`
|
||
- `-search`: 设置`chat_type = "search"`
|
||
- `-draw`: 切换到图像生成流程
|
||
|
||
### 流式响应处理
|
||
|
||
代理实现了高效的流式响应处理机制:
|
||
1. 使用TransformStream处理数据流
|
||
2. 对数据进行SSE(Server-Sent Events)格式转换
|
||
3. 实现增量去重逻辑,确保内容不重复
|
||
4. 处理完成标记和结束流
|
||
|
||
### 图像生成实现
|
||
|
||
图像生成使用任务创建和状态轮询机制:
|
||
1. 创建图像生成任务并获取taskId
|
||
2. 定期轮询任务状态(最多30次,每6秒一次)
|
||
3. 获取生成的图像URL并返回
|
||
|
||
## 常见问题与解决方案
|
||
|
||
### Token无效或过期
|
||
|
||
**症状**: 请求返回401错误
|
||
**解决方案**: 重新获取通义千问Cookie中的token值
|
||
|
||
### 模型列表获取失败
|
||
|
||
**症状**: 仅显示默认模型列表
|
||
**解决方案**: 检查网络连接和token有效性
|
||
|
||
### 图像生成超时
|
||
|
||
**症状**: 返回"图像生成超时"错误
|
||
**解决方案**:
|
||
- 检查网络连接
|
||
- 尝试简化图像描述
|
||
- 尝试减小图像尺寸
|
||
|
||
### 流式响应中断
|
||
|
||
**症状**: 响应突然停止
|
||
**解决方案**:
|
||
- 检查网络稳定性
|
||
- 减少请求的复杂度
|
||
|