Spaces:
Paused
Paused
title: OnDemand2Api | |
emoji: 😻 | |
colorFrom: red | |
colorTo: red | |
sdk: docker | |
pinned: false | |
# OpenAI OnDemand Adapter - Go版本 | |
这是一个高性能的Go语言实现版本,将OpenAI API请求转换为OnDemand API调用,支持异步并发处理。 | |
## 主要特性 | |
### 🚀 性能优化 | |
- **异步并发处理**:使用Goroutines和Channels实现高并发请求处理 | |
- **连接池复用**:HTTP客户端连接复用,减少连接开销 | |
- **内存优化**:高效的内存管理,避免内存泄漏 | |
- **多阶段Docker构建**:最小化最终镜像大小 | |
### 🔧 核心功能 | |
- **API密钥管理**:支持多个API密钥的自动轮换和故障转移 | |
- **会话管理**:智能维护OnDemand API会话状态,支持会话超时自动重置 | |
- **流式响应**:支持Server-Sent Events (SSE)流式响应 | |
- **模型映射**:灵活的OpenAI模型到OnDemand端点的映射 | |
- **错误处理**:完善的错误处理和自动重试机制 | |
- **健康检查**:内置健康检查端点 | |
### 🛡️ 安全特性 | |
- **API鉴权**:支持Authorization Bearer Token和X-API-KEY头部鉴权 | |
- **只读文件系统**:Docker容器使用只读根文件系统提高安全性 | |
- **资源限制**:Docker容器资源限制和安全配置 | |
## 快速开始 | |
### 环境要求 | |
- Go 1.21+ | |
- Docker & Docker Compose (可选) | |
### 本地运行 | |
1. **克隆项目并安装依赖** | |
```bash | |
git clone <repository> | |
cd ondemand2api | |
go mod download | |
``` | |
2. **设置环境变量** | |
```bash | |
export PRIVATE_KEY="your_private_key_here" | |
export ONDEMAND_APIKEYS="key1,key2,key3" | |
export PORT=7860 # 可选,默认7860 | |
export GIN_MODE=release # 可选:debug, release, test | |
``` | |
3. **运行应用** | |
```bash | |
go run main.go | |
``` | |
### Docker运行 | |
1. **构建并运行** | |
```bash | |
# 构建镜像 | |
docker build -t ondemand2api . | |
# 运行容器 | |
docker run -p 7860:7860 \ | |
-e PRIVATE_KEY="your_private_key_here" \ | |
-e ONDEMAND_APIKEYS="key1,key2,key3" \ | |
ondemand2api | |
``` | |
2. **使用Docker Compose** | |
```bash | |
# 编辑docker-compose.yml中的环境变量 | |
# 然后运行: | |
docker-compose up -d | |
``` | |
## API接口 | |
### 聊天完成接口 | |
```http | |
POST /v1/chat/completions | |
Authorization: Bearer your_private_key_here | |
Content-Type: application/json | |
{ | |
"model": "gpt-4o", | |
"messages": [ | |
{"role": "user", "content": "Hello!"} | |
], | |
"stream": false | |
} | |
``` | |
### 模型列表接口 | |
```http | |
GET /v1/models | |
Authorization: Bearer your_private_key_here | |
``` | |
### 健康检查接口 | |
```http | |
GET / | |
``` | |
## 配置说明 | |
### 环境变量 | |
| 变量名 | 必需 | 默认值 | 说明 | | |
|--------|------|--------|------| | |
| `PRIVATE_KEY` | 是 | testofli | API访问密钥 | | |
| `ONDEMAND_APIKEYS` | 是 | - | OnDemand API密钥列表,逗号分隔 | | |
| `PORT` | 否 | 7860 | 服务端口 | | |
| `GIN_MODE` | 否 | release | Gin运行模式 | | |
### 支持的模型映射 | |
| OpenAI模型 | OnDemand端点 | | |
|------------|--------------| | |
| o3 | predefined-openai-gpto3 | | |
| o3-mini | predefined-openai-gpto3-mini | | |
| gpt-4o | predefined-openai-gpt4o | | |
| gpt-4.1 | predefined-openai-gpt4.1 | | |
| deepseek-v3 | predefined-deepseek-v3 | | |
| deepseek-r1 | predefined-deepseek-r1 | | |
| claude-4-sonnet | predefined-claude-4-sonnet | | |
| gemini-2.5-pro | predefined-gemini-2.5-pro-preview | | |
## 性能特性 | |
### 并发处理 | |
- **Goroutines**:每个请求在独立的goroutine中处理 | |
- **Channel通信**:使用带缓冲的channel处理流式响应 | |
- **连接复用**:HTTP客户端自动复用连接 | |
- **超时控制**:完善的上下文超时控制 | |
### 内存管理 | |
- **垃圾回收优化**:合理的对象生命周期管理 | |
- **缓冲区复用**:高效的内存缓冲区使用 | |
- **资源自动释放**:defer语句确保资源及时释放 | |
### 错误处理 | |
- **分级重试**:根据错误类型进行智能重试 | |
- **熔断机制**:自动检测和恢复故障的API密钥 | |
- **日志记录**:详细的操作日志和错误追踪 | |
## 监控和日志 | |
### 日志输出 | |
应用使用结构化日志输出,包含: | |
- 请求处理信息 | |
- API密钥使用状态 | |
- 会话管理状态 | |
- 错误和异常信息 | |
### 健康检查 | |
- HTTP健康检查端点:`GET /` | |
- Docker健康检查:自动检查服务可用性 | |
- 返回API密钥池状态 | |
## 与Python版本的对比 | |
| 特性 | Python版本 | Go版本 | | |
|------|------------|--------| | |
| **性能** | 中等 | 高 | | |
| **并发处理** | 线程池 | Goroutines | | |
| **内存使用** | 较高 | 较低 | | |
| **启动时间** | 较慢 | 快 | | |
| **资源占用** | 高 | 低 | | |
| **并发能力** | 受GIL限制 | 原生并发 | | |
| **部署大小** | 大 | 小 | | |
## 开发说明 | |
### 项目结构 | |
``` | |
. | |
├── main.go # 主应用文件 | |
├── go.mod # Go模块定义 | |
├── go.sum # 依赖锁定文件 | |
├── Dockerfile # Docker构建文件 | |
├── docker-compose.yml # Docker Compose配置 | |
└── README.md # 项目文档 | |
``` | |
### 关键组件 | |
1. **KeyManager**: API密钥管理器 | |
- 自动轮换密钥 | |
- 故障检测和恢复 | |
- 会话状态管理 | |
2. **HTTP处理器**: | |
- Gin框架路由 | |
- 中间件鉴权 | |
- 流式响应处理 | |
3. **并发控制**: | |
- Context超时控制 | |
- Goroutine池管理 | |
- Channel通信 | |
## 故障排查 | |
### 常见问题 | |
1. **端口占用** | |
```bash | |
# 检查端口占用 | |
lsof -i :7860 | |
# 或使用不同端口 | |
export PORT=8080 | |
``` | |
2. **API密钥问题** | |
```bash | |
# 检查环境变量 | |
echo $ONDEMAND_APIKEYS | |
# 查看日志输出的密钥状态 | |
``` | |
3. **内存使用** | |
```bash | |
# 监控容器资源使用 | |
docker stats ondemand2api | |
``` | |
## 许可证 | |
本项目基于原Python项目进行Go语言重构,保持相同的功能特性并增强了性能和并发能力。 |