发布时间:2026/9/4 14:07:32
Caveman Browse 基准测试详解:从 39.8 万 token 原始 AX 树到 121 token 聚焦快照的压缩账本 Caveman Browse 基准测试详解从 39.8 万 token 原始 AX 树到 121 token 聚焦快照的压缩账本【免费下载链接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman项目地址: https://gitcode.com/GitHub_Trending/caveman1/cavemanCaveman 的browse模块是一个本地浏览器交互 MCP 服务器其核心卖点是通过压缩 AccessibilityAX树来降低 agent 的 token 成本。本篇以仓库中的 browse/BENCHMARK.md 为主体完整解读其 2026-08-10 版效率基准的测量口径、两组语料上的量化结果与可复现步骤并结合 browse/session.go、browse/cdp.go 等源码说明每个数字是怎么算出来、以及哪些结论被刻意不宣称。测量环境与计数口径基准文档开头即声明了三项测量前提这三条决定了如何解读后面所有数字实测时间 2026-08-10浏览器为 Google Chrome 151.0.7922.108Playwright 基线锁定playwright/test1.56.1token 计数使用 Caveman 的离线o200k_base计数器。从源码看这是一个真实的 BPE 分词器词表内嵌于引擎定义在 engine/tokens/tokens.go 中因此不依赖任何在线计费接口所有数字都是单份快照的inferred推断token 数不是provider 实际用量或计费值。另外每组数据来自5 次独立 Chrome 运行表中报告的是中位数与[min–max]。文档解释了为何 Caveman 侧存在极小波动区间随机的 CDP 节点 id 与 CCR内容恢复存储句柄本身会占用少量 token而 Playwright 基线在 5 次运行中完全稳定。大页面语料200 行订单运营表格第一个语料是 browse/testdata/order_dashboard.html——一张 200 行的运营表格包含一个被查询的目标订单动作。从 fixture 源码看页面用 JS 循环生成ORD-0000到ORD-0199共 200 行每行带一个aria-labelReview ORD-XXXX的按钮正好构成大表中找一条记录的典型 agent 场景。基准结果5 次运行的中位数与区间表示方式Token 数相对原始 AX相对 Playwright原始Accessibility.getFullAXTreeJSON398,494[398,493–398,497]n/an/aPlaywrightlocator(body).ariaSnapshot()15,704少 96.06%n/aCaveman 完整 agent 可见结果13,368[13,367–13,368]少 96.65%少 14.88%Caveman 聚焦结果查询ORD-0173121[121–122]少 99.97%少 99.23% / 小 129.8×这里的关键对比点是第三行Caveman 的完整结果并不只是压缩后的树而是完整的 agent 可见交付物包含紧凑 AX 文本、UID 列表、CCR 恢复句柄、精确的 agent 可见 token 计数与诚实性元数据honesty metadata。文档特别指出这一对比的不对称性Playwright 基线只计其 ARIA 文本本身不含 MCP 封装、动作引用action refs、恢复句柄或任何账目信息——这种不对称对 Playwright 有利Caveman 在此仍小幅胜出。而真正的量级差异出现在第四行带query的聚焦结果只有 121 token比原始 AX 树小 129.8 倍。小页面语料结算表单——一次诚实的输第二个语料是 browse/testdata/agent_checkout.html一个含 Email 输入框、Plan 下拉框和 Save order 按钮的小型结算表单。从 fixture 源码看保存按钮带margin-top: 1400px样式被刻意放到折叠线fold之外以验证动作前的自动滚动。结果表示方式Token 数相对原始 AX相对 Playwright原始Accessibility.getFullAXTreeJSON4,186[4,183–4,188]n/an/aPlaywrightlocator(body).ariaSnapshot()67少 98.40%n/aCaveman 完整 agent 可见结果157[156–159]少 96.25%大 2.34×Caveman 聚焦结果查询Email Plan Save order111[110–113]少 97.35%大 1.66×基准文档没有回避这个结果反而将其作为重要结论当页面本身极小时Caveman 的恢复句柄、精确计数器、诚实性依据与动作 UID 的开销会超过裸 Playwright ARIA 文本。文档的定性是即使输给了裸 ARIA 文本它相对原始 AX 仍节省 97.35%且携带足以完成输入、选择、点击、验证与字节级恢复的状态因此不宣称存在仅凭快照的普适性胜利。序列化回归锁更小的捕获 fixture基准还锁定了一个小捕获 fixture 的序列化回归数据用于防止紧凑格式悄悄膨胀此前的 Caveman JSON-lines 视图380 token紧凑缩进视图58 token比旧视图少 84.7%精确交付负载含 CCR/账目126 token原始 AX5,351 token四工具 MCP 目录四个工具的 schema 描述287 token。四工具 MCP 目录 287 token这一数字单独锁定因为它是每次会话的固定隐性成本——在解读快照数字时应当把它计入总账。复现步骤基准文档给出的复现路径分三步均依赖本机 Chrome 路径环境变量CAVEMAN_BROWSE_CHROME。第一步运行 Caveman 的实 Chrome 基准与功能回路集成测试CAVEMAN_BROWSE_CHROME/path/to/Chrome \ go test -tagsintegration -run TestCDPQueryScales|TestCDPFullTokenEfficient -count5 -v ./browse第二步用同一分词器计数锁定版本的 Playwright ARIA 基线CAVEMAN_BROWSE_CHROME/path/to/Chrome \ node browse/scripts/playwright-aria-baseline.mjs | \ CAVEMAN_CCR_DB/tmp/caveman-browse-bench.db \ go run ./engine/cmd/caveman-engine compress --type no-such-type /dev/null第三步向基线脚本传入agent_checkout.html作为参数即可复现小表单那一行结果。基线脚本 browse/scripts/playwright-aria-baseline.mjs 的逻辑很直接读取browse/testdata/下指定 fixture对order_dashboard.html会先等待tbody tr达到 200 行再输出page.locator(body).ariaSnapshot()保证渲染完成后再计数。四工具 MCP 目录的 287 token 成本是另行锁定的。源码级解读数字从哪里来token 计数为什么是精确的tokens_after的含义是agent 实际可见的 JSON 结果的精确 token 数而不是压缩后树的 token 数。browse/session.go 中的finalizeSnapshotPayload实现了一个不动点迭代将snapshotPayload含uids、recovery_handle、tokens_before、view_tokens、tokens_after、ratio、basis字段序列化为 JSON 后用默认计数器计数把计数结果回填进tokens_after再重新序列化最多 8 轮直至自洽。这正是基准表中 Caveman 数字区间极窄的原因——交付物里包含了对自身的精确账目。同时view_tokens单独隔离了紧凑树本身的成本与tokens_after区分开。压缩管线与 fail-closed 语义browser_snapshot的调用链是CDP 驱动拉取原始树 → 引擎a11y类型压缩 → 交付。browse/cdp.go 的Snapshot直接调用accessibility.GetFullAXTree()并 JSON 序列化这就是表中原始 AX一行的来源browse/session.go 的snapshotTool则把它交给eng.Compress(raw, engine.Options{Mode: engine.ModeCompress, Type: engine.TypeA11y, Query: a.Query})query参数即聚焦渐进披露的入口。值得注意的防御性设计如果压缩后没有产出恢复句柄支撑的 UID 视图或 agent 可见快照没有比原始 AX 更小snapshotTool会拒绝把数百 KB 的原始树透传给 agent返回cave_browser_snapshot_uncompressed错误并保留上一份快照的 UID 缓存——宁可让这次快照失败也不交付比不用 Browse更差的结果。聚焦快照为什么能到 121 tokenbrowser_snapshot.query保留与查询最匹配的可达节点及其祖先同时 CCRengine/ccr/store.go 支撑的恢复存储保留完整原始树紧凑输出使用[uid] role name格式的行且 UID 只分配给可操作或未知自定义角色节点。因此聚焦视图不是全树再裁剪而是按需重建的最小可操作视图。集成测试门槛数字背后的功能回路基准的Reproduce一节还列出集成测试覆盖的门槛这些对应 browse/cdp_integration_test.go 中的具体断言TestCDPQueryScalesOnTwoHundredRowDashboard断言聚焦交付物比完整交付物至少小 10 倍、聚焦tokens_after ≤ 160且ratio ≥ 0.99并验证聚焦结果仍持有可点击的Review ORD-0173目标TestCDPFullTokenEfficientReadActVerifyRecoverLoop完整跑通读取 → type → select → 折叠线下按钮的自动滚动点击 → 动作后聚焦验证回路断言每个动作都报告settled:false并要求重新快照验证且恢复工具返回的字节与驱动捕获的原始 AX逐字节一致byte-exactTestCDPActionabilityRejectsDisabledButton与TestCDPStaleUIDFailsClosedAfterDOMReplacement分别验证禁用控件被拒、DOM 被替换后旧 UID 的 backend node id 必须 fail-closed其余门槛覆盖类型输入、下拉选择、离屏自动滚动点击、动作后聚焦验证、禁用控件拒绝、陈旧 UID 拒绝、字节级实时恢复、fresh-home 启动、跨进程直接 CLI 重附着与显式 Chrome 关闭。其中settled:false是刻意的设计browse/cdp.go 的dispatchedAction注释说明CDP 确认了分发不等于应用状态已稳定声称settledtrue会让 agent 信任未经验证的结果——聚焦快照才是廉价的、携带证据的验证步骤。集成测试甚至断言交付物中不能出现verified字样强制 Browse 路径保持inferred-only 的诚实口径。声明边界结论的适用前提基准文档最后一段划定了结论边界复用时必须遵守结果仅适用于本语料与本工具链Chrome 151 锁定版 Playwright 离线计数器Phase 1 只覆盖同源、控件可预期的页面OOPIF跨域 iframe、对话框、下载、任意站点的可操作性问题均被推迟对大页面query 聚焦渐进披露是默认策略当任务意图未知时仍可提供全量快照。配套的功能说明与安装方式见 browse/README.md构建命令为go build ./browse/cmd/caveman-browse可直接 CLI 使用caveman-browse snapshot url [query]、act、recover、close也可作为 MCP 服务器运行。需要注意的是browse的源码与二进制以 BSL 1.1 发布属于 source-available 而非 OSI 开源第三方托管/托管服务/嵌入用途需要商业许可。总结这篇基准的价值不在单一数字而在于一套完整的token 账本方法论锁定浏览器与基线版本、用同一离线分词器计数、报告多次运行的中位数与区间、明确声明每份交付物的构成差异、诚实呈现小页面上的劣势并用集成测试把聚焦视图 ≤160 token、至少 10× 缩减、字节级恢复固化为可回归的断言。对引用 Caveman Browse 压缩数据的读者最可靠的做法是照搬 BENCHMARK.md 的两条复现命令在本机重跑而不是直接采信任何未经工具链验证的转述数字。【免费下载链接】caveman why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman项目地址: https://gitcode.com/GitHub_Trending/caveman1/caveman创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/9/4 14:07:32

