kiroapi / README.md
1041006580
chore: 重命名Dockerfile.hf为Dockerfile
24e48d1
metadata
title: Kiro API
emoji: 🤖
colorFrom: blue
colorTo: purple
sdk: docker
pinned: false

kiro-rs

一个用 Rust 编写的 Anthropic Claude API 兼容代理服务,将 Anthropic API 请求转换为 Kiro API 请求。

免责声明

本项目仅供研究使用, Use at your own risk, 使用本项目所导致的任何后果由使用人承担, 与本项目无关。 本项目与 AWS/KIRO/Anthropic/Claude 等官方无关, 本项目不代表官方立场。

注意!

因 tls 库从 native-tls 切换至 rustls, 你可能需要专门安装证书后才能配置 HTTP PROXY

功能特性

  • Anthropic API 兼容: 完整支持 Anthropic Claude API 格式
  • 流式响应: 支持 SSE (Server-Sent Events) 流式输出
  • Token 自动刷新: 自动管理和刷新 OAuth Token
  • 多凭据支持: 支持配置多个凭据,按优先级自动故障转移
  • 智能重试: 单凭据最多重试 3 次,单请求最多重试 9 次
  • 凭据回写: 多凭据格式下自动回写刷新后的 Token
  • Thinking 模式: 支持 Claude 的 extended thinking 功能
  • 工具调用: 完整支持 function calling / tool use
  • 多模型支持: 支持 Sonnet、Opus、Haiku 系列模型

支持的 API 端点

端点 方法 描述
/v1/models GET 获取可用模型列表
/v1/messages POST 创建消息(对话)
/v1/messages/count_tokens POST 估算 Token 数量

快速开始

前置步骤:编译前需要先构建前端 Admin UI:

cd admin-ui && npm install && npm run build

1. 编译项目

cargo build --release

2. 配置文件

创建 config.json 配置文件:

{
   "host": "127.0.0.1",   // 必配, 监听地址
   "port": 8990,  // 必配, 监听端口
   "apiKey": "sk-kiro-rs-qazWSXedcRFV123456",  // 必配, 请求的鉴权 token
   "region": "us-east-1",  // 必配, 区域, 一般保持默认即可
   "kiroVersion": "0.8.0",  // 可选, 用于自定义请求特征, 不需要请删除: kiro ide 版本
   "machineId": "如果你需要自定义机器码请将64位机器码填到这里", // 可选, 用于自定义请求特征, 不需要请删除: 机器码
   "systemVersion": "darwin#24.6.0",  // 可选, 用于自定义请求特征, 不需要请删除: 系统版本
   "nodeVersion": "22.21.1",  // 可选, 用于自定义请求特征, 不需要请删除: node 版本
   "countTokensApiUrl": "https://api.example.com/v1/messages/count_tokens", // 可选, 用于自定义token统计API, 不需要请删除
   "countTokensApiKey": "sk-your-count-tokens-api-key",  // 可选, 用于自定义token统计API, 不需要请删除
   "countTokensAuthType": "x-api-key",  // 可选, 用于自定义token统计API, 不需要请删除
   "proxyUrl": "http://127.0.0.1:7890", // 可选, HTTP/SOCK5代理, 不需要请删除
   "proxyUsername": "user",  // 可选, HTTP/SOCK5代理用户名, 不需要请删除
   "proxyPassword": "pass",  // 可选, HTTP/SOCK5代理密码, 不需要请删除
   "adminApiKey": "sk-admin-your-secret-key"  // 可选, Admin API 密钥, 用于启用凭据管理 API, 不需要请删除
}

最小启动配置为:

{
   "host": "127.0.0.1",
   "port": 8990,
   "apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
   "region": "us-east-1"
}

3. 凭证文件

创建 credentials.json 凭证文件(从 Kiro IDE 获取)。支持两种格式:

单凭据格式(旧格式,向后兼容)

{
   "accessToken": "这里是请求token 一般有效期一小时",  // 可选, 不需要请删除, 可以自动刷新
   "refreshToken": "这里是刷新token 一般有效期7-30天不等",  // 必配, 根据实际填写
   "profileArn": "这是profileArn, 如果没有请你删除该字段, 配置应该像这个 arn:aws:codewhisperer:us-east-1:111112222233:profile/QWER1QAZSDFGH",  // 可选, 不需要请删除
   "expiresAt": "这里是请求token过期时间, 一般格式是这样2025-12-31T02:32:45.144Z, 在过期前 kirors 不会请求刷新请求token",  // 必配, 不确定你需要写一个已经过期的UTC时间
   "authMethod": "这里是认证方式 social/Social 或者是 idc/IdC",  // 必配, 根据你 Token 登录来源决定
   "clientId": "如果你是 IdC 登录 需要配置这个",  // 可选, 不需要请删除
   "clientSecret": "如果你是 IdC 登录 需要配置这个"  // 可选, 不需要请删除
}

