AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

AWS Kiro 账号池管理系统 | 将 Amazon Q Developer API 转换为 OpenAI 兼容格式 | 支持多账号池、OIDC 自动认证、令牌自动刷新、Web 管理控制台 | Go

Claude API - AWS Kiro 账号池管理 | OpenAI 兼容代理服务

项目地址在wget 里面 web页面访问把后缀.git删掉即可

效果图

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

AWS Kiro 账号池管理系统 - 将 Amazon Q Developer (Kiro) API 转换为 OpenAI 兼容格式的企业级 Go 代理服务。支持多账号池管理、OIDC 自动认证、令牌自动刷新、流式响应、完整的 Web 管理控制台。

关键词: AWS Kiro, Amazon Q Developer, Claude API, OpenAI Proxy, 账号池管理, OIDC 认证, Go 代理服务, 多账号管理, API 转换, 企业级代理

📋 目录

✨ 核心特性

🏊 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
  • 模型映射: 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、限流规则、日志保留策略

🚀 快速开始

方式一:下载预编译版本(推荐)

Releases 下载对应平台的压缩包:

# Linux AMD64wget 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 # macOS (Apple Silicon)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 # Windows# 下载 claude-server-windows-amd64.zip 并解压# 双击运行 claude-server.exe

方式二:从源码编译

# 克隆仓库git clone https://github.com/kkddytd/claude-api.git cd claude-api # 安装 Go 依赖 go mod download # 编译 go build -o claude-server main.go # 运行 ./claude-server 

首次使用

  1. 访问控制台:http://localhost:62311
  2. 默认密码:admin(首次登录后请立即修改)
  3. 添加 AWS Kiro 账号:点击"账号管理" → “添加账号” → 完成 OIDC 授权
  4. 配置 API Key:点击"系统设置" → 设置自定义 API Key
  5. 开始使用:使用 OpenAI SDK 连接到 http://localhost:62311/v1

🔨 编译构建

构建脚本

项目提供了强大的 build.sh 脚本,支持多平台编译:

# 构建当前平台(server + desktop) ./build.sh # 仅构建后端服务 ./build.sh server # 仅构建桌面应用(macOS + Windows) ./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=5s # 环境变量(可选) Environment="PORT=62311" [Install] WantedBy=multi-user.target 

启动服务:

# 部署文件sudomkdir -p /opt/claude-api sudocp claude-server /opt/claude-api/ sudochown -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; # 重定向到 HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name api.example.com; # SSL 证书 ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; # SSL 配置 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; # WebSocket 支持 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; } } 

重载 Nginx:

sudo nginx -t sudo systemctl reload nginx 

进程管理器(PM2)

# 安装 PM2npminstall -g pm2 # 创建 ecosystem.config.jscat> 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 

环境变量配置

支持的环境变量:

# 服务端口exportPORT=62311# 数据目录(桌面应用)exportDATA_DIR=/path/to/data # 禁用浏览器自动打开exportNO_BROWSER=true 

数据备份

# 备份数据库cp data.sqlite3 data.sqlite3.backup.$(date +%Y%m%d_%H%M%S)# 定时备份(crontab)02 * * * cd /opt/claude-api &&cp data.sqlite3 backups/data.sqlite3.$(date +\%Y\%m\%d)# 保留最近 7 天的备份03 * * * 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 =newOpenAI({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});forawait(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 # 或 mysqlsqlite:path: data.sqlite3 mysql:host: localhost port:3306user: root password:""database: claude-api charset: utf8mb4 server:host: 0.0.0.0 port:62311debug:falsetest:false

系统设置(存储在数据库)

设置项说明默认值
apiKeyOpenAI API Key
adminPassword管理员密码admin
debugLog调试日志false
enableRequestLog请求日志true
logRetentionDays日志保留天数30
enableIPRateLimitIP 频率限制false
ipRateLimitWindow限制时间窗口(分钟)1
ipRateLimitMax窗口内最大请求数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 # 清理日志# IP 管理 GET /v2/ips/blocked # 被封禁的 IP POST /v2/ips/block # 封禁 IP POST /v2/ips/unblock # 解封 IP

🏗️ 项目结构

