ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

揭开 Claude Code 的面纱:Grep、Glob 与 Agentic Search 如何协同完成一次代码检索

揭开 Claude Code 的面纱:Grep、Glob 与 Agentic Search 如何协同完成一次代码检索 1. 从一句自然语言到一次代码检索Claude Code 的 Agentic Search 到底在做什么你在终端里敲下一句“帮我找处理用户登录的代码”Claude Code 不会立刻给你答案。它会先想一下这个仓库里哪些文件可能跟登录有关然后调用 Glob 按文件名模式扫一遍拿到候选文件列表再用 Grep 在这些文件里搜正则最后 Read 具体函数体确认。整个过程可能来回三四轮每一轮的工具调用输入输出都不一样。这就是 Agentic Search 的核心模型负责理解意图和决策Grep 和 Glob 只负责执行最基础的匹配操作。没有向量索引没有语义嵌入没有预构建的代码图谱。听起来像是倒退但实测下来这种“笨办法”在真实仓库里的表现反而更稳。为什么因为当模型足够强的时候工具层的“智能”是多余的。向量搜索失败时你要排查嵌入质量、索引过期、分块策略、排序算法一堆问题Grep 失败就一个原因——正则没写对。改正则重新搜完事。这篇文章聚焦 Claude Code 在真实仓库中的检索链路从自然语言意图到 Grep 正则再到 Glob 路径匹配最后到 Agentic Search 的多轮收敛。我会给出可复制的检索配置片段和三类典型查询的验证步骤帮你观察每轮工具调用的输入输出差异。适合谁看已经在用 Claude Code 或者准备接入 Claude Code 做代码检索的开发者尤其是那些好奇“为什么不用向量数据库”的人。2. 接入前的准备TaoToken 配置与 Claude Code 环境搭建在深入检索链路之前先把环境跑通。Claude Code 本身是一个 CLI 工具但它需要连接大模型 API 才能工作。这里我用 TaoToken 作为 API 提供方来演示因为它对 Claude 系列模型的支持比较直接配置也简单。首先你需要一个 API Key。打开 https://taotoken.net/api-keys 注册并创建一个 Key记下来后面配置要用。注意这个 Key 只显示一次丢了就得重新生成。然后安装 Claude Code。如果你还没装用 npm 全局安装npm install -g anthropic-ai/claude-code安装完成后需要配置 API 端点和 Key。Claude Code 支持通过环境变量或者配置文件来指定。我推荐用配置文件的方式这样不同项目可以有不同的设置。在项目根目录创建.claude/settings.json写入以下内容{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-key-here, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }注意 Base URL 是https://taotoken.net/api不要加多余的路径。Model ID 根据你实际使用的模型来填这里用 Claude Sonnet 4 举例。如果你用的是其他模型比如 Claude Opus 或者 Haiku把 Model ID 换掉就行。配置完成后在终端里进入你的项目目录运行claude如果配置正确你会看到 Claude Code 的交互界面。第一次运行可能会提示你确认一些权限比如是否允许读取当前目录的文件。这些权限是 Claude Code 执行 Grep、Glob、Read 等工具的前提必须允许。如果你更喜欢用环境变量的方式也可以这样export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-your-key-here export ANTHROPIC_MODELclaude-sonnet-4-20250514 claude两种方式效果一样配置文件的方式更适合团队协作因为可以提交到版本控制里记得把 Key 换成占位符或者用环境变量注入。环境跑通之后你可以先做一个简单测试在 Claude Code 里输入“列出当前目录下所有的 Go 文件”看看它是否能正确调用 Glob 并返回结果。如果能说明基础链路没问题可以进入下一步了。3. 可复制的检索配置片段让 Grep 和 Glob 按你的规则工作Claude Code 的 Grep 和 Glob 工具本身没有太多可配置的参数但你可以通过项目级的配置文件来影响它们的行为。比如忽略某些目录、指定文件类型、设置搜索深度等。这些配置放在.claude/settings.json的permissions和ignore字段里。先看一个完整的配置示例你可以直接复制到自己的项目里{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-key-here, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, permissions: { allow: [ Glob, Grep, Read, LS ], deny: [ Bash(rm -rf *), Write ] }, ignore: { paths: [ node_modules/**, vendor/**, .git/**, dist/**, build/**, *.min.js, *.lock ] } }这个配置做了三件事允许 Glob、Grep、Read、LS 这四个检索相关的工具禁止危险的 Bash 命令和 Write 操作忽略常见的依赖目录和构建产物。为什么要忽略这些目录因为 Grep 默认会递归搜索所有文件如果不加限制它会在 node_modules 里翻半天浪费 token 和时间。实测下来一个中等规模的 Node.js 项目node_modules 里可能有几十万个文件Grep 扫一遍要好几秒而且返回的结果大部分是无关的。ignore.paths支持 glob 模式你可以根据自己项目的结构来调整。比如 Python 项目可以加上__pycache__/**、*.pyc、.venv/**Java 项目可以加上target/**、*.class。除了 ignore你还可以通过.gitignore来间接影响 Grep 的行为。Claude Code 默认会尊重.gitignore里的规则所以如果你已经把某些目录写进了.gitignoreGrep 也会自动跳过它们。这是一个很实用的技巧不需要额外配置只要维护好.gitignore就行。另外如果你想让 Grep 只搜索特定类型的文件可以在对话里直接告诉 Claude Code。比如“只在 .go 文件里搜索 handleLogin”模型会自动在 Grep 调用里加上--include*.go参数。你不需要手动写这个参数但知道它的存在有助于你理解模型的行为。还有一个值得注意的配置是permissions.allow里的工具列表。如果你发现 Claude Code 在检索时总是提示权限不足检查一下这里是否包含了 Glob 和 Grep。有些版本的 Claude Code 默认不开启这两个工具需要手动允许。配置改完之后重启 Claude Code 让设置生效。然后你可以做一个验证在对话里输入“搜索所有包含 TODO 的 TypeScript 文件”观察它是否跳过了 node_modules 和 dist 目录。如果返回的结果里没有这些目录下的文件说明 ignore 配置生效了。4. 三类典型查询的验证步骤观察每轮工具调用的输入输出差异这一节是核心。我会用三个真实场景来演示 Claude Code 的检索链路每个场景都给出具体的输入、预期的工具调用序列、以及如何验证结果。你可以跟着做观察每一轮 Grep 和 Glob 的输入输出有什么不同。4.1 场景一按文件名找文件Glob 主导输入“找出所有跟用户认证相关的 Go 文件”第一轮Claude Code 会调用 Glob模式大概是**/*auth*.go。返回结果可能包括auth.go auth_handler.go middleware/auth.go pkg/auth/token.go第二轮模型看到这些文件后可能会觉得token.go也跟认证相关于是再调用一次 Glob模式是**/*token*.go。返回pkg/auth/token.go pkg/token/refresh.go第三轮模型可能还会搜一下**/*login*.go确保没有遗漏。你可以这样验证在 Claude Code 里输入上述查询然后观察它的输出。它会显示每一步调用了什么工具、传了什么参数、返回了什么结果。如果你看到它只调用了一次 Glob 就结束了说明你的仓库里文件名比较规范模型觉得够了。如果调用了三四次说明它在逐步收敛。这个场景的关键点是Glob 只匹配文件名不理解文件内容。所以模型需要根据文件名来猜测哪些文件可能相关。文件名越规范Glob 的效果越好。4.2 场景二按内容找代码Grep 主导输入“搜索所有调用 verifyUser 函数的地方”第一轮Claude Code 会调用 Grep模式是verifyUser可能加上--include*.go限制文件类型。返回结果会列出每个匹配的文件和行号pkg/auth/login.go:45: if err : verifyUser(username, password); err ! nil { pkg/auth/middleware.go:78: ok : verifyUser(user, pass) pkg/api/handler.go:112: verifyUser(req.User, req.Pass)第二轮模型可能会觉得verifyUser的定义也需要看一下于是调用 Grep 搜索func verifyUser找到定义位置pkg/auth/verify.go:23:func verifyUser(username, password string) error {第三轮模型可能会 Read 这个文件的具体实现确认逻辑。验证方法输入查询后观察 Grep 的返回结果。注意看它是否包含了所有调用点。如果你知道某个文件里也有调用但没被搜到可能是正则没匹配上或者文件被 ignore 了。这个场景的关键点是Grep 用的是正则表达式不是简单的字符串匹配。所以verifyUser会匹配到verifyUser、verifyUserAsync、_verifyUser等各种变体。如果你只想精确匹配可以在对话里说“精确匹配 verifyUser 这个词”模型会调整正则。4.3 场景三多轮收敛的 Agentic Search输入“找到处理用户登录的代码并解释它的逻辑”这个查询最复杂因为它不仅要求找到代码还要求理解逻辑。Claude Code 的检索链路会是这样第一轮Glob 找候选文件**/*login*.go、**/*auth*.go。返回一堆文件。第二轮Grep 在这些文件里搜func.*Login找到函数定义。第三轮Read 具体函数体理解逻辑。第四轮可能还会 Grep 搜一下这个函数调用了哪些其他函数比如verifyPassword、generateToken然后 Read 这些函数的实现。第五轮综合所有信息给出解释。验证方法输入查询后仔细看每一轮的工具调用。你会发现模型不是一次性把所有信息都拿到而是逐步缩小范围。第一轮可能返回 10 个文件第二轮缩小到 3 个第三轮锁定 1 个函数第四轮扩展到相关的 2 个辅助函数。这个场景的关键点是Agentic Search 的“agentic”体现在模型会根据上一轮的结果调整下一轮的策略。如果第一轮 Glob 返回的文件太多它会在第二轮用更精确的 Grep 模式如果 Grep 返回的结果太少它会放宽正则或者换关键词。你可以做一个对比实验同样的查询分别用 Claude Code 和传统的向量搜索工具跑一遍。向量搜索可能会直接返回一堆“语义相似”的函数但你不知道它们为什么相似。Claude Code 会告诉你它每一步在找什么为什么找这个结果是什么。这种可解释性是 Agentic Search 的一大优势。5. 常见报错与排查401、local proxy failed、reading choices、OAuth即使配置正确实际使用中还是会遇到各种报错。这一节列出几个高频问题及其解决方法。5.1 401 Unauthorized这是最常见的错误通常意味着 API Key 无效或者过期。检查步骤第一确认.claude/settings.json里的ANTHROPIC_API_KEY是否正确。注意不要有多余的空格或换行。第二确认 Key 是否还有效。登录 https://taotoken.net/console 查看 Key 的状态和余额。第三确认 Base URL 是否正确。应该是https://taotoken.net/api不要写成https://taotoken.net/api/v1或者其他路径。如果以上都没问题尝试重新生成一个 Key 并替换。5.2 local proxy failed这个错误通常出现在网络环境不稳定的情况下。Claude Code 需要访问外部 API如果你的网络有防火墙或者代理设置可能会导致连接失败。解决方法检查你的网络是否能正常访问https://taotoken.net/api。可以在终端里用 curl 测试curl -I https://taotoken.net/api如果返回 200 或 401说明网络通。如果超时或者返回其他错误说明网络有问题。注意不要使用任何未经授权的网络工具来绕过网络限制。如果你在公司内网可能需要联系 IT 部门开通白名单。5.3 reading choices 相关错误这个错误通常出现在模型返回的响应格式不符合预期时。可能的原因包括模型 ID 写错了。确认ANTHROPIC_MODEL的值是否正确比如claude-sonnet-4-20250514不要写成claude-sonnet-4。API 版本不匹配。有些模型需要特定的 API 版本检查 TaoToken 的文档确认。请求参数有问题。如果你在对话里输入了特殊字符或者超长文本可能会导致解析失败。尝试简化输入。5.4 OAuth 相关错误Claude Code 在某些模式下会尝试 OAuth 认证如果你用的是 API Key 模式不应该出现 OAuth 错误。如果出现了检查配置里是否有冲突的认证方式。解决方法确保.claude/settings.json里只配置了ANTHROPIC_API_KEY没有其他认证相关的字段。如果有ANTHROPIC_AUTH_TOKEN之类的删掉。另外如果你之前登录过 Claude 的官方账号可能会有缓存的凭证。尝试清除~/.claude目录下的缓存文件然后重新配置。5.5 工具调用权限被拒绝如果你看到“Permission denied for tool Glob”之类的错误说明permissions.allow里没有包含对应的工具。检查配置确保 Glob、Grep、Read、LS 都在 allow 列表里。如果配置没问题但还是被拒绝可能是 Claude Code 的版本问题。尝试升级到最新版本npm update -g anthropic-ai/claude-code5.6 检索结果为空有时候 Grep 或 Glob 返回空结果可能的原因文件被 ignore 了。检查.claude/settings.json的ignore.paths和.gitignore确认目标文件没有被排除。正则写错了。Grep 用的是正则表达式特殊字符需要转义。比如搜索func (u *User) Login时括号和星号都需要转义。文件编码问题。如果文件不是 UTF-8 编码Grep 可能无法正确匹配。尝试转换文件编码。路径问题。Glob 的模式是相对于当前工作目录的确认你在正确的目录下运行 Claude Code。排查时可以先用一个简单的查询测试比如“列出当前目录下所有文件”确认基础功能正常再逐步缩小范围。6. 把检索链路用起来从验证到日常编码的落地建议环境跑通、配置写好、报错排查完接下来就是日常使用了。这一节分享几个实用技巧帮你把 Claude Code 的检索能力发挥到最大。第一善用自然语言描述意图而不是直接写正则。Claude Code 的强项是理解你的意图然后自己决定用什么 Grep 模式。你不需要说“用 grep -r func.Login --include.go”只需要说“找所有登录相关的函数”。模型会自动转换成合适的工具调用。第二观察每一轮的工具调用学习模型的检索策略。当你看到模型先用 Glob 缩小文件范围再用 Grep 精确搜索最后 Read 确认时你也在学习如何高效地检索代码。这种策略可以迁移到你自己用命令行工具的时候。第三对于大型仓库配置好 ignore 规则。一个没有 ignore 配置的仓库Grep 可能会扫描几十万个文件每次检索都要等好几秒。把 node_modules、vendor、dist 这些目录排除掉检索速度会快很多。第四结合 Coding Plan 做长期编码任务。如果你需要连续几天甚至几周在一个项目上工作可以考虑使用 Coding Planhttps://taotoken.net/coding-plan它提供了更稳定的配额和更优惠的价格。对于需要频繁检索代码的场景这比按量付费更划算。第五遇到复杂查询时拆成多轮对话。比如“找到用户认证的代码并重构它”这种大任务可以拆成“先找到认证相关的文件”、“再找到具体的登录函数”、“然后分析它的逻辑”、“最后给出重构建议”。每一轮都让模型充分检索和确认避免一次性给太多信息导致遗漏。第六定期检查 API Key 的余额和用量。登录 https://taotoken.net/console 可以查看详细的调用记录和费用。如果发现某次检索消耗了大量 token可以回看对话记录看看是不是 Grep 模式写得太宽泛导致返回了太多结果。最后如果你在接入过程中遇到问题可以查阅接入文档https://taotoken.net/doc里面有更详细的配置说明和常见问题解答。如果文档里没有覆盖你的问题也可以在模型对话https://taotoken.net/chat里直接问模型它通常能给出有用的建议。检索链路的核心思想很简单让模型做决策让工具做执行。Grep 和 Glob 本身不聪明但组合起来加上模型的调度就能完成复杂的代码检索任务。你不需要向量数据库不需要预构建索引只需要一个能理解意图的模型和两个 Unix 工具。这就是 Claude Code 的选择也是它在真实仓库里表现稳定的原因。
返回列表