RAG 与代码库感知 本节摘要:AI 的上下文窗口再大,也装不下你整个项目。当你问「帮我修改用户登录逻辑」时,AI 怎么知道登录代码在哪个文件、用了什么工具函数、有哪些调用方?答案是 RAG(检索增强生成):把你的代码切成小块、转成向量、建立索引,提问时通过语义检索找到最相关的代码片段,拼装进上下文。本节用直觉而非公式,讲清代码 RAG 的完整流程和 Cursor 中 @codebase 的底层机制。 一、为什么需要代码库感知 一个中等规模项目有 500+ 文件、5万+ 行代码。AI 的上下文窗口(即使 200K token)也装不下全部。 没有 RAG 时:你得手动告诉 AI「登录逻辑在 src/auth/login.ts,它调用了 src/utils/jwt.
本节摘要:AI 的上下文窗口再大,也装不下你整个项目。当你问「帮我修改用户登录逻辑」时,AI 怎么知道登录代码在哪个文件、用了什么工具函数、有哪些调用方?答案是 RAG(检索增强生成):把你的代码切成小块、转成向量、建立索引,提问时通过语义检索找到最相关的代码片段,拼装进上下文。本节用直觉而非公式,讲清代码 RAG 的完整流程和 Cursor 中 @codebase 的底层机制。
一个中等规模项目有 500+ 文件、5万+ 行代码。AI 的上下文窗口(即使 200K token)也装不下全部。
没有 RAG 时:你得手动告诉 AI「登录逻辑在 src/auth/login.ts,它调用了 src/utils/jwt.ts 的 verifyToken,还有 src/models/user.ts 的 findByEmail」。每次都要当「人肉索引」。
有 RAG 时:你说「帮我修改登录逻辑」,AI 自动搜索到相关文件,理解上下文后再回答。
逐步解释:
关键概念:「语义相似」不等于「关键词匹配」。你问「怎么处理用户鉴权」,RAG 能找到名为
verifyToken的函数——即使代码里没有「鉴权」这两个字。这就是向量检索比全文搜索强大的地方。
Cursor 的 @codebase 就是代码 RAG 的用户界面:
@codebase 登录逻辑是怎么实现的?@codebase vs @file:
@codebase:AI 自己搜索,适合「不确定代码在哪」时@file:你手动指定,适合「明确知道要看哪个文件」时💡 技巧:@codebase 的检索质量取决于索引质量。如果项目中有大量生成代码(node_modules、dist、.next),会干扰检索。用
.cursorignore排除它们。
类似 .gitignore 的语法,告诉 Cursor 哪些文件不要索引:
node_modules/ dist/ .next/ *.min.js *.lock
诚实说,RAG 不是万能的:
应对策略:
RAG 让 AI「看到材料」,.cursorrules 让 AI「知道规矩」。两者结合,就是下一节的实战:为一个真实项目构建专属的 AI 编程助手。