多凭据格式(新格式,支持故障转移和自动回写)

[
   {
      "refreshToken": "第一个凭据的刷新token",
      "expiresAt": "2025-12-31T02:32:45.144Z",
      "authMethod": "social",
      "priority": 0
   },
   {
      "refreshToken": "第二个凭据的刷新token",
      "expiresAt": "2025-12-31T02:32:45.144Z",
      "authMethod": "idc",
      "clientId": "xxxxxxxxx",
      "clientSecret": "xxxxxxxxx",
      "region": "us-east-2",
      "priority": 1
   }
]

多凭据特性说明

  • priority 字段排序,数字越小优先级越高(默认为 0)
  • 单凭据最多重试 3 次,单请求最多重试 9 次
  • 自动故障转移到下一个可用凭据
  • 多凭据格式下 Token 刷新后自动回写到源文件
  • 可选的 region 字段:用于 OIDC token 刷新时指定 endpoint 区域,未配置时回退到 config.json 的 region

最小启动配置(social):

{
   "refreshToken": "XXXXXXXXXXXXXXXX",
   "expiresAt": "2025-12-31T02:32:45.144Z",
   "authMethod": "social"
}

最小启动配置(idc):

{
   "refreshToken": "XXXXXXXXXXXXXXXX",
   "expiresAt": "2025-12-31T02:32:45.144Z",
   "authMethod": "idc",
   "clientId": "xxxxxxxxx",
   "clientSecret": "xxxxxxxxx"
}

4. 启动服务

./target/release/kiro-rs

或指定配置文件路径:

./target/release/kiro-rs -c /path/to/config.json --credentials /path/to/credentials.json

5. 使用 API

curl http://127.0.0.1:8990/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-your-custom-api-key" \
  -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [
      {"role": "user", "content": "Hello, Claude!"}
    ]
  }'

配置说明

config.json

字段 类型 默认值 描述
host string 127.0.0.1 服务监听地址
port number 8080 服务监听端口
apiKey string - 自定义 API Key(用于客户端认证)
region string us-east-1 AWS 区域
kiroVersion string 0.8.0 Kiro 版本号
machineId string - 自定义机器码(64位十六进制)不定义则自动生成
systemVersion string 随机 系统版本标识
nodeVersion string 22.21.1 Node.js 版本标识
countTokensApiUrl string - 外部 count_tokens API 地址(可选)
countTokensApiKey string - 外部 count_tokens API 密钥(可选)
countTokensAuthType string x-api-key 外部 API 认证类型:x-api-keybearer
proxyUrl string - HTTP/SOCKS5 代理地址(可选)
proxyUsername string - 代理用户名(可选)
proxyPassword string - 代理密码(可选)
adminApiKey string - Admin API 密钥,配置后启用凭据管理 API(可选)

credentials.json

支持单对象格式(向后兼容)或数组格式(多凭据)。

字段 类型 描述
accessToken string OAuth 访问令牌(可选,可自动刷新)
refreshToken string OAuth 刷新令牌
profileArn string AWS Profile ARN(可选,登录时返回)
expiresAt string Token 过期时间 (RFC3339)
authMethod string 认证方式(social 或 idc)
clientId string IdC 登录的客户端 ID(可选)
clientSecret string IdC 登录的客户端密钥(可选)
priority number 凭据优先级,数字越小越优先,默认为 0(多凭据格式时有效)
region string 凭据级 region(可选),用于 OIDC token 刷新时指定 endpoint 的区域。未配置时回退到 config.json 的 region。注意:API 调用始终使用 config.json 的 region
machineId string 凭据级机器码(可选,64位十六进制)。未配置时回退到 config.json 的 machineId;都未配置时由 refreshToken 派生

模型映射

Anthropic 模型 Kiro 模型
*sonnet* claude-sonnet-4.5
*opus* claude-opus-4.5
*haiku* claude-haiku-4.5

项目结构

kiro-rs/
├── src/
│   ├── main.rs                 # 程序入口
│   ├── model/                  # 配置和参数模型
│   │   ├── config.rs           # 应用配置
│   │   └── arg.rs              # 命令行参数
│   ├── anthropic/              # Anthropic API 兼容层
│   │   ├── router.rs           # 路由配置
│   │   ├── handlers.rs         # 请求处理器
│   │   ├── middleware.rs       # 认证中间件
│   │   ├── types.rs            # 类型定义
│   │   ├── converter.rs        # 协议转换器
│   │   ├── stream.rs           # 流式响应处理
│   │   └── token.rs            # Token 估算
│   └── kiro/                   # Kiro API 客户端
│       ├── provider.rs         # API 提供者
│       ├── token_manager.rs    # Token 管理
│       ├── machine_id.rs       # 设备指纹生成
│       ├── model/              # 数据模型
│       │   ├── credentials.rs  # OAuth 凭证
│       │   ├── events/         # 响应事件类型
│       │   ├── requests/       # 请求类型
│       │   └── common/         # 共享类型
│       └── parser/             # AWS Event Stream 解析器
│           ├── decoder.rs      # 流式解码器
│           ├── frame.rs        # 帧解析
│           ├── header.rs       # 头部解析
│           └── crc.rs          # CRC 校验
├── Cargo.toml                  # 项目配置
├── config.example.json         # 配置示例
├── credentials.example.social.json   # Social 凭证示例
├── credentials.example.idc.json      # IdC 凭证示例
└── credentials.example.multiple.json # 多凭据示例

