Skip to content

智能探索基准

Smart Explore 使用 tree-sitter AST 解析,通过三种 MCP 工具提供结构化代码导航:smart_searchsmart_outlinesmart_unfold。本报告记录了与标准 Explore 代理(使用 Glob、Grep 和 Read 工具)的严格 A/B 对比,以量化 token 节省和质量权衡。

执行摘要

指标智能探索探索代理优势
发现(跨文件搜索)约 14,200 个 token约 252,500 个 token便宜 17.8 倍
目标读取(特定符号)约 5,650 个 token约 109,400 个 token便宜 19.4 倍
端到端(搜索 读取)约 4,200 token约 45,000 token便宜 10-12 倍
完整性5/5 完整源代码返回4/5(最长方法被截断)智能探索更可靠
速度每次调用低于2秒每次调用5-66秒快10-30倍

方法论

测试环境

  • 代码库:claude-mem(src/ 目录,194 个 TypeScript 文件,1,206 个解析符号)
  • 模型:Claude Opus 4.6,用于两种方法
  • 测量:来自工具响应元数据的 token 计数(Explore 代理为 total_tokens,Smart Explore 自报为 ~N tokens for folded view

控制

探索代理被明确指示:“不要使用 smart_search、smart_outline 或 smart_unfold 工具。只使用 Glob、Grep 和 Read 工具。” 在初始回合中,代理机会性地使用了 Smart Explore 工具,从而使比较无效,因此验证这是必要的。

查询

选择了五个查询来代表常见的探索任务:

  1. “会话处理” —— 跨越多个服务的通用功能
  2. “关闭” -- 涉及6个文件的基础设施问题
  3. “钩子注册”——关于插件系统的架构问题
  4. “sqlite数据库”——跨数据层的技术特定搜索
  5. “worker-service.ts 大纲”——单个大文件(1,225 行)的结构理解

第1轮:发现

“存在什么,它在哪里?”——在整个代码库中查找相关文件和符号。

结果

查询智能探索探索代理比率探索工具调用
会话处理~4,391 t51,659 t11.8倍15
停机~3,852 tokens51,523 个 token13.4倍18
挂钩注册~1,930 tokens51,688 个 token26.8倍37
sqlite 数据库~2,543 t58,633 t23.1倍16
Worker 服务概览~1,500 tokens38,973 个 token26.0 倍15
总计~14,216 tokens252,476 个 token17.8倍101

各自回来了什么

智能探索(每次调用 1 个工具):10 个带有签名、行号和 JSDoc 摘要的排名符号,以及显示所有匹配文件折叠结构视图的每个函数/类/接口(主体折叠)。

探索代理(每次调用 15-37 个工具):综合的叙述报告,包括架构图、设计模式分析、数据流说明、完整接口转储和文件结构图。说明性文字明显更多。

分析

token 差距在范围较窄的查询(“钩子注册”为 26.8 倍)中最大,因为 Explore 代理需要读取多个完整文件才能找到相对少量的相关符号。对于范围较广的查询(“会话处理”为 11.8 倍),更多的文件内容是相关的,从而缩小了比例。

Smart Explore 一贯的单工具调用模式意味着其成本是可预测的。Explore 代理的成本则取决于它读取的文件数量和合成的内容——在可比范围内,其工具调用次数范围为 15 到 37 次。

第二轮:针对性阅读

“给我看这个具体的函数。”——在发现已知符号后阅读其实现。

根据第一轮的结果,选择了五个特定符号作为自然钻取目标:

目标符号文件行数
SessionManager.initializeSessionservices/worker/SessionManager.ts135
performGracefulShutdownservices/infrastructure/GracefulShutdown.ts48
hookCommandcli/hook-command.ts45
DatabaseManager.initializeservices/sqlite/Database.ts27
WorkerService.startSessionProcessorservices/worker-service.ts158

结果

符号智能展开探索代理比例完整性
初始化会话 (135 行)~1,800 t27,816 t15.5 倍两者都返回完整源代码
执行优雅关闭 (48 行)~700 t19,621 t28.0x两者都返回完整源代码
hookCommand(45 行)~650 t18,680 t28.7 倍两者都返回完整源代码
DatabaseManager.initialize(27 行)~400 t22,334 t55.8 倍两者都返回完整源代码
startSessionProcessor(158 行)~2,100 t20,906 t10.0x智能展开:完成。探索:已截断
总计~5,650 tokens109,357 个 token19.4倍

分析

比例与符号大小成反比。 最小的函数(initialize,27行)在55.8倍时显示出最大的差距,因为探索代理仍然需要读取整个235行的文件来提取27行。最大的函数(startSessionProcessor,158行)缩小到10倍,因为文件中更多的部分是“有用的”。

智能展开返回了更完整的代码。 对于最长的方法(158行),Explore 代理在错误处理部分使用“...错误处理继续...”,而 smart_unfold 返回了完整的实现。这是因为 smart_unfold 按 AST 节点边界提取,保证了无论符号大小如何都能完整。

探索代理对目标读取没有增加任何独特信息。 当你已经知道文件路径和符号名称时,代理的开销完全是浪费——它读取文件,定位函数,然后回显出来。唯一的额外内容是简短的解释段落。

组合工作流程

现实的工作流程是先探索,然后再进行有针对性的阅读。以下是理解单个功能的端到端成本比较:

智能探索:搜索 展开

smart_search("shutdown", path="./src")     ~3,852 tokens
smart_unfold("GracefulShutdown.ts", "performGracefulShutdown")  ~700 tokens
────────────────────────────────────────────────────────────────
Total: ~4,552 tokens (2 tool calls, under 3 seconds)

探索代理:单次查询

"Find and explain the shutdown logic"      ~51,523 tokens
────────────────────────────────────────────────────────────────
Total: ~51,523 tokens (18 tool calls, ~43 seconds)

端到端比率:11.3倍 —— Smart Explore 工作流程为您提供实际的源代码,而 Explore 代理则为您提供可能会改写或截断的文字摘要。

质量评估

哪种方法都不是普遍更好的。它们针对不同的结果进行优化。

智能探索优势

  • 可预测的成本:每次操作调用 1 次工具,token 范围一致
  • 完整源代码:基于 AST 的提取保证完整的符号体
  • 结构上下文:折叠视图显示匹配文件中的每个符号
  • 速度:亚秒级响应实现快速迭代
  • 可组合性:自然地搜索、概述和展开链条

探索代理优势

  • 综合理解:生成架构叙述、数据流图和设计模式分析
  • 跨切解释:连接单个符号读取无法联系的文件中的概念
  • 入职质量:输出读起来像文档,而不是原始代码
  • 错误处理洞察:识别需要阅读多个相关函数的边缘情况和设计决策
  • 无需先前知识:可以在不知道文件路径或符号名称的情况下回答开放性问题

按任务类型分类的质量

任务更好的工具原因
“X 定义在哪里?”智能探索一次调用,精确答案
“这个文件里有什么函数?”智能探索大纲返回完整的结构图
“显示这个函数”智能探索展开返回完整源代码,绝不截断
“功能 X 是如何端到端运作的?”探索代理阅读多个文件并综合叙述
“这里使用了哪些设计模式?”探索代理需要阅读和理解,而不仅仅是提取
“帮我理解这个代码库”探索代理生成入职质量的文档

何时使用哪一个

在以下情况下使用智能探索:

  • 你知道自己在寻找什么(函数名、概念、文件)
  • 你需要的是源代码,而不是解释
  • 你正在快速迭代(读取,修改,再次读取)
  • token 预算很重要(大型代码库、长时间会话)
  • 你需要一目了然的文件结构

使用探索代理的情况:

  • 你需要综合的跨领域理解
  • 这个问题是开放式的(“这个系统是如何工作的?”)
  • 你正在编写文档或架构评审
  • 你需要理解为什么,而不仅仅是什么
  • 你正在熟悉一个不熟悉的代码库

在以下情况下同时使用:

  • 从智能探索开始进行发现和导航
  • 仅在需要多文件综合进行深入分析时升级至探索代理
  • 这种混合方法在大多数情况下节省了token,同时在需要时仍能保持对深度理解的访问

token经济学参考

操作token使用案例
smart_search2,000-6,000跨文件符号发现
smart_outline1,000-2,000单文件结构图
smart_unfold400-2,100单符号完整来源
smart_search smart_unfold3,000-8,000端到端:查找并阅读
探索代理(有针对性)18,000-28,000单一功能带解释
探索代理(跨领域)39,000-59,000架构级理解
阅读(完整文件)8,000-15,000完整文件内容

按工作流程节省

工作流智能探索传统节省
理解一个文件概要 展开 (~3,100 字)阅读完整文件 (~12,000 字)4倍
在代码库中查找函数搜索 (~3,500 次)探索代理 (~50,000 次)14倍
查找并阅读特定函数搜索 展开 (~4,500 条)探索代理 (~50,000 条)11次
导航一个 1,200 行的文件大纲 (~1,500 字)阅读完整文件 (~12,000 字)8 倍