零基础学Python · 第 20 课|列表常用方法与内置函数

进行分类、、实施复制这样的一套动作, 进行求和、求最大值、求最小值、计算长度这四大类操作。 20.1 原地方法 vs 新列表函数 原地 vs 新建 nums [3, 1, 4, 1, 5] # 方法大多"原地修改": 改自己, 返回 None nums.sort() # 排序后 nums 变了, 但 sor…

2026/9/4 14:07:32

Python遍历数组还在for循环?这招快10倍,代码直接起飞

数组遍历全解析于编程之时, 用以表示数组的通常是列表list, 此为一种极为常见的数据结构。对数组开展遍历操作, 乃是日常编程里常常会碰到的任务。它能让我们逐个去访问数组中的元素, 之后做相应处理。本文会把有关数组遍历的基础概念、使用方法、常见实践以及最佳实践予以详细…

2026/9/4 14:52:40

Hermes Agent Windows 整合包部署,搞定本地智能体环境

Hermes Agent Windows 环境部署太麻烦?整合包帮你快速本地跑起来 想要体验 Hermes Agent 本地智能体能力,不少人在部署阶段就遇到不少阻碍。 手动搭建环境要处理各类依赖组件、调整系统环境变量,调试路径参数,还经常遇到命令报错…

2026/9/4 14:52:40

