Spotify Portal AiKA 模式通过廉价模型委派将 Claude Code 的令牌使用量降低 90%
核心要点
Spotify 的 Portal AiKA 模式使 Claude Code 能够将大型文件读取和样板代码生成任务委派给廉价模型(Gemini 2.5 Flash),在保持相同工作流的前提下,将 Claude 的令牌使用量降低了约 90 %。
为何令牌成本对 AI 辅助编程至关重要
- 输入令牌(读取源文件)是 AI 编程代理成本的主要部分,因为其使用频率远高于输出令牌。
- Gartner 预测,到 2028 年,AI 编程的令牌支出将超过普通开发人员的平均薪资,许多团队目前每月每位开发人员的支出已达 200–500 美元,部分甚至超过 2,000 美元。
- 因此,在不牺牲功能的前提下降低令牌消耗,是一项关键的成本节约措施。
核心思想:使用 AiKA 模式进行模型路由
- AiKA 模式 是在临时运行时(类似于 AWS Lambda)运行的声明式代理,可通过 Portal CLI 或 API 调用。
- 一个模式包含:
- 一个系统提示(指令)
- 选定的模型(Portal 中配置的任意模型)
- 运行时参数,如温度值
- 可选的 MCP 工具
- 模式可以是 公开的(公司内共享)或 私有的(团队专用),无需管理基础设施或 API 密钥。
两种用于节省令牌的具体模式
1. bulk-reader
- 目的 – 摘要多个大型文件的内容,使 Claude 能够在不直接读取每个文件的情况下回答问题。
- 关键指令 – 仅输出结构化项目符号,不包含散文或 Markdown 代码块。
- 模型 – Gemini 2.5 Flash(可替换为任意模型)。
name: bulk-reader
description: 用于代码分析的批量文件读取器 —— 将 Claude Code 的 I/O 委派给它
instructions: |
你是一位精确的代码分析师。阅读提供的文件并简洁地回答问题。
仅输出结构化项目符号。不要问候,不要散文,不要前言。
每个项目符号以确切的名称、类型或行号开头。
使用嵌套项目符号表示细节。跳过调用者未询问的内容。
visibility: public
model: gemini-2.5-flash
resourceLimits:
temperature: 0.2
tags:
- coding
- delegation
2. code-writer
- 目的 – 生成符合现有项目模式的样板代码(测试、配置存根、类型存根)。
- 关键指令 – 仅输出代码;不要用 Markdown 代码块包裹。
- 模型 – Gemini 2.5 Flash(可替换)。
name: code-writer
description: 样板代码生成器 —— 将 Claude Code 的高输出任务委派给它
instructions: |
你根据规范和参考文件生成代码文件。严格匹配现有模式、约定、命名和风格。
仅输出代码 —— 不要解释,除非被要求,否则不要使用 Markdown 代码块。
如果规范不明确,做出合理的决策,以匹配参考代码的模式。
visibility: public
model: gemini-2.5-flash
resourceLimits:
temperature: 0.2
tags:
- coding
- delegation
如何强制执行路由:shunt 插件
- 工具前钩子 –
shunt在 Claude Code 中注册了两个PreToolUse钩子。check-file-size会阻止任何文件行数超过可配置阈值(默认 350)的Read调用。该钩子返回一条消息,指示 Claude 转向/bulk-reader技能。check-bash-read会阻止在大型文件上使用cat、head、tail、less、more,但允许定向管道(例如cat file | grep)。
- Shell 包装器 – 两个 Bash 脚本(
bulk-read和code-write)调用 Portal CLI,传递参数,处理错误,并报告令牌使用情况。bulk-read --question "..." --paths src/Service.java src/Handler.javacode-write --spec "为 UserService 编写测试" --reference tests/OrderTest.java --target tests/UserTest.java
- 技能文件 – Markdown 技能定义为 Claude 提供了在钩子阻止读取时调用的精确 CLI 语法。
- 技能描述为可选;钩子已阻止昂贵的读取操作。
实测的令牌节省
- 场景 – Java 单体仓库,四种典型编码任务(批量文件查询、测试生成、配置搭建、类型存根创建)。
- 结果 – 直接由 Claude 读取消耗的输入令牌比
bulk-reader摘要多出约 10 倍。批量读取的平均令牌减少量为 ≈ 90 %。 - code-writer – 节省量更难量化,因为 Claude 原本会同时消耗输入(参考文件)和输出令牌。通过
shunt,生成的代码从未进入 Claude 的上下文,从而完全消除了这些输出令牌。
局限性与权衡
- 无法委派编辑 – 摘要缺乏可靠的行号,因此 Claude 仍需读取原始文件以进行精确编辑。
- 无法委派推理 – 复杂的 bug 定位或架构决策仍由 Claude 完成;廉价模型可能遗漏细微问题(例如线程安全 bug)。
- 延迟 – 每次委派增加 10–30 秒的往返时间(Claude → Portal → 工作模型 → Claude)。Portal 将调用限制在 30 秒内,因此非常大的生成任务需要拆分,使委派不适合小型读取。
- 成本核算 – 仅衡量 Claude 的使用情况下的令牌节省;廉价模型仍会产生自己的令牌成本,尽管每次请求的成本要低得多。
AiKA 模式的可重用性与可扩展性
- 可重用 – 相同的
bulk-reader和code-writer模式可从任何能调用 Portal CLI 的项目或工具中调用。 - 可共享 – 模式在 AiKA 目录中为公开;任何 Spotify 工程师均可使用,无需创建新模式。
- 可组合 – 可通过几次点击从相同模板构建新模式(例如
doc-writer、reviewer、translator)。 - 解耦路由 –
shunt插件决定 何时 委派;模式决定 如何 响应。更换工作模型、调整提示或添加 MCP 工具只需修改模式,无需更改插件。
自己动手开始
- 安装插件
claude plugin marketplace add spotify/portal-ai-plugins claude plugin install portal@portal claude plugin install shunt@portal - 配置 Portal CLI – 在 Claude Code 会话中运行
/portal:setup,并使用你的 Portal 实例进行身份验证。 - 使用模式 – 向 Claude 提出涉及多个文件的问题;
shunt钩子会自动将大型读取重定向到bulk-reader,将样板代码生成重定向到code-writer。 - 按需自定义 – 在 Portal 中 fork 公开模式,调整模型或指令,你的 fork 将自动优先使用。
社区反响(精选 HN 评论)
“它降低了令牌使用量,因为他们为读取/代码生成任务使用了具有不同令牌预算的另一个服务。” – jnwatson
“仅根据大小进行路由,无法反映代码复杂性;输出令牌远比输入令牌昂贵。” – ricardobeat
“该方法本质上是将 grep 和样板代码生成委派给更廉价的模型——并无根本性创新,只是增加了一个配置层。” – tolugenius
“每次委派 10–30 秒的延迟,对小型任务可能是致命的。” – krzys
总结
Portal 的 AiKA 模式将昂贵的模型路由转变为简单的声明式配置。通过将批量 I/O 和可预测的代码生成委派给廉价模型,Spotify 工程师实现了 Claude Code 输入消耗的 ≈ 90 % 令牌节省,同时保持了相同的开发人员体验。权衡——额外延迟、无法委派编辑或深度推理——是可预测的,使该解决方案成为任何使用前沿编程代理的组织的实用成本控制模式。
Sources
相关
- 项目
- Dispatch
- 项目
- 项目
- Dispatch