揭开 Claude Code 的面纱

作者: stellarlink


揭开 Claude Code 的面纱

最近在看 Claude Code 的设计,发现一个有意思的现象:当所有 AI 编程助手都在卷向量索引、语义搜索的时候,Claude Code 反其道而行——用 Grep 和 Glob。

Grep,1973 年诞生的文本搜索工具。Glob,Unix shell 里最基础的文件匹配。

这个选择在技术圈引发了不小的争议。Milvus 的博客说”Claude Code 的 grep-only 方式会烧掉太多 tokens”,HackerNews 上也有人质疑:“Cursor 用向量搜索,Claude 用 grep,这不是倒退吗?“

但 Anthropic 团队在访谈里透露了个细节:他们测过 RAG、向量索引这些方案,最后发现这种”agentic search”(让模型智能地使用 Grep/Glob)的效果反而最好。

为什么会这样?

Claude Code 的搜索能力,核心靠两个工具:

这两个工具本身很蠢。Glob 只会按文件名匹配,Grep 只会按正则搜索,都不懂语义。

但当模型来驱动它们时,就不一样了。

用户说:“找处理用户认证的代码”

传统向量索引的做法

工具: 语义搜索 "user authentication"
返回: login(), handleAuth(), verifyUser() ...
(工具自己理解语义)

Claude Code 的做法

模型: 先用Glob找可能相关的文件
工具: glob **/*auth*.go
返回: auth.go, auth_handler.go, middleware/auth.go

模型: 在这些文件里搜关键词
工具: grep "func.*Login" auth.go
返回: func LoginHandler(...)

模型: 读一下这个函数
工具: read auth.go:35-60
返回: 函数实现代码

看出区别了吗?

向量索引是让工具来理解语义,然后给模型喂结果。 Agentic search 是让模型来理解语义,然后指挥工具执行。

所有的智能都在模型里,工具只负责最基础的操作。

为什么简单工具更好

传统 IDE 的做法是让工具自己变聪明。IntelliJ IDEA 启动要构建 PSI 树、stub 索引,运行时要维护语法树、更新索引,几个 GB 内存、几十个后台线程就这么没了。

Cursor 更进一步,用 Merkle 树索引代码库,智能分块后生成向量嵌入,存到远程数据库。确实能做语义搜索——搜”用户认证”能找到 login、authenticate、verifyUser 这些不同命名的函数。

但问题是:当模型已经足够强大的时候,这些工具层的智能是多余的。

向量搜索失败的时候,你要调试:

Grep 失败就一个原因:正则不匹配。改正则,重新搜。

而且,模型可以做很多向量索引做不到的事:

这就是”agentic”的含义——让模型成为 agent,工具只是手。

Claude Code 的工具箱

看看 Claude Code 实际提供的工具:

文件搜索

文件操作

执行

其他

没有语法分析,没有类型推导,没有符号索引。都是最基础的操作。

复杂的事情交给模型:

工具层保持简单,模型层承担智能。

无状态的优势

Unix 的设计哲学:每个程序只做一件事,并且做好。Grep 做搜索,不管搜索结果怎么用;Glob 找文件,不管文件内容是什么。

Claude Code 继承了这个思想。

对比有索引的系统:

Grep/Glob:

每次搜索都是全新的,每次结果都是最新的。没有状态,就没有状态管理的复杂度。

这也是为什么几百行代码就能实现一个基础的 agent——当你不需要维护索引、缓存、状态时,代码自然就简单了。

什么时候简单比复杂更好

Linus 在选择宏内核 vs 微内核的时候说过:“微内核在理论上很美,但实践中复杂度爆炸。“

向量索引在理论上很美:

但实践中:

Grep/Glob 在理论上很蠢:

但实践中:

当你有 GPT-4/Claude 这样的模型时,工具的”蠢”不是缺点,而是优点。因为所有智能都在模型里,工具只要可靠就够了

2025 年的启示

现在回头看,Claude Code 的选择并不是倒退,而是一种清醒。

在 AI 能力已经很强的 2025 年,真正稀缺的不是智能,而是:

向量索引这些”聪明”的工具,在 90%的场景下很酷,但在 10%的关键时刻让你抓狂——当你最需要它准确的时候,它给了你”语义相似”的错误答案。

Grep/Glob 这种”愚蠢”的工具,在 100%的场景下都可靠。搜错了?改正则。找不到文件?换个模式。每一步都清晰可控。

作为一个程序员,我更喜欢后者。


Linus 说过:“Talk is cheap. Show me the code.”

Unix 哲学说:“Do one thing and do it well.”

Grep 做了 50 年的搜索,Glob 做了 50 年的文件匹配,现在还在用,这本身就是最好的证明。

Claude Code 选择了一条看似”倒退”的路——不用向量数据库,不建代码索引,就用最基础的 Unix 工具。但这条路上有 Unix 的影子,有 Linus 的实用主义,有极简设计的智慧。

在一个 AI 能力爆炸的时代,也许最先进的设计,就是让模型承担 100%的智能,让工具保持 100%的简单。


提供 最小化 Claude Code 实现


参考资料:

  1. 谈谈 Claude Code 的设计哲学:为什么最好的设计是”健忘”的
  2. Claude Code: Anthropic’s Agent in Your Terminal^[3]^
  3. How Claude Code is built - Pragmatic Engineer^[4]^
  4. Unix Philosophy^[5]^

参考资料

[1]

GitHub - shareAI-lab/mini_claude_code: 0 -1 diy your agent cli.: https://github.com/shareAI-lab/mini_claude_code

[2]

GitHub - cexll/mini-claude-code-go: mini claude code for go: https://github.com/cexll/mini-claude-code-go

[3]

Claude Code: Anthropic’s Agent in Your Terminal: https://www.latent.space/p/claude-code

[4]

How Claude Code is built - Pragmatic Engineer: https://newsletter.pragmaticengineer.com/p/how-claude-code-is-built

[5]

Unix Philosophy: https://en.wikipedia.org/wiki/Unix_philosophy