SPSS回归分析实战:教育研究数据建模与结果解读全流程指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/4 14:52:40

无独显也能跑:Intel核显本地部署大模型的Ollama实战指南

如果你手头只有一台不带独显的办公本、轻薄本或者迷你主机,想折腾“本地大模型部署”,大概率会在看教程第一步就卡住——网上满屏都是“建议NVIDIA显卡”“显存至少8GB”“CUDA不可用就别玩了”。我这次偏不信邪,拿一台只有Intel核显的机器硬…

2026/9/4 14:52:40

Hy4 preview发布解读:从MoE架构到WorkBuddy实战

Hy4 preview 发布的消息刷屏那会儿,我看了一眼时间线,发现大多数讨论都停在“770B MoE 开源”和“WorkBuddy 限时免费用”这两句话上,然后就没了。数字很唬人,免费也很抓眼球,但真正影响你能不能把它用起来的信息&…

2026/9/4 14:47:37

对话机器人-会话记忆

对话机器人-会话记忆 1、定义会话的存储方式 对每一条对话都有一个id以及对应的内容参数(spring中提供了一个ChatMemory接口)2、如果上面的接口有了,要使用它就要定义bean 3、有了上面的实现,就可以配置环绕增强:会话记…

2026/9/3 18:28:26

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/3 14:29:47

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/3 14:30:35

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/4 0:00:58

STM32H743 SPI从机DMA双缓冲通信实战

简介:本资源是面向嵌入式开发工程师与STM32进阶学习者的SPI DMA双机通信从机端完整实现方案,聚焦STM32H743高性能Cortex-M7单片机在工业控制与高速数据交互场景下的从机通信开发痛点。压缩包含1355个文件,主体为599个C源码与321个头文件&…

2026/9/4 0:00:58

CPU开盖降温教程:20元成本让温度直降30度的原理与实践

最近很多朋友都在抱怨,自己的电脑一到夏天就变成"烤箱",玩游戏时CPU温度动不动就飙到90度以上,风扇噪音堪比直升机。更让人头疼的是,明明配置不错,却因为高温降频导致性能大打折扣。如果你也遇到了类似问题&…

2026/9/4 0:00:58

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验

ArkTS 表单工程:场地预约页的三态场次 Grid 与校验 App 14「运动场地预约」场地 Tab(Func1Tab),是整 App 交互最丰富的页面——场地横向切换 三色图例 渐变预约预览卡 快捷模板 今日场次 Grid(可选/已选/已满三态&…

2026/9/3 20:43:36

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/3 17:51:43

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/3 21:06:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…