Skip to content

Repository files navigation

KiroGate

OpenAI & Anthropic 兼容的 Kiro IDE API 代理网关

License: AGPL v3Deno

通过任何支持 OpenAI 或 Anthropic API 的工具使用 Claude 模型

功能特性快速开始配置说明API 参考部署


致谢: 本项目基于 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

🚀 快速开始

环境要求

本地运行

# 设置环境变量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 查看首页。

添加账号

  1. 访问 http://localhost:8000/admin/accounts
  2. 输入管理密码(ADMIN_PASSWORD
  3. 点击「添加账号」,粘贴 Kiro 的 Refresh Token
  4. 系统会自动刷新 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_KEYchangeme_proxy_secretAPI 代理密钥
ADMIN_PASSWORDadmin管理面板密码
PORT8000监听端口
LOG_LEVELINFO日志级别(DEBUG/INFO/WARN/ERROR)
RATE_LIMIT_PER_MINUTE0全局限流(0=不限)
ENABLE_COMPRESSIONtrue启用上下文压缩

🔑 认证方式

支持三种认证模式:

模式 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/completionsOpenAI 聊天补全
POST/v1/messagesAnthropic Messages API
GET/health健康检查

管理端点(需 Admin 密码)

方法路径说明
GET/POST/api/accounts账号列表 / 添加账号
PUT/DELETE/api/accounts/:id更新 / 删除账号
POST/api/accounts/:id/refresh手动刷新 Token
GET/POST/api/keysAPI 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获取 / 更新设置

前端页面

路径说明
/首页
/docsAPI 文档
/swaggerSwagger UI
/playground在线测试
/deploy部署指南
/dashboard监控面板
/admin/accounts账号管理
/admin/keysAPI Key 管理

支持的模型

  • claude-opus-4-5
  • claude-sonnet-4-5
  • claude-sonnet-4
  • claude-haiku-4-5
  • claude-3-7-sonnet-20250219

💻 SDK 使用示例

Python (OpenAI SDK)

fromopenaiimportOpenAIclient=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
)
forchunkinresponse:
print(chunk.choices[0].delta.content, end="")

Python (Anthropic SDK)

importanthropicclient=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)

importOpenAIfrom"openai";constclient=newOpenAI({baseURL: "http://localhost:8000/v1",apiKey: "your-secret-api-key",});conststream=awaitclient.chat.completions.create({model: "claude-sonnet-4-5",messages: [{role: "user",content: "Hello!"}],stream: true,});forawait(constchunkofstream){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=admin123restart: unless-stopped

Deno Deploy

deno install -A jsr:@deno/deployctl
deployctl deploy --project=your-project main.ts

🏗️ 架构说明

多账号调度

账号池支持三种调度模式:

  • Smart(默认)— 基于健康分数 + 并发感知的智能调度
  • Priority — 按优先级顺序使用
  • Balanced — 均匀分配请求

每个账号维护 0-100 的健康分数,基于成功率、错误率和冷却状态动态调整。全部账号不可用时自动触发自愈机制。

上下文压缩

当对话超过 token 阈值时自动触发:

  1. 保留最近 N 条消息不压缩
  2. 历史消息分批发送给 Claude Haiku 生成摘要
  3. 三层缓存加速:增量内存 → LRU 内存 → Deno KV 持久化

熔断器

采用 CLOSED → OPEN → HALF_OPEN 三态模型,连续失败达到阈值后自动熔断,保护后端服务。

📄 许可证

AGPL-3.0

About

issues pr 请去上游仓库

Resources

Stars

64 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages