dwgx@blog:~$dwgx
> cd ../posts

KiroStudio:用 Rust 写一个 Anthropic 协议网关

// created

KiroStudio 是个 Anthropic 协议网关,收标准 Anthropic Messages API 请求,转换后转发到 Kiro / AWS Q 上游,再把响应翻回 Anthropic 格式。任何 Anthropic 兼容客户端,Claude Code、SDK、自己写的应用,把 base_url 指过来就能用。它 fork 自 hank9999/kiro.rs(MIT),协议转换核心建在它上面并大幅扩展。

后端是 Rust + Axum(2024 edition),前端 React + Vite 管理面板在编译时用 rust-embed 嵌进二进制,存储走本地 SQLite,最后产出一个自包含的单文件可执行程序,没有外部静态资源依赖。装 binary 版一条 install-binary.sh 就够,Linux x86_64 加 systemd,不用 Docker、Rust 或 Node。

核心接口是 POST /v1/messages,支持流式和非流式、工具调用、thinking 块、图片输入。凭据这层做了多凭据调度和负载均衡(prioritybalanced)、自动故障转移、失败冷却、会话亲和、RPM 软限流。入口安全也全:API key 鉴权、CORS 白名单、IP 白名单(CIDR)、单 IP 限流、请求体大小限制、凭据日志脱敏,还有 SSRF 防护挡掉发往内网和回环地址的出站请求。

最实用的一点,网关会修 Claude Code 那个恼人的 Invalid tool parameters。非法转义、裸控制字符、截断整出来的坏 JSON,到客户端之前先给它修好。

src/ 按职责分:anthropic/ 管入站协议,kiro/ 管上游转换和凭据调度,admin/admin_ui/ 是管理面板,usage/ 追踪用量,common/ 放 CORS、IP、限流、SSRF。配置两个文件,config.json 管服务和安全,credentials.json 存上游凭据,建议 chmod 600apiKey 必填,空了直接拒绝启动。

自用定位,MIT。要部署自己看下上游 provider 的条款,这种凭据池用法允不允许,运营者负责。