Files
AI2API/qwen2api-cf.md
BlueSkyXN abd64dd33e 0.0.2
2025-03-22 13:44:19 +08:00

242 lines
5.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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有效性
### 图像生成超时
**症状**: 返回"图像生成超时"错误
**解决方案**:
- 检查网络连接
- 尝试简化图像描述
- 尝试减小图像尺寸
### 流式响应中断
**症状**: 响应突然停止
**解决方案**:
- 检查网络稳定性
- 减少请求的复杂度