统一的 AI 提供商网关,支持多种 AI 服务提供商的协议转换、负载均衡和高可用。
- ✅ 多协议支持: OpenAI、Claude、Gemini、Ollama 协议
- ✅ 提供商池: 多实例负载均衡 (LRU 策略)
- ✅ 自动 Fallback: 提供商不可用时自动切换
- ✅ 健康检查: 定期检查提供商健康状态
- ✅ 流式响应: 支持所有协议的流式输出
- ✅ 工具调用: 完整的 Function Calling 支持
- ✅ 多模态: 支持文本、图片等多种内容类型
- ✅ Gemini OAuth: Google Gemini (OAuth 认证)
- ✅ Claude: Anthropic Claude (官方 API)
- ✅ OpenAI: OpenAI 及兼容 API
- ⏳ Kiro OAuth: AWS Bedrock Claude (待实现)
- ⏳ Qwen OAuth: 阿里云通义千问 (待实现)
- ✅ OpenAI Chat Completions:
/v1/chat/completions - ✅ OpenAI Models:
/v1/models - ✅ Claude Messages:
/v1/messages - ✅ Gemini:
/v1beta/models/{model}:generateContent - ✅ Ollama:
/ollama/api/chat,/ollama/api/generate,/ollama/api/tags - ⏳ OpenAI Responses:
/v1/responses(待实现)
# 克隆仓库
git clone https://github.com/yicone/aiclient-api.git
cd aiclient-api/go
# 编译
go build -o aiclient-api ./cmd/server# 复制配置文件示例
cp configs/config.yaml.example configs/config.yaml
cp configs/provider-pools.yaml.example configs/provider-pools.yaml
# 编辑配置文件
vim configs/config.yaml
vim configs/provider-pools.yaml# 使用配置文件运行
./aiclient-api -config configs/config.yaml
# 或使用环境变量
export API_KEY="your-api-key"
export MODEL_PROVIDER="gemini-oauth"
export PROJECT_ID="your-gcp-project-id"
export GEMINI_OAUTH_CREDS_FILE_PATH="/path/to/credentials.json"
./aiclient-api# 健康检查
curl http://localhost:3000/health
# OpenAI 格式请求
curl -X POST http://localhost:3000/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.0-flash-exp",
"messages": [{"role": "user", "content": "Hello!"}]
}'
# 列出模型
curl http://localhost:3000/v1/models \
-H "Authorization: Bearer your-api-key"server:
host: "0.0.0.0"
port: 3000
auth:
api_key: "your-api-key"
log:
level: "info"
format: "text"
default_provider: "gemini-oauth"
provider_pools_file: "configs/provider-pools.yaml"
health_check:
enabled: true
interval: 10m
max_error_count: 3# Fallback 链
fallback_chains:
gemini-oauth:
- claude-custom
- openai-custom
# 提供商池
pools:
gemini-oauth:
- uuid: "gemini-1"
name: "Gemini Primary"
enabled: true
check_health: true
check_model: "gemini-2.0-flash-exp"
project_id: "your-project-id"
oauth_creds_file_path: "/path/to/credentials.json"| 端点 | 方法 | 说明 |
|---|---|---|
/v1/chat/completions |
POST | 聊天补全 |
/v1/models |
GET | 列出模型 |
/v1/responses |
POST | Responses API (待实现) |
| 端点 | 方法 | 说明 |
|---|---|---|
/v1/messages |
POST | Messages API |
| 端点 | 方法 | 说明 |
|---|---|---|
/v1beta/models |
GET | 列出模型 |
/v1beta/models/{model}:generateContent |
POST | 生成内容 |
/v1beta/models/{model}:streamGenerateContent |
POST | 流式生成 |
| 端点 | 方法 | 说明 |
|---|---|---|
/ollama/api/chat |
POST | 聊天 |
/ollama/api/generate |
POST | 生成 |
/ollama/api/tags |
GET | 列出模型 |
/ollama/api/show |
POST | 模型详情 |
| 端点 | 方法 | 说明 |
|---|---|---|
/health |
GET | 健康检查 |
/api/system-info |
GET | 系统信息 |
/api/providers |
GET | 提供商状态 |
/api/config |
GET | 获取配置 |
/api/config |
POST | 保存配置 (待实现) |
┌─────────────┐
│ Client │
└──────┬──────┘
│
▼
┌─────────────────────────────────────┐
│ Router & Middleware │
│ (Auth, CORS, Logger, Recovery) │
└──────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Protocol Converters │
│ (OpenAI ↔ Claude ↔ Gemini) │
└──────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Pool Manager │
│ (LRU, Fallback, Health Check) │
└──────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ Provider Registry │
│ (Factory, Lazy Loading) │
└──────┬──────────────────────────────┘
│
▼
┌──────────────────────────────────────┐
│ Providers │
│ Gemini │ Claude │ OpenAI │ Kiro │
└──────────────────────────────────────┘
go/
├── cmd/
│ └── server/ # 主程序入口
├── internal/
│ ├── config/ # 配置管理
│ ├── converter/ # 协议转换
│ ├── middleware/ # HTTP 中间件
│ ├── provider/ # 提供商抽象
│ │ ├── pool/ # 提供商池
│ │ ├── claude/ # Claude 实现
│ │ ├── gemini/ # Gemini 实现
│ │ └── openai/ # OpenAI 实现
│ ├── router/ # HTTP 路由
│ └── server/ # HTTP 服务器
├── configs/ # 配置文件示例
└── go.mod
- 实现
provider.Provider接口 - 在
provider/registry.go中注册 - 添加协议转换器 (如需要)
- 更新配置文件示例
go test ./...| 变量 | 说明 | 示例 |
|---|---|---|
SERVER_HOST |
服务器地址 | 0.0.0.0 |
SERVER_PORT |
服务器端口 | 3000 |
API_KEY |
API 密钥 | your-api-key |
LOG_LEVEL |
日志级别 | info |
MODEL_PROVIDER |
默认提供商 | gemini-oauth |
PROJECT_ID |
GCP 项目 ID | your-project-id |
GEMINI_OAUTH_CREDS_FILE_PATH |
Gemini 凭证文件 | /path/to/creds.json |
OPENAI_API_KEY |
OpenAI API Key | sk-... |
CLAUDE_API_KEY |
Claude API Key | sk-ant-... |
PROVIDER_POOLS_FILE |
提供商池配置文件 | configs/provider-pools.yaml |
- 连接复用: HTTP 客户端使用连接池
- 懒加载: Provider 实例按需创建
- 并发安全: 使用 sync.RWMutex 保护共享状态
- LRU 策略: 均匀分配负载到多个实例
- 自动重试: 可配置的重试策略
- 健康检查: 定期检查提供商健康状态
- 自动 Fallback: 主提供商不可用时自动切换
- 错误计数: 连续失败超过阈值后标记为不健康
- Kiro OAuth Provider (AWS Bedrock)
- OpenAI Responses API
- 配置热重载 API
- 完整的单元测试
- 集成测试
- Prometheus Metrics
- Admin UI 集成
MIT
欢迎提交 Issue 和 Pull Request!