- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 LINUX DO 社区: 是
- 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
- 以上选择我承诺是永久有效的,接受社区和佬友监督: 是
以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出
正文:
▎ 项目地址:GitHub - M-JYuan/kiro.rs: A Kiro Client in Rust · GitHub
▎ 镜像:myuan6/kiro-rs:latest
▎ 原项目:hank9999/kiro.rs (GitHub - hank9999/kiro.rs: A Kiro Client in Rust · GitHub)(本贴所有功能、架构、代码地基全部归原作者)
先说清楚
这是 @hank9999 (hank9999 · GitHub) 大佬 kiro.rs (GitHub - hank9999/kiro.rs: A Kiro Client in Rust · GitHub)
的二开,代码地基完全是原作者的,我只是在自用过程中加了一个比较核心的东西 —— prompt cache 支持。
为什么要加 cache
用过 Anthropic 原生 API 的应该都知道 cache_control + cache_read_input_tokens 这套机制 —— 对于长 system prompt、固定工具集、多轮对话场景,缓存命中能把 input token 算到
1/10 的价格。
但 Kiro 上游本身没有这套计费语义,所以无论你的客户端怎么打 cache_control 标记,响应里 cache_read_input_tokens 永远是 0。客户端(尤其是 Claude Code / Cline
这类)看到「永远不命中」会:
- UI 上显示成本一直在涨,体感很差
- 部分客户端会因此走「无 cache」的请求构造策略,反而让请求更冗余
这个 fork 加了什么
在代理层加了一个本地 cache 状态追踪器(anthropic/cache_tracker.rs),核心思路:
-
按凭据做前缀指纹
对请求里 tools / system / messages 每个 block 算 SHA-256 累积前缀指纹,等于把「请求前缀」变成一个稳定可比的哈希链。 -
严格对齐 Anthropic 真实 TTL 语义
- 命中不续期(Anthropic 真实 TTL 是从首次写入算的,sliding TTL 会让本地数字虚高,跟你实际省下来的钱对不上)
- 支持 5min / 1h 两档 TTL,跟 cache_control.ttl 字段保持一致
- 最小可缓存 token 数也按模型分(Opus 4096 / Haiku-3 2048 / 其他 1024),对齐 Anthropic 官方门槛
- 处理真实场景的坑
- billing header 漂移:Claude Code 会在 system 里塞带版本号的 x-anthropic-billing-header,每次都不一样。如果直接哈希,你的 cache 永远
miss。这里做了规范化,把这一行替换成固定占位符再算指纹 - 多轮对话前缀延伸:第 N 轮请求会命中第 N-1 轮的 prefix,逐轮往上累积
- tool 变更失效下游:工具定义改了,后面整个 prefix chain 全部失效,行为跟 Anthropic 原生一致
- lookback 限制 10:不会把整个对话历史都翻一遍,避免长会话下性能爆炸
- 可开关 + 可配 TTL
{
“promptCacheTtlSeconds”: 300,
“promptCacheAccountingEnabled”: true
}
不想用可以一键关掉,关掉后行为退回到上游原版。
效果
客户端那边:
- cache_read_input_tokens / cache_creation_input_tokens 字段开始有真实数字
- Claude Code 这类客户端的成本统计 UI 终于不再「线性暴涨」
- 多轮对话场景明显感知到「重复内容不再被反复计费」
需要强调一下:Kiro 上游计费逻辑不会变,这只是给客户端一个符合 Anthropic 语义的「账面视图」,让 UI / 客户端策略能正常工作。
顺带修的几个小问题
既然 fork 出来了,顺手把自用踩到的几个小坑也一起处理了,不展开:
- retry 不再撞回刚失败的同一个凭据
- 新凭据加入时不会被 LB 瞬间打爆
- balance 缓存加周期刷新(原版实测 24h 没刷过)
- credentialRpm: 0 真的禁用本地限流(原版的 0 反而落回默认值)
用法
docker pull myuan6/kiro-rs:latest
配置 100% 兼容上游,cache 默认开启,不想用就 promptCacheAccountingEnabled: false。
致谢
- @hank9999 (hank9999 · GitHub) —— 项目地基,所有真正的工作都是他做的
- kiro2api (GitHub - caidaoli/kiro2api · GitHub) / proxycast (GitHub - limecloud/lime: AI content workspace for Chinese creators: desktop writing, research, prompt library, knowledge base, and multi-model workflows. · GitHub) —— 原项目参考的两个前辈项目
觉得好用请优先去给原项目点 star,我这边只是个人小改。有 bug 欢迎在 fork 仓库提 issue。
3 个帖子 - 3 位参与者