跳到主要内容 AWS Kiro 账号池管理系统:Amazon Q Developer 转 OpenAI 兼容代理 | 极客日志
Go / Golang SaaS AI
AWS Kiro 账号池管理系统:Amazon Q Developer 转 OpenAI 兼容代理 本项目是一个基于 Go 语言开发的 AWS Kiro 账号池管理系统,旨在将 Amazon Q Developer API 转换为 OpenAI 兼容格式。系统支持多账号池管理、OIDC 自动认证、令牌自动刷新及智能负载均衡。提供现代化的 Vue.js 3 Web 管理控制台,具备账号监控、在线测试、请求日志及 IP 限流等企业级功能。支持 Linux、macOS、Windows 多平台部署,可通过 Systemd、Nginx 或 PM2 进行服务管理。适用于需要将 Amazon Q 接入现有 OpenAI 生态的场景。
FlinkHero 发布于 2026/4/5 更新于 2026/4/12 0 浏览AWS Kiro 账号池管理系统
AWS Kiro 账号池管理系统 - 将 Amazon Q Developer (Kiro) API 转换为 OpenAI 兼容格式的企业级 Go 代理服务。支持多账号池管理、OIDC 自动认证、令牌自动刷新、流式响应、完整的 Web 管理控制台。
核心特性
AWS Kiro 账号池管理
多账号池 : 支持最多 100 个 AWS Kiro (Amazon Q Developer) 账号统一管理
OIDC 自动认证 : 完整的 AWS OIDC 设备授权流程,无需手动获取令牌
智能负载均衡 : 自动选择可用账号,均衡分配请求负载
令牌自动刷新 : 后台自动检测并刷新过期的 AWS 令牌,保持账号池持续可用
账号状态监控 : 实时监控每个 Kiro 账号的健康状态、使用次数、最后使用时间
批量导入导出 : 支持批量添加、导入、导出 AWS Kiro 账号配置
API 格式转换
OpenAI 兼容 : 完全兼容 OpenAI Chat Completions API 格式
Claude 支持 : 支持 Claude Messages API 格式
流式响应 : SSE (Server-Sent Events) 流式输出
工具调用 : 完整支持 Function Calling / Tool Use
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown 转 HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
HTML 转 Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
模型映射 : Claude 4.5 Opus、Sonnet 4.5、Sonnet 3.5 自动映射到 Amazon Q
企业级安全
API Key 认证 : 自定义 API Key 保护服务访问
密码保护 : 管理控制台密码保护
IP 黑名单 : 支持封禁/解封特定 IP 地址
频率限制 : 可配置的 IP 和 API Key 双重限流
Web 管理控制台
现代化界面 : Vue.js 3 驱动的响应式 Web 控制台
账号池监控 : 实时查看所有 AWS Kiro 账号状态、令牌有效期、使用统计
在线测试 : 内置聊天测试界面,支持流式对话
请求日志 : 完整的 API 请求日志、统计图表、错误追踪
批量操作 : 批量添加、删除、刷新 Kiro 账号
系统设置 : 可视化配置 API Key、限流规则、日志保留策略
快速开始
方式一:下载预编译版本(推荐) 从 GitHub Releases 下载对应平台的压缩包:
wget https://github.com/kkddytd/claude-api/releases/latest/download/claude-server-linux-amd64.tar.gz
tar -xzf claude-server-linux-amd64.tar.gz ./claude-server
wget https://github.com/kkddytd/claude-api/releases/latest/download/claude-server-darwin-arm64.tar.gz
tar -xzf claude-server-darwin-arm64.tar.gz ./claude-server
方式二:从源码编译
git clone https://github.com/kkddytd/claude-api.git
cd claude-api
go mod download
go build -o claude-server main.go
./claude-server
访问控制台:http://localhost:62311
默认密码:admin(首次登录后请立即修改)
添加 AWS Kiro 账号:点击"账号管理" → '添加账号' → 完成 OIDC 授权
配置 API Key:点击"系统设置" → 设置自定义 API Key
开始使用:使用 OpenAI SDK 连接到 http://localhost:62311/v1
编译构建
构建脚本 项目提供了强大的 build.sh 脚本,支持多平台编译:
./build.sh
./build.sh server
./build.sh desktop
./build.sh all
./build.sh clean
./build.sh server -v v1.2.0
./build.sh server -p linux/amd64
./build.sh --no-cache
./build.sh --verbose
./build.sh -h
支持的平台
Linux: amd64, arm64
macOS: amd64, arm64
Windows: amd64, arm64
macOS: Universal (需要 Wails v2)
Windows: amd64 (需要 Wails v2)
构建产物 dist/
├── server/
│ ├── claude-server-linux-amd64.tar.gz
│ ├── claude-server-linux-arm64.tar.gz
│ ├── claude-server-darwin-amd64.tar.gz
│ ├── claude-server-darwin-arm64.tar.gz
│ ├── claude-server-windows-amd64.zip
│ └── claude-server-windows-arm64.zip
└── desktop/
├── Claude-API-Server-macOS.zip
└── Claude-API-Server-Windows.zip
手动编译
go build -o claude-server main.go
go build -ldflags="-X main.Version=v1.0.0" -o claude-server main.go
GOOS=linux GOARCH=amd64 go build -o claude-server-linux-amd64 main.go
GOOS=darwin GOARCH=arm64 go build -o claude-server-darwin-arm64 main.go
GOOS=windows GOARCH=amd64 go build -o claude-server-windows-amd64.exe main.go
部署指南
Linux Systemd 服务 创建服务文件 /etc/systemd/system/claude-api.service:
[Unit]
Description =Claude API Server
After =network.target
[Service]
Type =simple
User =www-data
WorkingDirectory =/opt/claude-api
ExecStart =/opt/claude-api/claude-server
Restart =on -failure
RestartSec =5 s
Environment ="PORT=62311"
[Install]
WantedBy =multi-user.target
sudo mkdir -p /opt/claude-api
sudo cp claude-server /opt/claude-api/
sudo chown -R www-data:www-data /opt/claude-api
sudo systemctl daemon-reload
sudo systemctl enable claude-api
sudo systemctl start claude-api
sudo systemctl status claude-api
sudo journalctl -u claude-api -f
Nginx 反向代理 server {
listen 80;
server_name api.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:62311;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_cache_bypass $http_upgrade;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
}
}
sudo nginx -t
sudo systemctl reload nginx
进程管理器(PM2) npm install -g pm2
cat > ecosystem.config.js <<'EOF'
module.exports = {
apps: [{
name: 'claude-api' ,
script: './claude-server' ,
cwd: '/opt/claude-api' ,
instances: 1,
autorestart: true ,
watch: false ,
max_memory_restart: '500M' ,
env : { PORT: 62311 }
}]
}
EOF
pm2 start ecosystem.config.js
pm2 status
pm2 logs claude-api
pm2 startup
pm2 save
环境变量配置 export PORT=62311
export DATA_DIR=/path/to/data
export NO_BROWSER=true
数据备份
cp data.sqlite3 data.sqlite3.backup.$(date +%Y%m%d_%H%M%S)
0 2 * * * cd /opt/claude-api && cp data.sqlite3 backups/data.sqlite3.$(date +\%Y\%m\%d)
0 3 * * * find /opt/claude-api/backups -name "data.sqlite3.*" -mtime +7 -delete
使用示例
Python (OpenAI SDK) from openai import OpenAI
client = OpenAI(
api_key="your-api-key" ,
base_url="http://localhost:62311/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4.5" ,
messages=[{"role" :"user" ,"content" :"你好" }]
)
print (response.choices[0 ].message.content)
stream = client.chat.completions.create(
model="claude-sonnet-4.5" ,
messages=[{"role" :"user" ,"content" :"写一首诗" }],
stream=True
)
for chunk in stream:
if chunk.choices[0 ].delta.content:
print (chunk.choices[0 ].delta.content, end="" )
Node.js (OpenAI SDK) import OpenAI from 'openai' ;
const client = new OpenAI ({
apiKey : 'your-api-key' ,
baseURL : 'http://localhost:62311/v1'
});
const response = await client.chat .completions .create ({
model : 'claude-sonnet-4.5' ,
messages : [{role :'user' , content :'你好' }]
});
console .log (response.choices [0 ].message .content );
const stream = await client.chat .completions .create ({
model : 'claude-sonnet-4.5' ,
messages : [{role :'user' , content :'写一首诗' }],
stream : true
});
for await (const chunk of stream) {
if (chunk.choices [0 ]?.delta ?.content ) {
process.stdout .write (chunk.choices [0 ].delta .content );
}
}
cURL
curl -X POST http://localhost:62311/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{ "model": "claude-sonnet-4.5", "messages": [ {"role": "user", "content": "你好"} ] }'
curl -X POST http://localhost:62311/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{ "model": "claude-sonnet-4.5", "messages": [ {"role": "user", "content": "你好"} ], "stream": true }'
配置说明
config.yaml database:
type: sqlite
sqlite:
path: data.sqlite3
mysql:
host: localhost
port: 3306
user: root
password: ""
database: claude-api
charset: utf8mb4
server:
host: 0.0 .0 .0
port: 62311
debug: false
test: false
系统设置(存储在数据库) 设置项 说明 默认值 apiKeyOpenAI API Key 空 adminPassword管理员密码 admindebugLog调试日志 falseenableRequestLog请求日志 truelogRetentionDays日志保留天数 30enableIPRateLimitIP 频率限制 falseipRateLimitWindow限制时间窗口(分钟) 1ipRateLimitMax窗口内最大请求数 100
API 文档
OpenAI 兼容端点 POST /v1/chat/completions
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
{
"model" : "claude-sonnet-4.5" ,
"messages" : [{"role" : "user" , "content" : "你好" }],
"stream" : true
}
claude-4.5-opus-high - Claude 4.5 Opus (高性能)
claude-4.5-opus-low - Claude 4.5 Opus (低成本)
claude-sonnet-4.5 - Claude Sonnet 4.5
claude-sonnet-3.5 - Claude Sonnet 3.5
管理端点 GET /v2/accounts
POST /v2/accounts
POST /v2/accounts/feed
POST /v2/accounts/import
GET /v2/accounts/export
DELETE /v2/accounts/:id
GET /v2/settings
PUT /v2/settings
GET /v2/logs
GET /v2/logs/stats
POST /v2/logs/cleanup
GET /v2/ips/blocked
POST /v2/ips/block
POST /v2/ips/unblock
技术架构
技术栈
后端 : Go 1.24+, Gin
数据库 : SQLite (glebarez/sqlite - 纯 Go,无需 CGO) / MySQL
前端 : Vue.js 3
Token 计数 : anthropic-tokenizer-go
项目结构 claude-api/
├── main.go
├── build.sh
├── config.yaml
├── internal/
│ ├── api/
│ ├── amazonq/
│ ├── auth/
│ ├── claude/
│ ├── stream/
│ ├── database/
│ ├── models/
│ ├── config/
│ ├── logger/
│ ├── tokenizer/
│ └── sync /
├── frontend/
│ ├── index.html
│ ├── js/
│ └── css/
└── dist/
数据流 客户端 → Gin Router → 认证中间件 → 账号选择器 → 格式转换器 → Amazon Q API
↓
客户端 ← OpenAI 格式 ← 流解析器 ← SSE 流 ← Amazon Q 响应
故障排查
常见问题 错误:failed to refresh token
解决:检查 refreshToken 是否有效,尝试重新授权
错误:context deadline exceeded
解决:检查网络连接,考虑配置 HTTP_PROXY
错误:database is locked
解决:确保没有其他进程使用数据库,或重启服务器
健康检查 curl http://localhost:62311/healthz
日志位置
控制台日志 : 直接输出到终端
请求日志 : 存储在数据库 request_logs 表
调试日志 : 启用调试模式后在控制台输出
安全建议
修改默认密码 : 首次启动后立即修改管理员密码
使用 HTTPS : 生产环境使用 Nginx 反向代理并配置 SSL
限制访问 : 使用防火墙限制管理控制台访问
定期备份 : 定期备份 data.sqlite3 数据库
监控日志 : 定期查看请求日志,发现异常及时处理