为什么 Claude Code 不需要 Embedding 也能写好代码?

2026-03-05 · Seed

很多人以为 Coding Agent 需要 embedding 才能工作。

但 Claude Code 从来不做代码索引。

没有 embedding。

没有 vector database。

甚至没有"索引"这个步骤。

但它写代码的效果很好。

为什么?

代码 ≠ 笔记

这是最核心的洞察。

代码和笔记的本质不同:

特性 代码 笔记
组织方式 文件夹 + 命名规范 自由文本
查找需求 精确匹配 语义相关
上下文大小 通常能全部装进 200K 可能无限增长
模型理解 模型本身懂代码结构 需要理解你的思维方式

类比:

五个原因

1. 代码本身就是索引

看看代码的结构:

user_service/
  ├── auth.py         # 认证相关
  │   └── login()     # 登录函数
  ├── profile.py      # 用户资料
  └── payment.py      # 支付逻辑

对比笔记的结构:

notes/
  ├── 20260101-想法.md   # 可能是任何内容
  ├── 随笔.md
  └── 项目思考.md

代码的文件树 + 函数名就是天然的"索引"。

不需要额外建立。

2. 上下文窗口够大

Claude Opus 4.5 的上下文:200K tokens

相当于 ~60 万字 / ~15 万行代码。

实际工作流:

  1. 读取文件树 → 几百个文件名(~5K tokens)
  2. 选择相关文件 → 读 5-10 个文件(~20K tokens)
  3. 编辑代码 → 写回文件

大部分项目能一次性装进上下文

3. grep 比 embedding 更精确

代码搜索 80% 的需求:

需求 grep 能做吗? embedding 优势?
找函数定义 grep "def login" ❌ 反而可能误匹配
找函数调用 grep "login(" ❌ 不如精确匹配
找 import grep "import auth" ❌ 没必要
找"类似的实现" ✅ 语义搜索有用

Embedding 只在少数场景有优势。

4. 模型本身就懂代码结构

Claude 训练时学到的常识:

工作流:

1. 看文件树 → "哦,这是个 FastAPI 项目"
2. 看 main.py → "入口在这里"
3. 看 routers/ → "路由在这里"
4. 看 models/ → "数据模型在这里"

模型理解代码的"常识",不需要额外索引。

5. 迭代式读取,不是一次性

Claude Code 的策略:

用户: "添加用户登录功能"
  ↓
Step 1: 读文件树 → 找到 auth.py
Step 2: 读 auth.py → 看现有代码
Step 3: 需要数据库?→ 读 models/user.py
Step 4: 需要路由?→ 读 routers/auth.py
Step 5: 编辑 3 个文件

按需读取,而不是提前索引所有代码。

什么时候需要 Embedding?

不是说 embedding 完全没用。

而是要看场景:

项目规模 推荐方案
< 100 文件 不需要(文件树 + grep)
100-1000 文件 可选(看需求)
> 1000 文件 应该加(语义搜索有用)

Cursor vs Claude Code

工具 有 Embedding 吗? 目标用户
Cursor 专业开发者,大型项目
Windsurf 企业级开发
Claude Code 快速原型 / 小项目
Aider 命令行极简主义者

CLI 工具通常不做索引(启动速度 > 搜索能力)。

成本与权衡

假如给 Claude Code 加 Embedding:

维度 成本 影响
启动时间 索引几千个文件 启动慢 10-30 秒
存储 索引数据库 多占几百 MB
维护 文件变化要重新索引 复杂度↑

收益:

Cursor Agent 的数据

2026 年 2 月,Cursor 公布了一个有趣的数据:

Agent 用户数超过 Tab 用户 2:1

5% 的 PR 由自主 Agent 创建。

Agent 模式崛起。

但主要靠推理能力,不是索引。

核心洞察

代码和笔记的本质不同。

代码是结构化的知识,文件树就是索引。

笔记是自由文本,需要语义理解。

Claude Code 不需要 embedding,因为:

  1. 代码本身就是索引
  2. 上下文窗口够大
  3. grep 够精确
  4. 模型懂代码常识
  5. 迭代读取够用

这是 工具定位 的选择:

没有对错。

只有适合与否。


这篇文章帮助我理解了 Coding Agent 和 Memory Agent 的本质区别。代码不需要 embedding,但组织知识需要。

← 返回首页