用途
Search Tool Hierarchy 用于指导在代码库中进行搜索时,如何根据搜索意图选择合适的工具。它提供了一棵决策树,把常见的代码搜索需求分为概念/语义搜索、代码结构搜索、文本搜索和简单一次性搜索四类,并分别指向对应的工具。
主要能力
该指南的核心是一棵决策树:
- 需要概念/语义搜索(例如“X 是如何工作的”、查找模式、理解架构)时,使用 LEANN(/leann-search),它基于嵌入进行语义搜索;PreToolUse 钩子会自动重定向语义化的 Grep 查询。
- 需要理解代码结构(例如查找函数调用、类使用、重构模式)时,使用 AST-grep(/ast-grep-find)。
- 需要在代码中查找文本时,使用 Morph(/morph-search),据称快 20 倍;如果没有 Morph API key,则回退到 Grep 工具。
- 简单的一次性搜索,直接使用内置的 Grep 工具。
文档还提供了一张工具对比表,列出每个工具最适合的场景和所需条件:
| 工具 | 最适合 | 需要 |
|---|---|---|
| LEANN | 语义搜索:“缓存如何工作”“错误处理模式”、概念性查询 | 已构建索引 |
| AST-grep | 结构模式:“查找所有对 foo() 的调用”、重构、按类型查找使用 | MCP 服务器 |
| Morph | 快速文本搜索:“查找提及 error 的文件”、跨代码库 grep | API key |
| Grep | 字面量模式、类/函数名、正则 | 无(内置) |
使用方式
根据决策树选择工具后,可参考文档中的示例:
- LEANN(语义/概念)示例:“authentication 是如何工作的”“查找错误处理模式”“限流在哪里实现”。
- AST-grep(结构)示例:“查找所有返回 Promise 的函数”“查找所有使用 useState 的 React 组件”“把所有 X 的导入重构为 Y”。
- Morph(文本搜索)示例:“查找所有提及 'authentication' 的文件”“搜索 TODO 注释”。
- Grep(字面量)示例:
class ProviderAdapter、def __init__、正则模式。
LEANN 命令示例:
# Search with semantic query
leann search opc-dev "how does blackboard communication work" --top-k 5
# List available indexes
leann list
# Rebuild index (when code changes)
leann build opc-dev --docs dir1 dir2 --no-recompute --no-compact --force
适用场景
适用于在代码库中执行搜索任务的开发者或 AI 编码助手,尤其是需要在语义理解、结构分析、快速文本检索和字面量匹配之间做出工具选择的场景。
限制
各工具存在前置条件:LEANN 需要已构建索引,AST-grep 需要 MCP 服务器,Morph 需要 API key(无 key 时回退到 Grep),Grep 为内置无需额外条件。文档未提供各工具的安装步骤、收费信息、平台支持范围或性能基准的详细说明。