Magnitude如何节省40%的Token成本:深度解析记忆管理与Prompt缓存机制
【免费下载链接】browser-agentOpen-source, vision-first browser agent项目地址: https://gitcode.com/GitHub_Trending/magnit/browser-agent
Magnitude是一个开源的「视觉优先」浏览器 Agent(browser agent)框架:它用视觉 AI 理解网页、用自然语言驱动鼠标键盘,帮你完成网页自动化、数据提取与测试。但浏览器 Agent 每一步都要"看"截图、"记"操作,Token 消耗天然高昂——Magnitude 通过一套滑动窗口记忆管理 + Prompt 缓存(prompt caching)机制,在默认开启缓存的情况下通常可节省约 40% 的 Token 成本,且任务越长、省得越多。本文将带你从零看懂它的省钱原理。
为什么浏览器 Agent 特别"烧" Token?
一个普通的聊天请求只消耗几千 Token,而浏览器 Agent 是"长对话":
| 消耗来源 | 说明 |
|---|---|
| 🖼️ 截图 | 每一步操作都要给模型看一张页面截图,单张图就可能上千 Token |
| 💭 思考与动作记录 | 模型的每一步"思考(thought)"和动作历史都会累积在上下文里 |
| 🔁 重复上下文 | 系统提示词、工具定义每一轮都要重新发送一遍 |
任务越长,上下文越长,费用呈线性上涨——这正是多数"computer use"类 Agent 成本失控的根源。
Prompt 缓存:40% 成本削减从何而来?
Anthropic 提供了 **Prompt 缓存(prompt caching)**能力:把前缀相同的提示词缓存下来,后续请求命中缓存时按更低的折扣计费。Magnitude 的使用策略是:
- 系统提示词永远缓存——占用 1 个 cache control 位置,整个任务期间不再重新计费;
- 剩余 3 个 cache control 位置循环轮换——通过"缓存写入 + 读取"滚动前进,让不断增长的上下文大部分时间都落在缓存内。
这个机制写在核心记忆类中,可以看到缓存位置上限被固定为 3(加上系统提示词共 4 个):
- 缓存轮换核心逻辑:packages/magnitude-core/src/memory/agentMemory.ts
对新手来说只需知道两点:
- ✅默认自动开启:只要使用
anthropic或claude-code提供方,无需任何配置,启动 Agent 时会自动打开 Prompt 缓存(见 packages/magnitude-core/src/agent/index.ts); - ⚠️Bedrock 通道不支持:缓存功能在 Bedrock 上不可用,想省钱请走 Anthropic 直连。
官方文档对这一收益的原话是:"使用 prompt caching 后,Magnitude 通常比不缓存少消耗约 40% 的 Token,且任务越长收益越明显"——完整说明见 docs/advanced/memory.mdx。
滑动窗口记忆:截图只留"最新的一小撮"
Prompt 缓存解决"重复计费",而记忆管理解决"上下文无限膨胀"。Magnitude 把每次感知都抽象成一条Observation(观测),并为每条观测配置保留策略type / limit / dedupe:
- 📸截图去重 + 限量:相邻的相同截图会被自动去重(dedupe),同时只保留最近一小撮(
minScreenshots选项,默认值见 packages/magnitude-core/src/connectors/browserConnector.ts); - 💭思考仅保留最近 20 条:
thoughtLimit默认 20,更早的思考会从上下文中淡出; - 🧊冻结掩码(freezeMask)与缓存联动:已经被缓存写过的观测保持可见状态"冻结",保证缓存前缀稳定不被破坏——这套掩码去重逻辑实现于 packages/magnitude-core/src/memory/masking.ts。
效果是:上下文长度大致随任务复杂度线性增长,而非随历史步数堆积。如果任务交互复杂、需要模型"回忆"更早的画面,可以调大minScreenshots(比如设为 3)来保留更多工作记忆,文档中有对应示例:docs/advanced/memory.mdx。
三大省钱机制速览
| 机制 | 作用 | 一句话原理 |
|---|---|---|
| 🔒 Prompt 缓存 | 省 ~40% 计费 Token | 前缀命中缓存,按折扣价计费,4 个 cache 位滚动轮换 |
| 🪟 滑动窗口记忆 | 控制上下文增速 | 截图去重限量 + 仅保留最近 20 条思考 |
| 🧊 冻结掩码 | 防止缓存"失效" | 已缓存内容保持原样,避免前缀变化导致整段重新计费 |
想临时关闭缓存做对照实验?只需在 LLM 选项中传入promptCaching: false(示例见官方文档 docs/advanced/memory.mdx)。
写在最后
对新手而言,Magnitude 最值得借鉴的不是某段代码,而是一种成本控制思路:
- 能缓存的前缀(系统提示词、工具定义)永远放前面、永远稳定;
- 会增长的内容(截图、思考)用"去重 + 限量"的保留策略不断淘汰;
- 两者联动(冻结掩码),让缓存命中率最大化。
把这三招搬进你自己的 Agent 项目,长任务的账单会好看得多。更多进阶细节(如角色配置、数据提取)可继续翻阅 docs/advanced/ 目录。
【免费下载链接】browser-agentOpen-source, vision-first browser agent项目地址: https://gitcode.com/GitHub_Trending/magnit/browser-agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考