Files
claude-code/docs/tools/search-and-navigation.mdx
claude-code-best 46fecb590b docs: 重写搜索与导航,从源码解剖改为搜索策略设计分析
移除 TypeScript 代码、源码路径和适配器实现细节,
聚焦结果排序的设计假设、token预算控制、
多后端搜索的适配器选型和 WebFetch 安全防护层。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-20 10:49:18 +08:00

117 lines
5.0 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 的追踪系统
- **工具系统** — 理解所有工具的统一接口设计