跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Go / GolangSaaSAI

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/9/989 浏览
AWS Kiro 账号池管理系统:Amazon Q Developer 转 OpenAI 兼容代理

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
  • 模型映射: 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 下载对应平台的压缩包:

    # Linux AMD64
    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
    
    # 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
    

    启动服务:

    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;
        }
    }
    

    重载 Nginx:

    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)
    
    # 定时备份(crontab)
    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 # 或 mysql
      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管理员密码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     # 清理日志
    
    GET /v2/ips/blocked       # 被封禁的 IP
    POST /v2/ips/block        # 封禁 IP
    POST /v2/ips/unblock      # 解封 IP
    

    技术架构

    技术栈

    • 后端: 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 服务器
    │   ├── amazonq/          # Amazon Q 客户端
    │   ├── auth/             # 认证模块
    │   ├── claude/           # 格式转换
    │   ├── stream/           # 流处理
    │   ├── database/         # 数据库
    │   ├── models/           # 数据模型
    │   ├── config/           # 配置管理
    │   ├── logger/           # 日志系统
    │   ├── tokenizer/        # Token 计数
    │   └── sync/             # 同步客户端
    ├── frontend/             # Web 前端
    │   ├── index.html
    │   ├── js/
    │   └── css/
    └── 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. 监控日志: 定期查看请求日志,发现异常及时处理

    目录

    1. AWS Kiro 账号池管理系统
    2. 核心特性
    3. AWS Kiro 账号池管理
    4. API 格式转换
    5. 企业级安全
    6. Web 管理控制台
    7. 快速开始
    8. 方式一:下载预编译版本(推荐)
    9. Linux AMD64
    10. macOS (Apple Silicon)
    11. Windows
    12. 下载 claude-server-windows-amd64.zip 并解压
    13. 双击运行 claude-server.exe
    14. 方式二:从源码编译
    15. 克隆仓库
    16. 安装 Go 依赖
    17. 编译
    18. 运行
    19. 编译构建
    20. 构建脚本
    21. 构建当前平台(server + desktop)
    22. 仅构建后端服务
    23. 仅构建桌面应用(macOS + Windows)
    24. 构建所有平台
    25. 清理构建产物
    26. 指定版本构建
    27. 指定平台构建
    28. 构建选项
    29. 支持的平台
    30. 构建产物
    31. 手动编译
    32. 当前平台
    33. 带版本号
    34. 跨平台编译
    35. 部署指南
    36. Linux Systemd 服务
    37. Nginx 反向代理
    38. 进程管理器(PM2)
    39. 环境变量配置
    40. 数据备份
    41. 备份数据库
    42. 定时备份(crontab)
    43. 使用示例
    44. Python (OpenAI SDK)
    45. 普通对话
    46. 流式对话
    47. Node.js (OpenAI SDK)
    48. cURL
    49. 普通请求
    50. 流式请求
    51. 配置说明
    52. config.yaml
    53. 系统设置(存储在数据库)
    54. API 文档
    55. OpenAI 兼容端点
    56. 管理端点
    57. 技术架构
    58. 技术栈
    59. 项目结构
    60. 数据流
    61. 故障排查
    62. 常见问题
    63. 健康检查
    64. 预期响应:{"status":"ok"}
    65. 日志位置
    66. 安全建议

    更多推荐文章

    查看全部
    • 基于 AI 的论文降重与 AIGC 检测技术分析
    • OXC 工具发布:前端格式化与 Lint 性能大幅提升
    • 前端 JS 资源加载失败怎么办?重试与多源容灾方案实战
    • Qt Creator 在 CentOS 7 下无法显示项目文件树(Headers/Sources 等缺失)
    • 月薪 30K 以上程序员的必备特征与核心能力
    • 规则引擎详解:概念、作用、场景、痛点与主流开源方案对比
    • DeepSeek 隐藏玩法与高阶提示词使用指南
    • Mac 下 Neo4j 图数据库安装与基础操作指南
    • Python 基础练习题精选与解析
    • 使用本地电脑搭建个人网站并绑定域名的实践指南
    • Flutter 组件 tavily_dart 在鸿蒙平台的适配与 AI 搜索集成实战
    • 美团大模型应用算法工程师岗位职责与技术栈详解
    • 自然语言处理在医疗领域的应用与实战
    • 主流大模型英文降重能力横向评测:千问 DeepSeek 等工具实测
    • vscode copilot在win10 WSL2环境无法使用的问题
    • GitHub Copilot SDK 与云原生多智能体系统构建
    • Linux 进程信号的产生机制详解
    • HarmonyOS 应用集成静默登录与端云一体功能实践
    • 从后端视角理解前端三基石:HTML、CSS 与 JavaScript
    • AIOps 实践:基于 Dify+LangBot 实现飞书智能体对话机器人

    相关免费在线工具

    • RSA密钥对生成器

      生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

    • Mermaid 预览与可视化编辑

      基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

    • 随机西班牙地址生成器

      随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online