TurnsAPI 是一个高性能多提供商 API 代理服务,支持 OpenAI、Google Gemini、Anthropic Claude、Azure OpenAI 等多个大模型提供商。
- 多提供商支持: OpenAI、Google Gemini、Anthropic Claude、Azure OpenAI 等
- 完整工具调用: 支持 Function Calling、tool_choice、并行工具调用
- 智能路由: 自动故障转移和重试机制,支持多种轮询策略
- 模型重命名: 支持模型别名映射,统一不同分组的模型名称
- 参数覆盖: 分组级别的请求参数覆盖(temperature、max_tokens等)
- 流式响应: 完全支持 SSE 流式响应和原生接口格式
- OpenAI Responses API: OpenAI 分组可选使用
/v1/responses作为上游(仍对外保持 Chat Completions 兼容格式)- 部分 OpenAI-compatible 网关可能要求
HTTP-Referer/X-Title/Origin等头;TurnsAPI 支持在分组headers配置,或从客户端请求头转发(不会覆盖分组已配置值)
- 部分 OpenAI-compatible 网关可能要求
- 实时监控: Web 界面监控 API 密钥状态和服务性能
- 日志分析: 完整的请求日志记录和统计分析
- 安全认证: 内置认证系统保护 API 和管理界面
# 1) 创建配置(推荐从示例复制)
mkdir -p config logs data
cp config/config.example.yaml config/config.yaml
# 2) 启动(包含 turnsapi + postgres)
docker compose up --build -d
# turnsapi 默认映射端口:6001 -> 8080
# postgres 默认映射端口:5435 -> 5432(防止与本机其它 postgres 冲突)提示:容器内 turnsapi 连接数据库请使用
postgres:5432(服务名+容器端口);如果你在宿主机直连数据库,请使用localhost:5435。
git clone <repository-url>
cd TurnsApi
go mod tidy
# go.mod 需要 Go 1.24+(Dockerfile 也已使用 golang:1.24-alpine)
go run ./cmd/turnsapi -config config/config.yaml访问 http://localhost:6001 查看管理界面(本地运行则为 http://localhost:8080)
server:
port: "8080"
mode: "release" # debug, release, test
auth:
enabled: true
username: "admin"
password: "turnsapi123" # 请修改默认密码
session_timeout: "24h"user_groups:
openai_official:
name: "OpenAI Official"
provider_type: "openai"
base_url: "https://api.openai.com/v1"
enabled: true
rotation_strategy: "round_robin" # round_robin, random, least_used
api_keys:
- "sk-your-openai-key"
models:
- "gpt-5"
# 可选:模型重命名
model_mappings:
gpt4: "gpt-5"
# 可选:参数覆盖
request_params:
temperature: 0.7
max_tokens: 2000
# 强制覆盖客户端同名字段(包括 stream),也支持覆盖未建模字段(如 response_format 等)
# stream: false
# response_format:
# type: "json_object"
# 可选:RPM限制
rpm_limit: 60
# 可选:启用 OpenAI Responses API(/v1/responses),默认 false
use_responses_api: false
google_gemini:
name: "Google Gemini"
provider_type: "gemini"
base_url: "https://generativelanguage.googleapis.com/v1beta"
enabled: true
api_keys:
- "your-gemini-api-key"
models:
- "gemini-pro"
- "gemini-2.5-pro"
use_native_response: true # 启用原生响应格式database:
driver: "postgres"
# docker-compose 内使用 postgres 服务名(容器内端口固定为 5432)
dsn: "postgres://turnsapi:turnsapi@postgres:5432/turnsapi?sslmode=disable"
# 高并发推荐开启:请求日志异步批量写入(降低请求阻塞与锁竞争)
request_logs:
async_write: true
buffer: 10000
batch_size: 200
flush_interval: "200ms"# 聊天完成
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-access-token" \
-d '{
"model": "gpt-5",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": false
}'
# 指定提供商分组
curl -X POST http://localhost:8080/v1/chat/completions \
-H "X-Provider-Group: openai_official" \
-d '...'
# 流式响应
curl -X POST http://localhost:8080/v1/chat/completions \
-d '{"model": "gpt-5", "messages": [...], "stream": true}'# 登录获取令牌
curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "turnsapi123"}'curl -X POST http://localhost:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-access-token" \
-d '{
"model": "gpt-5",
"messages": [{"role": "user", "content": "What is the weather in NYC?"}],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}'访问 http://localhost:8080 查看管理界面
- 多提供商管理和实时监控
- 分组配置和密钥管理
- 模型重命名和参数覆盖设置
- 请求日志查看和统计分析
- 配置导出/导入功能
# 健康检查
curl http://localhost:8080/health
# 服务状态
curl http://localhost:8080/admin/status
# 请求日志
curl http://localhost:8080/admin/logs- 服务启动失败: 检查配置文件格式和端口占用
- API请求失败: 验证API密钥有效性和网络连接
- Docker问题: 检查容器日志
docker logs turnsapi
# 查看实时日志
tail -f logs/turnsapi.log
# 查看错误日志
grep "ERROR" logs/turnsapi.logMIT License

