代码库索引
了解代码库索引如何通过使用 AI 嵌入和语义搜索帮助 Roo Code 理解大型项目。OpenAI 和 Qdrant 集成的设置指南。
代码库索引通过使用 AI 嵌入创建语义搜索索引,改变了 Roo Code 理解您项目的方式。它不是搜索精确的文本匹配,而是理解您查询的含义,帮助 Roo 找到相关代码,即使您不知道具体的函数名称或文件位置。
它的作用
启用后,索引系统将:
- 使用 Tree-sitter 解析您的代码,以识别语义块(函数、类、方法)
- 使用 AI 模型创建每个代码块的嵌入
- 将向量存储在 Qdrant 数据库中,以实现快速相似性搜索
- 为 Roo 提供
codebase_search工具,以进行智能代码发现
这使得 “用户身份验证逻辑” 或 “数据库连接处理” 等自然语言查询能够找到您整个项目中的相关代码。
快速入门指南
💰 完全免费的设置
您可以通过以下方式零成本设置代码库索引:
您可以通过以下方式零成本设置代码库索引:
- Qdrant Cloud(免费层)或 Docker Qdrant(完全免费)
- Google Gemini(目前免费)
第 1 步:选择您的设置
在启用代码库索引之前,您需要两个组件:
- 嵌入提供商 - 将代码转换为可搜索的向量
- 向量数据库 - 存储和搜索这些向量
第 2 步:设置 Qdrant(向量数据库)
选项 A:云设置(推荐入门)- 免费
- 在 Qdrant Cloud 注册(提供免费层)
- 创建一个集群
- 复制您的 URL 和 API 密钥
选项 B:本地设置 - 免费
使用 Docker:
docker run -p 6333:6333 qdrant/qdrant
使用 Docker Compose:
version: '3.8'
services:
qdrant:
image: qdrant/qdrant
ports:
- "6333:6333"
volumes:
- qdrant_storage:/qdrant/storage
volumes:
qdrant_storage:
第 3 步:设置嵌入提供商
Google Gemini 设置(推荐)- 免费
- 从 Google AI Studio 获取 API 密钥(目前免费)
- 在 Roo Code 设置中:
- 提供商:Google Gemini
- API 密钥:您的 Google AI Studio 密钥
其他可用提供商
虽然本指南重点介绍 Google Gemini,因为它目前是免费的,但 Roo Code 还支持 OpenAI、Ollama 和兼容 OpenAI 的提供商。您可以在配置下拉菜单中探索这些选项。
虽然本指南重点介绍 Google Gemini,因为它目前是免费的,但 Roo Code 还支持 OpenAI、Ollama 和兼容 OpenAI 的提供商。您可以在配置下拉菜单中探索这些选项。
第 4 步:保存
- 点击“保存并开始索引”
状态指示器将显示:
- 黄色(正在索引):正在处理文件
- 绿色(已索引):已准备好进行搜索
- 红色(错误):检查故障排除部分
管理和配置索引器
您可以直接从 Roo Code 聊天界面监控状态和管理代码库索引器的所有配置。
状态图标
在聊天输入的右下角,您会找到代码库索引状态图标。此图标可让您快速、一目了然地了解索引器的当前状态。
图标的颜色表示状态:
- 🟢 绿色:已索引。索引是最新的,已准备好进行搜索。
- 🟡 黄色:正在索引。系统正在主动处理文件。仍然可以执行搜索,但结果可能不完整。
- 🔴 红色:错误。发生了问题(例如,未能连接到 Qdrant 或嵌入提供商)。请参阅故障排除部分寻求帮助。
- ⚪ 灰色:待机。索引器正在等待配置或已被禁用。
多文件夹工作区:在多文件夹工作区中,每个文件夹都有自己的索引状态和配置。状态图标反映了所有工作区文件夹的组合状态。
配置弹出窗口
点击状态图标会打开主配置弹出窗口。在这里,您可以查看详细状态并管理所有设置。
- 状态:一条详细消息,显示当前状态,例如“已索引 - 文件监视器已启动”或正在进行的扫描进度。
- 设置:包含用于连接到嵌入提供商和向量数据库的主要字段。
- 高级配置:允许您微调搜索参数,如相似性阈值。
- 清除索引数据:删除 Qdrant 集合中的所有数据并清除本地文件缓存。当您想从头开始重新索引整个项目时,请使用此选项。此操作无法撤消。
- 保存:应用您的配置更改。如果更改了关键设置(例如 API 密钥或模型),索引器将自动重新启动。
详细配置字段
本指南解释了配置弹出窗口中可用的每个设置。
设置字段
- 嵌入提供商
- 目的:选择用于生成 AI 嵌入的源。
- 行为:此下拉菜单决定显示哪些配置字段。您的选项是 OpenAI、Google Gemini、Ollama 和 OpenAI 兼容。
- API 密钥(适用于 OpenAI、Gemini、OpenAI 兼容)
- 目的:用于与您选择的提供商进行身份验证的密钥。
- 行为:此输入字段是所有基于云的提供商的必需字段,并安全地存储在您的 VS Code 密钥存储中。
- 基本 URL(适用于 Ollama、OpenAI 兼容)
- 目的:用于连接到提供商 API 的端点。
- 行为:对于 Ollama,这通常是
http://localhost:11434。对于 Azure 等兼容 OpenAI 的提供商,这是完整的部署 URL。
- 模型
- 目的:选择您想要使用的特定嵌入模型。
- 行为:可用模型的列表根据所选提供商而变化。将显示模型的向量维度(例如,1536 维),因为更改维度需要完全重新索引。
- Qdrant URL
- 目的:您的 Qdrant 向量数据库的连接端点。
- 行为:这必须是指向您的本地或云端 Qdrant 实例的有效 URL(例如,
http://localhost:6333)。
- Qdrant API 密钥
- 目的:用于安全 Qdrant 实例的身份验证密钥。
- 行为:此字段是可选的,仅当您的 Qdrant 部署需要 API 密钥时才应使用。
高级配置字段
- 搜索得分阈值
- 目的:控制将代码片段视为匹配所需的最小相似性得分。
- 行为:使用滑块设置介于 0.0 和 1.0 之间的值。较低的值返回更多(但可能不那么相关)的结果,而较高的值返回更少、更精确的结果。
- 推荐设置:
- 低 (0.15-0.3):更广泛的结果,适合探索
- 中 (0.4-0.5):平衡的精确度和召回率(默认值:0.4)
- 高 (0.6-0.8):仅精确匹配
- 最大搜索结果数
- 目的:设置单个
codebase_search返回的代码片段的最大数量。 - 行为:使用滑块调整限制。这有助于控制提供给 AI 的上下文量。
- 目的:设置单个
主要优势
- 语义搜索:通过含义而不是仅通过关键字查找代码
- 增强的 AI 理解:Roo 可以更好地理解您的代码库并与之协同工作
- 跨项目发现:搜索所有文件,而不仅仅是打开的文件
- 模式识别:定位相似的实现和代码模式
文件处理方式
智能代码解析
系统使用复杂的解析策略:
- Tree-sitter 优先:对于支持的语言,它使用 AST 解析来识别语义代码块(函数、类、方法)
- Markdown 支持:通过将标题视为语义入口点来索引 Markdown 文件
- 智能回退:对于不支持的文件类型,它回退到基于行的分块
块大小:
- 最小:100 个字符
- 最大:1,000 个字符
- 大型函数在逻辑边界处进行智能分割
文件过滤
索引器尊重您项目的忽略模式:
- 与
.gitignore模式匹配的文件 - 与
.rooignore模式匹配的文件 - 二进制文件和图像
- 大于 1MB 的文件
重要提示:请确保您的 .gitignore 包含常见的依赖文件夹,如 node_modules、vendor、target 等,因为系统完全依赖这些模式进行过滤。
增量更新
- 文件监视:实时监控您的工作区中的更改
- 智能更新:仅重新处理修改过的文件
- 分支感知:自动处理 Git 分支切换
- 基于哈希的缓存:避免重新处理未更改的内容
- 多文件夹工作区:多文件夹工作区中的每个文件夹都维护自己的索引,具有独立的设置和状态
最佳实践
编写有效的查询
不要搜索精确的语法:
- ❌
const getUser - ✅
从数据库中获取用户的函数
使用自然语言描述:
- “身份验证中间件”
- “API 请求的错误处理”
- “数据库连接设置”
安全注意事项
- API 密钥:安全地存储在 VS Code 的加密存储中
- 代码隐私:仅发送小代码片段进行嵌入
- 本地处理:所有解析都在本地进行
- 访问控制:尊重文件权限和忽略模式
故障排除
连接问题
“与 Qdrant 的连接失败”
- 确保 Qdrant 正在运行(使用
docker ps进行检查) - 验证 URL 是否匹配(默认:
http://localhost:6333) - 检查防火墙/网络策略
- 对于云实例,确认 URL 和 API 密钥
“无效的 API 密钥”或“401 未授权”
- 仔细检查您的 API 密钥是否正确
- 确保密钥具有必要的权限
- 对于 Ollama,验证服务是否正在运行
模型问题
“未找到模型”
- 对于 Google Gemini:确保模型名称正确(例如,
text-embedding-004) - 对于其他提供商:查阅他们的文档以获取可用模型和正确的命名
索引问题
“卡在错误状态”
- 首先检查连接问题
- 点击设置中的“清除索引并重新索引”
- 这可以解决损坏的缓存或集合问题
“索引花费太长时间”
- 对于大型代码库(10k+ 文件)来说是正常的
- 检查
.gitignore是否包含大型目录 - 考虑将模式添加到
.rooignore
使用搜索功能
一旦索引完成,Roo 就可以使用 codebase_search 工具:
自然语言查询示例:
- “如何处理用户身份验证?”
- “数据库连接设置”
- “错误处理模式”
- “API 端点定义”
- “组件状态管理”
该工具提供:
- 相关的代码片段
- 带有行号的文件路径
- 相似性得分
- 直接导航链接
隐私与数据安全
您的代码保持私有:
- 仅发送小代码块(100-1000 个字符)进行嵌入
- 嵌入是单向数学表示
- 本地解析意味着完整文件永远不会离开您的机器
- 使用 Ollama 可实现完全离线操作
数据存储:
- 向量存储在您选择的 Qdrant 实例中
- 您控制数据存储位置(本地/云)
- 易于删除:只需清除索引即可
当前限制
- 文件大小:每个文件最大 1MB
- 外部依赖:需要嵌入提供商 + Qdrant
- 语言支持:使用 Tree-sitter 支持的语言可获得最佳结果
未来增强
计划的改进:
- 更多嵌入提供商
- 多工作区索引
- 增强的过滤选项
- 团队协作功能
- VS Code 本机搜索集成
- 增量重新索引优化