AI API 代理服务,将 Anthropic/OpenAI API 格式转换为 AWS CodeWhisperer 后端。
- 双 API 兼容 - 同时支持 Anthropic 和 OpenAI 请求格式
- key 池管理 - 多账号轮询、故障转移、自动冷却
- 流式响应 - SSE 实时输出,零延迟
- 分组路由 - 按分组隔离 Token 池
- 管理界面 - Vue 3 前端,可视化管理
git clone https://github.com/teraccc/kiro4api.git
cd kiro4api/backend
go build -o kiro4api ./cmd/kiro4apiexport KIRO_CLIENT_TOKEN="your-api-key"
export KIRO_AUTH_TOKEN='[{"auth":"Social","refreshToken":"your-token"}]'cd backend # 必须从 backend 目录运行
./kiro4api# Claude Code
export ANTHROPIC_BASE_URL="http://localhost:8080/v1"
export ANTHROPIC_API_KEY="your-api-key"
# OpenAI 兼容客户端
export OPENAI_BASE_URL="http://localhost:8080/v1"
export OPENAI_API_KEY="your-api-key"| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/models |
获取模型列表 |
| POST | /v1/messages |
Anthropic Messages API |
| POST | /v1/chat/completions |
OpenAI Chat API |
| POST | /:group/v1/messages |
指定分组的 Anthropic API |
| POST | /:group/v1/chat/completions |
指定分组的 OpenAI API |
| Anthropic 模型名 | 内部 ID |
|---|---|
claude-opus-4-5-20251101 |
claude-opus-4.5 |
claude-sonnet-4-5-20250929 |
CLAUDE_SONNET_4_5_20250929_V1_0 |
claude-sonnet-4-20250514 |
CLAUDE_SONNET_4_20250514_V1_0 |
claude-3-7-sonnet-20250219 |
CLAUDE_3_7_SONNET_20250219_V1_0 |
claude-haiku-4-5 |
auto |
# Anthropic 格式
curl -X POST http://localhost:8080/v1/messages \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
# OpenAI 格式
curl -X POST http://localhost:8080/v1/chat/completions \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-20250514",
"messages": [{"role": "user", "content": "Hello"}]
}'| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
KIRO_CLIENT_TOKEN |
是* | - | API 认证密钥 |
KIRO_AUTH_TOKEN |
是 | - | AWS Token JSON 数组 |
PORT |
否 | 8080 |
服务端口 |
LOG_LEVEL |
否 | info |
日志级别 (debug/info/warn/error) |
GIN_MODE |
否 | release |
Gin 运行模式 |
DATABASE_URL |
否 | - | PostgreSQL 连接字符串 |
DB_HOST |
否 | localhost |
数据库主机 |
DB_PORT |
否 | 5432 |
数据库端口 |
DB_USER |
否 | postgres |
数据库用户 |
DB_PASSWORD |
否 | - | 数据库密码 |
DB_NAME |
否 | kiro4api |
数据库名 |
MAX_TOOL_DESCRIPTION_LENGTH |
否 | 10000 |
工具描述最大长度 |
RATE_LIMIT_QPS |
否 | 50 |
每秒请求限制 |
RATE_LIMIT_BURST |
否 | 100 |
突发请求限制 |
*如果数据库中配置了 API Keys,则非必需。
# 单账号
export KIRO_AUTH_TOKEN='[{"auth":"Social","refreshToken":"xxx"}]'
# 多账号混合认证
export KIRO_AUTH_TOKEN='[
{"auth":"Social","refreshToken":"token1"},
{"auth":"Social","refreshToken":"token2"},
{"auth":"IdC","refreshToken":"idc-token","clientId":"xxx","clientSecret":"xxx"}
]'Token 文件位置: ~/.aws/sso/cache/kiro-auth-token.json
┌──────────────────────────────────────────────────────────────┐
│ Client Request │
│ (Anthropic / OpenAI) │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ Auth Middleware → Rate Limiter → Request Converter │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ Token Manager │
│ (Sequential / Failover / Cooldown) │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ AWS CodeWhisperer API │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ Response Parser │
│ Extractor → Transformer → StateMachine → Serializer │
└──────────────────────────────────────────────────────────────┘
│
▼
┌──────────────────────────────────────────────────────────────┐
│ Client Response │
│ (Anthropic SSE) │
└──────────────────────────────────────────────────────────────┘
kiro4api/
├── backend/
│ ├── cmd/kiro4api/ # 入口
│ ├── internal/
│ │ ├── auth/ # Token 管理
│ │ ├── config/ # 配置和模型映射
│ │ ├── converter/ # 请求转换 (Anthropic → CW)
│ │ ├── parser/ # 响应解析 (CW → Anthropic)
│ │ ├── server/ # HTTP 服务和中间件
│ │ └── service/ # 业务逻辑
└── frontend/ # Vue 3 管理界面
converter/ - 请求转换
| 文件 | 职责 |
|---|---|
types.go |
中间类型 (UnifiedMessage, ConvertContext) |
message.go |
消息解析 |
history.go |
历史构建 |
request.go |
请求组装入口 |
parser/ - 响应解析
| 文件 | 职责 |
|---|---|
extractor.go |
JSON 提取 |
transformer.go |
事件转换 |
state_machine.go |
状态验证 |
serializer.go |
SSE 序列化 |
docker run -d -p 8080:8080 \
-e KIRO_AUTH_TOKEN='[{"auth":"Social","refreshToken":"xxx"}]' \
-e KIRO_CLIENT_TOKEN="your-api-key" \
-v ./data:/app/data \
teraccc/kiro4api:latestversion: '3'
services:
kiro4api:
image: teraccc/kiro4api:latest
ports:
- "8080:8080"
environment:
- KIRO_AUTH_TOKEN=[{"auth":"Social","refreshToken":"xxx"}]
- KIRO_CLIENT_TOKEN=your-api-key
volumes:
- ./data:/app/datacd backend
# 构建
go build -o kiro4api ./cmd/kiro4api
# 测试
go test ./...
# 调试模式
LOG_LEVEL=debug ./kiro4apicd frontend
npm install
npm run dev # 开发服务器
npm run build # 构建到 backend/static/| 方法 | 路径 | 说明 |
|---|---|---|
| GET/POST/DELETE/PATCH | /api/tokens |
Token 管理 |
| GET/POST/PUT/DELETE | /api/groups |
分组管理 |
| GET/POST | /api/settings |
设置 |
| GET/POST/PATCH/DELETE | /api/keys |
API Key 管理 |
| GET | /api/stats |
统计信息 |
MIT