一个通过OpenAI兼容API端点公开Qwen模型的代理服务器,基于Python和FastAPI构建。
当使用130,000到150,000个tokens或更多的上下文时,用户可能会遇到错误或504网关超时问题。这似乎是Qwen模型的实际限制。Qwen代码本身也往往在这个限制下出现问题并卡住。
-
前提条件: 您需要与Qwen认证以生成所需的凭据文件。
- 运行
python authenticate.py进行Qwen账户认证 - 这将在
~/.qwen/oauth_creds.json中创建代理服务器所需的文件 - 或者,您可以使用QwenLM/qwen-code官方
qwen-codeCLI工具
- 运行
-
安装依赖:
pip install -r requirements.txt
-
启动服务器:
python main.py # 或者 python run.py --host 0.0.0.0 --port 8080 -
使用代理: 将您的OpenAI兼容客户端指向
http://localhost:8080/v1。
-
构建并运行:
docker-compose up -d
-
首次认证 (容器运行后):
# 进入容器 docker exec -it qwen-openai-proxy-python bash # 运行认证 python authenticate.py
代理支持多个Qwen账户以克服每个账户每天2,000次请求的限制。当达到配额限制时,账户会自动轮换。
-
列出现有账户:
python authenticate.py list
-
添加新账户:
python authenticate.py add <账户ID>
将
<账户ID>替换为您账户的唯一标识符(例如:account2,team-account等) -
删除账户:
python authenticate.py remove <账户ID>
- 当您配置了多个账户时,代理将自动在它们之间轮换
- 每个账户有每天2,000次请求的限制
- 当账户达到限制时,Qwen的API将返回配额超出错误
- 代理检测这些配额错误并自动切换到下一个可用账户
- 请求计数在本地跟踪,并在UTC午夜每天重置
- 您可以通过以下方式检查所有账户的请求计数:
python authenticate.py counts
代理在终端提供实时反馈:
- 显示每个请求使用的账户
- 显示每个账户的当前请求计数
- 在由于配额限制而轮换账户时通知
- 指示在轮换期间下一个将尝试的账户
代理服务器可以使用环境变量进行配置。在项目根目录中创建 .env 文件或直接在环境中设置变量。
API_KEY: 用于保护代理服务器的API密钥。如果设置,所有API请求都需要在Authorization header中提供此密钥。如果未设置,将禁用认证功能。
HOST: 绑定地址(默认:localhost)PORT: 监听端口(默认:8080)STREAM: 设置为true启用流式响应(默认:false)API_TIMEOUT: API请求超时时间,秒(默认:300)
DEBUG_LOG: 设置为true启用调试日志(默认:false)LOG_FILE_LIMIT: 保留的调试日志文件最大数量(默认:20)
示例 .env 文件:
# API认证(推荐设置以保护服务器)
API_KEY=your-secret-api-key-here
# 服务器配置
HOST=localhost
PORT=8080
# 启用流式响应(默认禁用)
STREAM=true
# API超时时间(5分钟)
API_TIMEOUT=300
# 启用调试日志(将创建日志文件)
DEBUG_LOG=true
# 只保留最近的10个日志文件
LOG_FILE_LIMIT=10import openai
client = openai.OpenAI(
api_key="your-secret-api-key-here", # 使用您在.env中设置的API_KEY
base_url="http://localhost:8080/v1"
)
response = client.chat.completions.create(
model="qwen3-coder-plus",
messages=[
{"role": "user", "content": "你好!"}
]
)
print(response.choices[0].message.content)curl -X POST "http://localhost:8080/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-secret-api-key-here" \
-d '{
"model": "qwen3-coder-plus",
"messages": [
{"role": "user", "content": "你好!"}
]
}'POST /v1/chat/completions- 聊天完成 (需要认证)GET /v1/models- 模型列表 (需要认证)POST /v1/embeddings- 嵌入向量 (需要认证)POST /auth/initiate- 启动认证流程 (需要认证)POST /auth/poll- 轮询认证状态 (需要认证)GET /health- 健康检查 (无需认证)
注意: 除了健康检查端点外,所有端点都需要在设置了API_KEY环境变量时提供有效的Authorization header。
运行包含的测试脚本来验证功能:
# 使用API Key运行所有测试
python test_api.py --api-key your-secret-api-key-here
# 运行特定测试
python test_api.py --test health
python test_api.py --test models --api-key your-secret-api-key-here
python test_api.py --test chat --api-key your-secret-api-key-here
# 测试API认证功能
python test_api.py --test api_auth --api-key your-secret-api-key-here
# 测试不同的URL
python test_api.py --url http://localhost:8080 --api-key your-secret-api-key-here代理现在在终端中显示每个请求的token计数,显示输入tokens和API返回的使用统计(提示、完成和总tokens)。
本项目基于 aptdnfapt/qwen-code-oai-proxy 的Node.js版本进行开发。感谢原作者提供了优秀的基础实现和设计思路。
- 跨平台兼容性: 从Node.js迁移到Python,解决了部分Linux环境下的兼容性问题
- 更好的适配性: Python生态系统在不同操作系统上的适配性更高
- 现代化架构: 使用FastAPI替代Express.js,提供更好的性能和开发体验
- 类型安全: 采用Pydantic进行数据验证,提高代码可靠性
- 简化部署: 优化了Docker配置和依赖管理
在保持原项目所有核心功能的基础上,Python版本提供了更好的稳定性和跨平台支持。
有关更详细的文档,请参阅 docs/ 目录。