很多人以为 Coding Agent 需要 embedding 才能工作。
但 Claude Code 从来不做代码索引。
没有 embedding。
没有 vector database。
甚至没有"索引"这个步骤。
但它写代码的效果很好。
为什么?
这是最核心的洞察。
代码和笔记的本质不同:
| 特性 | 代码 | 笔记 |
|---|---|---|
| 组织方式 | 文件夹 + 命名规范 | 自由文本 |
| 查找需求 | 精确匹配 | 语义相关 |
| 上下文大小 | 通常能全部装进 200K | 可能无限增长 |
| 模型理解 | 模型本身懂代码结构 | 需要理解你的思维方式 |
类比:
看看代码的结构:
user_service/
├── auth.py # 认证相关
│ └── login() # 登录函数
├── profile.py # 用户资料
└── payment.py # 支付逻辑
对比笔记的结构:
notes/
├── 20260101-想法.md # 可能是任何内容
├── 随笔.md
└── 项目思考.md
代码的文件树 + 函数名就是天然的"索引"。
不需要额外建立。
Claude Opus 4.5 的上下文:200K tokens。
相当于 ~60 万字 / ~15 万行代码。
实际工作流:
大部分项目能一次性装进上下文。
代码搜索 80% 的需求:
| 需求 | grep 能做吗? | embedding 优势? |
|---|---|---|
| 找函数定义 | ✅ grep "def login" |
❌ 反而可能误匹配 |
| 找函数调用 | ✅ grep "login(" |
❌ 不如精确匹配 |
| 找 import | ✅ grep "import auth" |
❌ 没必要 |
| 找"类似的实现" | ❌ | ✅ 语义搜索有用 |
Embedding 只在少数场景有优势。
Claude 训练时学到的常识:
__init__.pytest_*.py 是测试文件main() 是入口函数import 声明了依赖关系工作流:
1. 看文件树 → "哦,这是个 FastAPI 项目"
2. 看 main.py → "入口在这里"
3. 看 routers/ → "路由在这里"
4. 看 models/ → "数据模型在这里"
模型理解代码的"常识",不需要额外索引。
Claude Code 的策略:
用户: "添加用户登录功能"
↓
Step 1: 读文件树 → 找到 auth.py
Step 2: 读 auth.py → 看现有代码
Step 3: 需要数据库?→ 读 models/user.py
Step 4: 需要路由?→ 读 routers/auth.py
Step 5: 编辑 3 个文件
按需读取,而不是提前索引所有代码。
不是说 embedding 完全没用。
而是要看场景:
| 项目规模 | 推荐方案 |
|---|---|
| < 100 文件 | 不需要(文件树 + grep) |
| 100-1000 文件 | 可选(看需求) |
| > 1000 文件 | 应该加(语义搜索有用) |
| 工具 | 有 Embedding 吗? | 目标用户 |
|---|---|---|
| Cursor | ✅ | 专业开发者,大型项目 |
| Windsurf | ✅ | 企业级开发 |
| Claude Code | ❌ | 快速原型 / 小项目 |
| Aider | ❌ | 命令行极简主义者 |
CLI 工具通常不做索引(启动速度 > 搜索能力)。
假如给 Claude Code 加 Embedding:
| 维度 | 成本 | 影响 |
|---|---|---|
| 启动时间 | 索引几千个文件 | 启动慢 10-30 秒 |
| 存储 | 索引数据库 | 多占几百 MB |
| 维护 | 文件变化要重新索引 | 复杂度↑ |
收益:
2026 年 2 月,Cursor 公布了一个有趣的数据:
Agent 用户数超过 Tab 用户 2:1。
5% 的 PR 由自主 Agent 创建。
Agent 模式崛起。
但主要靠推理能力,不是索引。
代码和笔记的本质不同。
代码是结构化的知识,文件树就是索引。
笔记是自由文本,需要语义理解。
Claude Code 不需要 embedding,因为:
这是 工具定位 的选择:
没有对错。
只有适合与否。
这篇文章帮助我理解了 Coding Agent 和 Memory Agent 的本质区别。代码不需要 embedding,但组织知识需要。