claude-api/ ├── main.go # 程序入口,HTTP 服务器启动 ├── build.sh # 多平台构建脚本 ├── config.yaml # 配置文件(可选) ├── internal/ # 内部包 │ ├── api/ # API 服务器 │ │ ├── server.go # 服务器核心、中间件、缓存 │ │ ├── routes.go # 路由配置 │ │ ├── handlers.go # 请求处理器(主要逻辑) │ │ └── cache.go # 账号池、设置缓存 │ ├── amazonq/ # Amazon Q 客户端 │ │ ├── client.go # HTTP 客户端 │ │ ├── parser.go # 响应解析 │ │ └── errors.go # 错误处理 │ ├── auth/ # 认证模块 │ │ ├── oidc.go # OIDC 设备授权流程 │ │ ├── kiro.go # Kiro 社交登录 │ │ └── apikey.go # API Key 验证 │ ├── claude/ # 格式转换 │ │ └── converter.go # OpenAI ↔ Amazon Q 格式转换 │ ├── stream/ # 流处理 │ │ ├── parser.go # SSE 流解析 │ │ ├── openai_sse.go # OpenAI 格式流 │ │ ├── claude_sse.go # Claude 格式流 │ │ └── unified_sse.go # 统一流处理 │ ├── database/ # 数据库 │ │ ├── database.go # 数据库初始化 │ │ ├── accounts.go # 账号管理 │ │ ├── users.go # 用户管理 │ │ ├── settings.go # 系统设置 │ │ ├── logs.go # 请求日志 │ │ ├── proxy.go # 代理管理 │ │ └── blocked_ips.go # IP 黑名单 │ ├── models/ # 数据模型 │ │ ├── account.go # 账号模型 │ │ ├── user.go # 用户模型 │ │ ├── settings.go # 设置模型 │ │ ├── openai.go # OpenAI 格式 │ │ ├── claude.go # Claude 格式 │ │ └── amazonq.go # Amazon Q 格式 │ ├── config/ # 配置管理 │ ├── logger/ # 日志系统 │ ├── tokenizer/ # Token 计数 │ ├── compressor/ # 上下文压缩器 │ ├── proxy/ # 代理池管理 │ ├── ratelimit/ # 双重限流器(IP + API Key) │ └── utils/ # 工具函数 ├── frontend/ # Web 前端 │ ├── index.html # 主页面 │ ├── login.html # 登录页面 │ ├── js/ # JavaScript 模块 │ │ ├── app.js # 主应用入口 │ │ ├── accounts.js # 账号管理 │ │ ├── users.js # 用户管理 │ │ ├── settings.js # 系统设置 │ │ ├── chat.js # 聊天界面 │ │ ├── logs.js # 请求日志 │ │ ├── ips.js # IP 管理 │ │ └── api.js # API 封装 │ ├── css/ # 样式文件 │ └── vendor/ # 第三方库(Vue.js、Marked 等) ├── scripts/ # 辅助脚本 │ ├── start.sh # 启动脚本 │ ├── stop.sh # 停止脚本 │ └── setup.sh # 环境配置 └── dist/ # 编译产物(自动生成) └── server/ # 各平台服务端程序 

🏗️ 技术架构

技术栈

  • 后端: 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/ # API 服务器 │ │ ├── server.go # 服务器核心 │ │ ├── routes.go # 路由配置 │ │ └── handlers.go # 请求处理器 │ ├── amazonq/ # Amazon Q 客户端 │ ├── auth/ # 认证模块 │ ├── claude/ # 格式转换 │ ├── stream/ # 流处理 │ ├── database/ # 数据库 │ ├── models/ # 数据模型 │ ├── config/ # 配置管理 │ ├── logger/ # 日志系统 │ ├── tokenizer/ # Token 计数 │ └── sync/ # 同步客户端 ├── frontend/ # Web 前端 │ ├── index.html │ ├── js/ │ └── css/ │ ├── server.py │ └── requirements.txt └── dist/ # 编译产物 

数据流

客户端 → Gin Router → 认证中间件 → 账号选择器 → 格式转换器 → Amazon Q API ↓ 客户端 ← OpenAI 格式 ← 流解析器 ← SSE 流 ← Amazon Q 响应 

🐛 故障排查

常见问题

1. 令牌刷新失败

错误: failed to refresh token 解决: 检查 refreshToken 是否有效,尝试重新授权 