技术栈

高级功能

Thinking 模式

支持 Claude 的 extended thinking 功能:

{
  "model": "claude-sonnet-4-20250514",
  "max_tokens": 16000,
  "thinking": {
    "type": "enabled",
    "budget_tokens": 10000
  },
  "messages": [...]
}

工具调用

完整支持 Anthropic 的 tool use 功能:

{
  "model": "claude-sonnet-4-20250514",
  "max_tokens": 1024,
  "tools": [
    {
      "name": "get_weather",
      "description": "获取指定城市的天气",
      "input_schema": {
        "type": "object",
        "properties": {
          "city": {"type": "string"}
        },
        "required": ["city"]
      }
    }
  ],
  "messages": [...]
}

流式响应

设置 stream: true 启用 SSE 流式响应:

{
  "model": "claude-sonnet-4-20250514",
  "max_tokens": 1024,
  "stream": true,
  "messages": [...]
}

认证方式

支持两种 API Key 认证方式:

  1. x-api-key Header

    x-api-key: sk-your-api-key
    
  2. Authorization Bearer

    Authorization: Bearer sk-your-api-key
    

HuggingFace Spaces 部署

本项目支持部署到 HuggingFace Spaces。通过环境变量配置:

凭据配置模式

支持两种凭据配置模式:

模式1:单凭据模式(简单)

必需的环境变量

变量名 说明 示例
REFRESH_TOKEN Kiro 刷新令牌 your-refresh-token
API_KEY API 访问密钥 sk-kiro-rs-your-key

可选的环境变量

变量名 说明 默认值
REGION AWS 区域 us-east-1
EXPIRES_AT Token 过期时间 2020-01-01T00:00:00.000Z
AUTH_METHOD 认证方式 (social/idc) social
CLIENT_ID IdC 客户端 ID(仅 idc 模式) -
CLIENT_SECRET IdC 客户端密钥(仅 idc 模式) -
ADMIN_API_KEY Admin API 密钥(启用管理界面) -

模式2:多凭据模式(高级)

使用 CREDENTIALS_JSON 环境变量传入完整的凭据数组(JSON格式):

必需的环境变量

变量名 说明 示例
CREDENTIALS_JSON 凭据JSON数组 见下方示例
API_KEY API 访问密钥 sk-kiro-rs-your-key

CREDENTIALS_JSON 示例

[
  {
    "refreshToken": "第一个凭据的刷新token",
    "expiresAt": "2025-12-31T02:32:45.144Z",
    "authMethod": "social",
    "priority": 0
  },
  {
    "refreshToken": "第二个凭据的刷新token",
    "expiresAt": "2025-12-31T02:32:45.144Z",
    "authMethod": "idc",
    "clientId": "xxxxxxxxx",
    "clientSecret": "xxxxxxxxx",
    "priority": 1
  }
]

注意:在HuggingFace Space设置环境变量时,需要将JSON压缩成一行,去掉换行符。

其他可选环境变量

变量名 说明 默认值
REGION AWS 区域 us-east-1
ADMIN_API_KEY Admin API 密钥(启用管理界面) -

启用 Admin 管理界面

在 HuggingFace Space 的 Settings → Variables 中添加:

  • ADMIN_API_KEY: 设置一个安全的密钥(如 sk-admin-your-secret-key

启用后可访问:

  • Admin UI: https://your-space.hf.space/admin
  • Admin API: https://your-space.hf.space/api/admin/*

通过 Admin 界面可以:

  • 查看所有凭据状态
  • 动态添加/删除凭据
  • 调整凭据优先级
  • 启用/禁用凭据
  • 查看余额信息

环境变量

可通过环境变量配置日志级别:

RUST_LOG=debug ./target/release/kiro-rs

注意事项

  1. 凭证安全: 请妥善保管 credentials.json 文件,不要提交到版本控制
  2. Token 刷新: 服务会自动刷新过期的 Token,无需手动干预
  3. 不支持的工具: web_searchwebsearch 工具会被自动过滤

License

MIT

致谢

本项目的实现离不开前辈的努力:

本项目部分逻辑参考了以上的项目, 再次由衷的感谢!