KiroGate
OpenAI & Anthropic 兼容的 Kiro IDE API 代理网关,支持 Claude Code CLI
Install / Use
/learn @aliom-v/KiroGateQuality Score
Category
Development & EngineeringSupported Platforms
README
KiroGate
OpenAI & Anthropic 兼容的 Kiro IDE API 代理网关
通过任何支持 OpenAI 或 Anthropic API 的工具使用 Claude 模型
功能特性 • 快速开始 • 配置说明 • API 参考 • 部署
</div>致谢: 本项目基于 kiro-openai-gateway by @Jwadow 开发,整合 kiro-account-manager 全部功能。
✨ 功能特性
- 双 API 兼容 — 同时支持 OpenAI (
/v1/chat/completions) 和 Anthropic (/v1/messages) 格式 - 完整流式传输 — SSE 流式响应,支持 Thinking 标签解析
- 工具调用 — 完整的 Function Calling / Tool Use 支持
- 多账号智能调度 — 账号池 + 健康分数 + 自动故障转移 + 配额追踪
- 多租户认证 — 简单 API Key / 组合模式 / 托管 API Key 三种认证方式
- 上下文压缩 — 三层缓存 + AI 摘要,自动压缩超长对话
- 熔断器 + 限流 — 令牌桶限流 + 熔断器模式保护后端
- 管理面板 — 内置 Web UI,账号管理、API Key 管理、Dashboard 监控
- 零外部依赖 — Deno 原生运行,内置 KV 存储,无需 Redis/数据库
📁 项目结构
kirogate/
├── main.ts # 入口 + HTTP 路由 + 管理 API
├── lib/
│ ├── types.ts # 类型定义
│ ├── kiroApi.ts # Kiro API 客户端(双端点、DNS 缓存、机器码)
│ ├── accountPool.ts # 多账号智能调度池
│ ├── translator.ts # 格式转换(OpenAI ↔ Kiro ↔ Claude)
│ ├── stream.ts # 流处理(AWS Event Stream + SSE)
│ ├── compressor.ts # 上下文压缩(三层缓存 + AI 摘要)
│ ├── storage.ts # Deno KV 存储层
│ ├── rateLimiter.ts # 令牌桶限流
│ ├── errorHandler.ts # 错误分类 + 熔断器
│ ├── logger.ts # 日志系统
│ └── pages.ts # 嵌入式 HTML 前端页面
├── deno.json # Deno 配置
├── Dockerfile
└── docker-compose.yml
🚀 快速开始
环境要求
- Deno 2.x+
本地运行
# 设置环境变量
export PROXY_API_KEY="your-secret-api-key"
export ADMIN_PASSWORD="your-admin-password"
# 启动服务
deno run --allow-net --allow-env --unstable-kv main.ts
# 或使用 deno task
deno task start
# 开发模式(自动重载)
deno task dev
服务启动后访问 http://localhost:8000 查看首页。
添加账号
- 访问
http://localhost:8000/admin/accounts - 输入管理密码(
ADMIN_PASSWORD) - 点击「添加账号」,粘贴 Kiro 的 Refresh Token
- 系统会自动刷新 Access Token
发送请求
# OpenAI 格式
curl http://localhost:8000/v1/chat/completions \
-H "Authorization: Bearer your-secret-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"messages": [{"role": "user", "content": "Hello!"}],
"stream": true
}'
# Anthropic 格式
curl http://localhost:8000/v1/messages \
-H "x-api-key: your-secret-api-key" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello!"}]
}'
⚙️ 配置说明
通过环境变量配置:
| 变量 | 默认值 | 说明 |
|------|--------|------|
| PROXY_API_KEY | changeme_proxy_secret | API 代理密钥 |
| ADMIN_PASSWORD | admin | 管理面板密码 |
| PORT | 8000 | 监听端口 |
| LOG_LEVEL | INFO | 日志级别(DEBUG/INFO/WARN/ERROR) |
| RATE_LIMIT_PER_MINUTE | 0 | 全局限流(0=不限) |
| ENABLE_COMPRESSION | true | 启用上下文压缩 |
🔑 认证方式
支持三种认证模式:
模式 1: 简单模式
使用 PROXY_API_KEY 直接认证,请求由服务端账号池分配账号:
Authorization: Bearer YOUR_PROXY_API_KEY
模式 2: 组合模式(多租户)
用户自带 Refresh Token,格式为 PROXY_API_KEY:REFRESH_TOKEN:
Authorization: Bearer YOUR_PROXY_API_KEY:YOUR_REFRESH_TOKEN
模式 3: 托管 API Key
通过管理面板创建的 kg- 前缀 Key,支持额度限制和模型限制:
Authorization: Bearer kg-xxxxxxxxxxxxxxxx
📡 API 参考
代理端点
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | /v1/models | 获取可用模型列表 |
| POST | /v1/chat/completions | OpenAI 聊天补全 |
| POST | /v1/messages | Anthropic Messages API |
| GET | /health | 健康检查 |
管理端点(需 Admin 密码)
| 方法 | 路径 | 说明 |
|------|------|------|
| GET/POST | /api/accounts | 账号列表 / 添加账号 |
| PUT/DELETE | /api/accounts/:id | 更新 / 删除账号 |
| POST | /api/accounts/:id/refresh | 手动刷新 Token |
| GET/POST | /api/keys | API Key 列表 / 创建 Key |
| PUT/DELETE | /api/keys/:id | 更新 / 删除 Key |
| GET | /api/proxy/status | 代理状态(无需认证) |
| GET | /api/proxy/health | 健康报告(无需认证) |
| GET | /api/proxy/stats | 详细统计 |
| GET | /api/proxy/logs | 请求日志 |
| PUT | /api/proxy/config | 更新运行时配置 |
| GET/PUT | /api/settings | 获取 / 更新设置 |
前端页面
| 路径 | 说明 |
|------|------|
| / | 首页 |
| /docs | API 文档 |
| /swagger | Swagger UI |
| /playground | 在线测试 |
| /deploy | 部署指南 |
| /dashboard | 监控面板 |
| /admin/accounts | 账号管理 |
| /admin/keys | API Key 管理 |
支持的模型
claude-opus-4-5claude-sonnet-4-5claude-sonnet-4claude-haiku-4-5claude-3-7-sonnet-20250219
💻 SDK 使用示例
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="your-secret-api-key"
)
response = client.chat.completions.create(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": "Hello!"}],
stream=True
)
for chunk in response:
print(chunk.choices[0].delta.content, end="")
Python (Anthropic SDK)
import anthropic
client = anthropic.Anthropic(
base_url="http://localhost:8000",
api_key="your-secret-api-key"
)
message = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello!"}]
)
print(message.content[0].text)
Node.js (OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "http://localhost:8000/v1",
apiKey: "your-secret-api-key",
});
const stream = await client.chat.completions.create({
model: "claude-sonnet-4-5",
messages: [{ role: "user", content: "Hello!" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}
🐳 部署
Docker
FROM denoland/deno:latest
WORKDIR /app
COPY . .
EXPOSE 8000
CMD ["run", "--allow-net", "--allow-env", "--unstable-kv", "main.ts"]
docker build -t kirogate .
docker run -d -p 8000:8000 \
-e PROXY_API_KEY="your-key" \
-e ADMIN_PASSWORD="admin123" \
kirogate
Docker Compose
version: "3"
services:
kirogate:
build: .
ports:
- "8000:8000"
environment:
- PROXY_API_KEY=your-key
- ADMIN_PASSWORD=admin123
restart: unless-stopped
Deno Deploy
deno install -A jsr:@deno/deployctl
deployctl deploy --project=your-project main.ts
🏗️ 架构说明
多账号调度
账号池支持三种调度模式:
- Smart(默认)— 基于健康分数 + 并发感知的智能调度
- Priority — 按优先级顺序使用
- Balanced — 均匀分配请求
每个账号维护 0-100 的健康分数,基于成功率、错误率和冷却状态动态调整。全部账号不可用时自动触发自愈机制。
上下文压缩
当对话超过 token 阈值时自动触发:
- 保留最近 N 条消息不压缩
- 历史消息分批发送给 Claude Haiku 生成摘要
- 三层缓存加速:增量内存 → LRU 内存 → Deno KV 持久化
熔断器
采用 CLOSED → OPEN → HALF_OPEN 三态模型,连续失败达到阈值后自动熔断,保护后端服务。
