de / README.md
caidaohz's picture
feat: Initialize OnDemand2API with Go, including API key management and chat completion functionality
ebcd387
metadata
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. 克隆项目并安装依赖
git clone <repository>
cd ondemand2api
go mod download
  1. 设置环境变量
export PRIVATE_KEY="your_private_key_here"
export ONDEMAND_APIKEYS="key1,key2,key3"
export PORT=7860  # 可选,默认7860
export GIN_MODE=release  # 可选:debug, release, test
  1. 运行应用
go run main.go

Docker运行

  1. 构建并运行
# 构建镜像
docker build -t ondemand2api .

# 运行容器
docker run -p 7860:7860 \
  -e PRIVATE_KEY="your_private_key_here" \
  -e ONDEMAND_APIKEYS="key1,key2,key3" \
  ondemand2api
  1. 使用Docker Compose
# 编辑docker-compose.yml中的环境变量
# 然后运行:
docker-compose up -d

API接口

聊天完成接口

POST /v1/chat/completions
Authorization: Bearer your_private_key_here
Content-Type: application/json

{
  "model": "gpt-4o",
  "messages": [
    {"role": "user", "content": "Hello!"}
  ],
  "stream": false
}

模型列表接口

GET /v1/models
Authorization: Bearer your_private_key_here

健康检查接口

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. 端口占用
# 检查端口占用
lsof -i :7860
# 或使用不同端口
export PORT=8080
  1. API密钥问题
# 检查环境变量
echo $ONDEMAND_APIKEYS
# 查看日志输出的密钥状态
  1. 内存使用
# 监控容器资源使用
docker stats ondemand2api

许可证

本项目基于原Python项目进行Go语言重构,保持相同的功能特性并增强了性能和并发能力。