2. 连接超时

错误: context deadline exceeded 解决: 检查网络连接,考虑配置 HTTP_PROXY 

3. 数据库锁定

错误: database is locked 解决: 确保没有其他进程使用数据库,或重启服务器 

健康检查

curl http://localhost:62311/healthz # 预期响应: {"status":"ok"}

日志位置

  • 控制台日志: 直接输出到终端
  • 请求日志: 存储在数据库 request_logs
  • 调试日志: 启用调试模式后在控制台输出

🔒 安全建议

  1. 修改默认密码: 首次启动后立即修改管理员密码
  2. 使用 HTTPS: 生产环境使用 Nginx 反向代理并配置 SSL
  3. 限制访问: 使用防火墙限制管理控制台访问
  4. 定期备份: 定期备份 data.sqlite3 数据库
  5. 监控日志: 定期查看请求日志,发现异常及时处理

⚠️ 免责声明: 本项目仅供学习和研究使用,请遵守 AWS 服务条款和相关法律法规 本作者只是搬运 有任何问题和本人无关。

Read more

零基础快速入门前端DOM 操作核心知识与实战解析(完整汇总版)(可用于备赛蓝桥杯Web应用开发)

零基础快速入门前端DOM 操作核心知识与实战解析(完整汇总版)(可用于备赛蓝桥杯Web应用开发)

DOM(Document Object Model,文档对象模型)是 JavaScript 操作 HTML 文档的桥梁,它将网页转换为一棵 “树”,每个 HTML 标签、属性、文本都是树上的节点。掌握 DOM 操作,就能动态改变网页内容、样式和交互。本文结合实战代码,从基础到进阶系统梳理 DOM 核心知识。 一、DOM 元素获取:找到要操作的 “节点” 操作 DOM 的第一步是 “找到元素”,常用方法如下: 方法 描述 示例 querySelector() 通过 CSS 选择器获取单个元素 document.querySelector(".div1") getElementById() 通过

在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

在 Cursor 中打造你的专属前端“AI 助手”:Agent Skills 实战指南 什么是 Agent Skills?

文章目录 * 一、什么是 Agent Skills? * 二、使用步骤 * 1.下载官方提供的agent-skills文档 * 2.cursor中使用 * 三、如何设计自己的skills * 四、实战:打造一个“生成标准 React 组件”的 Skill * 第一步:创建目录 * 第二步:编写 SKILL.md * 总结:为什么你应该开始用 Skills? 一、什么是 Agent Skills? 简单来说,Agent Skills 是一种标准化的方式,用来封装特定任务的知识和工作流。 如果说 MCP (Model Context Protocol) 是给 AI 装上了“手”(让它能连接数据库、Github)

Spring Web MVC从入门到实战

Spring Web MVC从入门到实战

—JavaEE专栏— 1. Spring Web MVC核心概念 1.1 什么是Spring Web MVC Spring Web MVC是基于Servlet API构建的原始Web框架,从一开始就包含在Spring框架中,其正式名称来源于源模块名称(spring-webmvc),通常简称为Spring MVC。 官方定义:Spring Web MVC is the original web framework built on the Servlet API and has been included in the Spring Framework from the very beginning. Servlet是Java Web开发的规范,定义了动态页面开发的技术标准,而Tomcat、Weblogic等Servlet容器则是该规范的具体实现,

Spring 核心技术解析【纯干货版】- XV:Spring 网络模块 Spring-Web 模块精讲

Spring 核心技术解析【纯干货版】- XV:Spring 网络模块 Spring-Web 模块精讲

Spring Framework 作为 Java 生态中最流行的企业级开发框架,提供了丰富的模块化支持。其中,Spring Web 模块是支撑 Web 开发的基础组件,无论是传统的 MVC 应用,还是 REST API 及微服务架构,都离不开它的核心能力。 本篇文章将深入解析 Spring Web 模块的核心概念、依赖关系、作用及关键组件,并通过实际案例展示如何使用 Spring Web 进行 RESTful API 调用。本文力求内容精炼、干货满满,帮助你掌握 Spring Web 的核心技术点。 文章目录 * 1、Spring-Web 模块介绍 * 1.1、Spring-Web 模块概述 * 1.2、Spring-Web