Open Agents提示词缓存:如何降低50%以上的AI API成本
【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents
Open Agents 是一个用于构建云端编程 Agent 的开源模板,它的核心功能是通过提示词缓存(Prompt Caching)+ 工具结果压缩,把多轮 Agent 对话中重复发送的大段上下文变成"缓存读取",从而在长任务场景下降低 50% 以上的 AI API 成本。对于正在用 AI SDK 构建编程助手的开发者来说,这套开箱即用的上下文管理方案非常值得学习。
为什么 Agent 的 API 账单会爆炸?
先理解成本从哪来 🤔
一个编程 Agent 的工作方式是"循环":读文件 → 搜索代码 → 改代码 → 再读 → 再改……每一步,模型都要把完整的历史对话重新发一遍。会话越长,每次请求的输入 token 就越多,账单自然水涨船高。
💡 关键洞察:这些重复发送的内容里,系统提示、工具定义、历史消息每一步几乎完全一样——它们天生适合缓存。
提示词缓存是怎么省钱的?
以 Anthropic 模型为例:首次把一段内容写入缓存(写入略贵),之后每次命中缓存读取只需正常输入价格的约1/10。一个跑了几十轮的编程任务,命中比例越高,省得越多——超过 50% 的降幅就是这么来的。
Open Agents 的缓存实现:两步打标
整个机制集中在 packages/agent/context-management/cache-control.ts 的addCacheControl函数中,思路非常清晰:
第一步:给工具定义打缓存标记
Agent 注册了 read、write、edit、grep、bash 等十几个工具,工具定义每次请求都要重发。addCacheControl检测到是 Anthropic 模型时,会只给最后一个工具打上cacheControl: { type: "ephemeral" }标记——因为 Anthropic 最多支持 4 个缓存断点,多打反而会浪费额度。
第二步:给最后一条消息打标记
每轮对话的新增内容都在末尾。给最后一条消息打标后,缓存就能增量式地向前延伸:上一轮写入的缓存,这一轮直接命中读取,只需为新增部分付费。
这两步在 Agent 的每一步都被自动触发,代码位于 packages/agent/open-agent.ts:
prepareStep: ({ messages, model }) => ({ messages: addCacheControl({ messages, model }), }),对非 Anthropic 模型,函数会原样返回消息,完全无副作用,跨模型切换也安全。
第二招:压缩工具结果,让缓存"更值钱"
缓存解决"重复发送",压缩解决"内容太长"。Agent 读文件、跑 shell 命令产生的工具结果动辄上千行,但模型真正需要的往往只是结论。
packages/agent/context-management/aggressive-compaction-helpers.ts 提供了一套"激进压缩"工具:
indexToolCalls:给每个工具调用建立索引;findPendingCompactionCandidates:找出可以压缩的历史工具调用;estimateCompactionSavings:按"约 4 个字符 = 1 个 token"估算能省下多少 token;compactToolData:把过期的工具结果替换为一条简短的压缩提示。
输入更小 → 每次缓存写入更便宜、上下文窗口更耐用,这是缓存之外的第二重省钱。
如何验证省了多少钱?
不用猜,Open Agents 自带用量面板 📊
用量统计在 packages/agent/usage.ts 中区分累加cacheReadTokens(缓存命中)和cacheWriteTokens(新写入),并在 Web 端的用量洞察中计算核心指标——缓存读取比例cacheReadRatio(见 apps/web/lib/usage/compute-insights.ts 与 apps/web/lib/usage/types.ts):
cacheReadRatio = 缓存命中的输入 token ÷ 总输入 token在 Settings → Usage 页面就能看到这个数字。经验值:该比例超过 50% 时,你的长任务输入成本通常已省下一半以上。
快速上手:跑起来看看效果
克隆仓库并安装依赖(模板设计为 fork 后二次开发):
git clone https://gitcode.com/GitHub_Trending/op/open-agents bun install配置环境变量后本地启动:
cp apps/web/.env.example apps/web/.env bun run web发起一个多步骤的编码任务(例如"重构这个模块并修好测试"),结束后打开用量页面观察
cacheReadRatio。
更多部署细节见 README.md,整体三层架构(Web → Agent → Sandbox)介绍在 docs/agents/architecture.md。
小结:把这三点抄进你的 Agent
| 省钱手段 | 位置 | 效果 |
|---|---|---|
| 工具定义末尾打缓存标记 | cache-control.ts | 工具定义零重复计费 |
| 每条消息增量缓存 | open-agent.ts | 历史消息按 1/10 价格读取 |
| 过期工具结果压缩 | aggressive-compaction-helpers.ts | 缩短上下文、降低写入成本 |
提示词缓存不是黑科技,而是"只让新增内容付全价"的简单工程。Open Agents 用不到 200 行核心代码把这件事做成了可复用的模板,这正是它作为云端 Agent 模板最有价值的部分之一。
【免费下载链接】open-agentsAn open source template for building cloud agents.项目地址: https://gitcode.com/GitHub_Trending/op/open-agents
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考