kiroapi / README.md
1041006580
chore: 重命名Dockerfile.hf为Dockerfile
24e48d1
---
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:
> ```bash
> cd admin-ui && npm install && npm run build
> ```
### 1. 编译项目
```bash
cargo build --release
```
### 2. 配置文件
创建 `config.json` 配置文件:
```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, 不需要请删除
}
```
最小启动配置为:
```json
{
"host": "127.0.0.1",
"port": 8990,
"apiKey": "sk-kiro-rs-qazWSXedcRFV123456",
"region": "us-east-1"
}
```
### 3. 凭证文件
创建 `credentials.json` 凭证文件(从 Kiro IDE 获取)。支持两种格式:
#### 单凭据格式(旧格式,向后兼容)
```json
{
"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 登录 需要配置这个" // 可选, 不需要请删除
}
```
#### 多凭据格式(新格式,支持故障转移和自动回写)
```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",
"region": "us-east-2",
"priority": 1
}
]
```
> **多凭据特性说明**
> - 按 `priority` 字段排序,数字越小优先级越高(默认为 0)
> - 单凭据最多重试 3 次,单请求最多重试 9 次
> - 自动故障转移到下一个可用凭据
> - 多凭据格式下 Token 刷新后自动回写到源文件
> - 可选的 `region` 字段:用于 OIDC token 刷新时指定 endpoint 区域,未配置时回退到 config.json 的 region
最小启动配置(social):
```json
{
"refreshToken": "XXXXXXXXXXXXXXXX",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "social"
}
```
最小启动配置(idc):
```json
{
"refreshToken": "XXXXXXXXXXXXXXXX",
"expiresAt": "2025-12-31T02:32:45.144Z",
"authMethod": "idc",
"clientId": "xxxxxxxxx",
"clientSecret": "xxxxxxxxx"
}
```
### 4. 启动服务
```bash
./target/release/kiro-rs
```
或指定配置文件路径:
```bash
./target/release/kiro-rs -c /path/to/config.json --credentials /path/to/credentials.json
```
### 5. 使用 API
```bash
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-key``bearer` |
| `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 # 多凭据示例
```
## 技术栈
- **Web 框架**: [Axum](https://github.com/tokio-rs/axum) 0.8
- **异步运行时**: [Tokio](https://tokio.rs/)
- **HTTP 客户端**: [Reqwest](https://github.com/seanmonstar/reqwest)
- **序列化**: [Serde](https://serde.rs/)
- **日志**: [tracing](https://github.com/tokio-rs/tracing)
- **命令行**: [Clap](https://github.com/clap-rs/clap)
## 高级功能
### Thinking 模式
支持 Claude 的 extended thinking 功能:
```json
{
"model": "claude-sonnet-4-20250514",
"max_tokens": 16000,
"thinking": {
"type": "enabled",
"budget_tokens": 10000
},
"messages": [...]
}
```
### 工具调用
完整支持 Anthropic 的 tool use 功能:
```json
{
"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 流式响应:
```json
{
"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 示例**:
```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 界面可以:
- 查看所有凭据状态
- 动态添加/删除凭据
- 调整凭据优先级
- 启用/禁用凭据
- 查看余额信息
## 环境变量
可通过环境变量配置日志级别:
```bash
RUST_LOG=debug ./target/release/kiro-rs
```
## 注意事项
1. **凭证安全**: 请妥善保管 `credentials.json` 文件,不要提交到版本控制
2. **Token 刷新**: 服务会自动刷新过期的 Token,无需手动干预
3. **不支持的工具**: `web_search` 和 `websearch` 工具会被自动过滤
## License
MIT
## 致谢
本项目的实现离不开前辈的努力:
- [kiro2api](https://github.com/caidaoli/kiro2api)
- [proxycast](https://github.com/aiclientproxy/proxycast)
本项目部分逻辑参考了以上的项目, 再次由衷的感谢!