Skip to content

telagod/aipool

Repository files navigation

AI Client API Gateway (Go 版本)

统一的 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 (待实现)

快速开始

1. 安装

# 克隆仓库
git clone https://github.com/yicone/aiclient-api.git
cd aiclient-api/go

# 编译
go build -o aiclient-api ./cmd/server

2. 配置

# 复制配置文件示例
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

3. 运行

# 使用配置文件运行
./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

4. 测试

# 健康检查
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"

配置说明

主配置文件 (config.yaml)

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

提供商池配置 (provider-pools.yaml)

# 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"

API 端点

OpenAI 兼容

端点 方法 说明
/v1/chat/completions POST 聊天补全
/v1/models GET 列出模型
/v1/responses POST Responses API (待实现)

Claude 兼容

端点 方法 说明
/v1/messages POST Messages API

Gemini 兼容

端点 方法 说明
/v1beta/models GET 列出模型
/v1beta/models/{model}:generateContent POST 生成内容
/v1beta/models/{model}:streamGenerateContent POST 流式生成

Ollama 兼容

端点 方法 说明
/ollama/api/chat POST 聊天
/ollama/api/generate POST 生成
/ollama/api/tags GET 列出模型
/ollama/api/show POST 模型详情

管理 API

端点 方法 说明
/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

添加新提供商

  1. 实现 provider.Provider 接口
  2. provider/registry.go 中注册
  3. 添加协议转换器 (如需要)
  4. 更新配置文件示例

运行测试

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 集成

License

MIT

贡献

欢迎提交 Issue 和 Pull Request!

About

AI Model API Gateway with multi-provider support

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages