---
title: "搜索与导航"
description: "Glob 按名称找文件，Grep 按内容搜代码——两个维度覆盖代码库定位需求。理解搜索结果排序、token 预算控制和多后端 Web 搜索的设计。"
keywords: ["代码搜索", "Glob", "Grep", "ripgrep", "文件搜索"]
---

## 两个搜索维度

| 维度 | 工具 | 适用场景 |
|------|------|---------|
| **按名称找文件** | Glob | "找到所有测试文件"、"找 config 开头的文件" |
| **按内容找代码** | Grep | "哪里定义了这个函数"、"谁在调用这个 API" |

两者共享同一个 ripgrep 引擎，通过不同的参数组合实现不同搜索模式。

## ripgrep 的内嵌策略

Claude Code 不依赖系统安装的 ripgrep。它使用三级降级策略确保在任何环境下都能工作：

| 优先级 | 方式 | 场景 |
|--------|------|------|
| 1 | 系统 PATH 中的 rg | 用户自定义安装 |
| 2 | 编译进二进制的 rg | Bun 静态编译模式 |
| 3 | vendor 目录中的预编译二进制 | npm 安装模式 |

**设计考量**：搜索是 AI 最频繁使用的操作之一，不能因为用户没装 ripgrep 就降级到低效方案。但也不能假设系统 ripgrep 总是可用——不同环境的安装差异太大了。

## 搜索结果的设计考量

### 结果数量与 Token 预算

默认最多返回 250 条匹配。这不是随意选择的数字：

- 每条匹配行约 50-100 token
- 250 条 ≈ 12,500-25,000 token
- 这大约占 200K 上下文窗口的 6-12%
- 超过这个比例，AI 的推理质量会下降

AI 可以按需调整 `head_limit` 参数——搜索小项目时可以用更大的值。

### 按修改时间排序

Glob 默认把**最近修改的文件排在前面**。这不是文件系统的默认排序，而是刻意的设计决策：

**设计假设**：最近修改的文件最可能与当前任务相关。

**实际效果**：AI 优先看到"活"的代码，而不是沉寂的历史文件。当用户说"帮我修这个 bug"时，最近改过的文件通常就是 bug 所在。

### 错误恢复

ripgrep 执行有专门的错误恢复策略：

| 错误 | 处理 |
|------|------|
| 资源不足 | 自动切换到单线程模式重试 |
| 超时 | 返回已有部分结果，丢弃可能不完整的最后一行 |
| 进程无响应 | 5 秒后强制终止 |

**设计哲学**：部分结果比没有结果好。即使搜索没完成，AI 也能基于已有信息做出判断。

## ToolSearch：在 50+ 工具中发现目标

当可用工具超过 50 个时（含 MCP 提供的外部工具），AI 可能不知道该用哪个。ToolSearch 提供了工具发现机制。

### 搜索算法

```
输入: "database connection"
  → 精确匹配工具名（快速路径）
  → MCP 前缀匹配（"mcp__postgres" 匹配所有 postgres 工具）
  → 关键词拆分 + 加权评分
  → 按分数排序，返回 top-N
```

评分权重：工具名精确匹配（10分）> 工具名部分匹配（5分）> 搜索提示匹配（4分）> 描述匹配（2分）。MCP 工具额外加分，因为它们通常按功能组织。

### 延迟加载

不是所有工具都常驻内存。MCP 工具和低频工具被标记为延迟加载——只有在 ToolSearch 选中后才真正加载。这减少了每次 API 调用的 token 开销（工具描述占用大量 token）。

## Web 搜索与抓取

AI 的信息获取不局限于本地代码。WebSearch 搜索互联网，WebFetch 抓取特定网页内容——和人类开发者的工作方式一致。

### WebSearch 的多后端设计

WebSearch 通过适配器模式支持三种搜索后端：

| 后端 | 适用场景 | 需要 API 密钥 |
|------|---------|:------------:|
| **Anthropic API** | 使用官方 API 的用户 | 是 |
| **Bing** | 第三方代理/非官方端点 | 否 |
| **Brave** | 需要 Brave 搜索 | 是 |

**设计考量**：不是所有用户都使用 Anthropic 官方 API。第三方代理（OpenAI 兼容、Bedrock 等）无法使用 Anthropic 的服务端搜索工具，因此需要独立的搜索后端。

Bing 适配器直接抓取搜索页面并解析结果。它使用完整的浏览器请求头绕过反爬机制，并解码 Bing 的重定向 URL 获取真实链接。

### WebFetch 的安全防护

WebFetch 不只是"抓取 URL"——它有完整的安全防护层：

| 防护 | 说明 |
|------|------|
| 域名预检 | 调用 Anthropic API 检查域名是否在黑名单中 |
| 重定向控制 | 仅允许同域重定向，跨域重定向需要 AI 重新调用 |
| 内容大小限制 | 单次响应上限 10MB |
| URL 验证 | 长度、协议、公网域名检查 |

**预批准域名**：约 90 个主流技术文档站点（MDN、Python docs、React docs 等）无需手动授权即可抓取。对预批准域名，WebFetch 跳过摘要步骤直接返回原文——因为技术文档本身的结构化程度已经足够好。

## 接下来

- **Shell 执行** — Bash 的沙箱和超时控制
- **任务管理** — TaskCreate/TaskUpdate 的追踪系统
- **工具系统** — 理解所有工具的统一接口设计
