OpenAI & Anthropic 兼容的 Kiro IDE API 代理网关
通过任何支持 OpenAI 或 Anthropic API 的工具使用 Claude 模型
致谢: 本项目基于 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 |
启用上下文压缩 |
支持三种认证模式:
使用 PROXY_API_KEY 直接认证,请求由服务端账号池分配账号:
Authorization: Bearer YOUR_PROXY_API_KEY
用户自带 Refresh Token,格式为 PROXY_API_KEY:REFRESH_TOKEN:
Authorization: Bearer YOUR_PROXY_API_KEY:YOUR_REFRESH_TOKEN
通过管理面板创建的 kg- 前缀 Key,支持额度限制和模型限制:
Authorization: Bearer kg-xxxxxxxxxxxxxxxx
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/v1/models |
获取可用模型列表 |
POST |
/v1/chat/completions |
OpenAI 聊天补全 |
POST |
/v1/messages |
Anthropic Messages API |
GET |
/health |
健康检查 |
| 方法 | 路径 | 说明 |
|---|---|---|
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
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="")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)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 || "");
}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" \
kirogateversion: "3"
services:
kirogate:
build: .
ports:
- "8000:8000"
environment:
- PROXY_API_KEY=your-key
- ADMIN_PASSWORD=admin123
restart: unless-stoppeddeno 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 三态模型,连续失败达到阈值后自动熔断,保护后端服务。