RAG 通用检索
按 Ctrl+K,工作区的所有工作痕迹会汇聚到一个搜索框中。即使词语不完全一致也能按语义找到,嵌入全部在本地计算,因此代码不会外泄。
6 个检索来源
Section titled “6 个检索来源”| 来源 | 索引对象 | 示例问题 |
|---|---|---|
code | 文本·代码文件(40 多种扩展名) | “保存密码的函数” |
db | 表·视图·索引·触发器·例程定义 | ”汇总订单金额的视图” |
git | 提交消息·diff | ”上周修复编码 bug 的提交” |
chat | AI 聊天对话内容 | ”昨天问 AI 的部署方法” |
work_event | 面板活动记录(打开·编辑·执行查询等) | “最近打开过的迁移文件” |
doc | Markdown·文档文件 | ”API 认证流程文档” |
不仅是代码,连”上周那张表是怎么改的来着?”这样的作业脉络也能检索到。
混合检索引擎
Section titled “混合检索引擎”一个查询会分两路同时执行。
- 向量检索 —— sqlite-vec KNN。语义相近时即使词语不同也能找到。
- 关键词检索 —— FTS5 BM25。对精确的标识符·错误消息很有效。
将两路结果用 RRF(Reciprocal Rank Fusion)融合得出最终排名。一方遗漏的结果由另一方补足,因此比单一方式持续地得到更好的结果。deprecated / legacy / .bak 路径会被自动降权。
重排(opt-in)
Section titled “重排(opt-in)”若想进一步提升检索质量,可开启重排器。
- 用 cross-encoder 模型(
bge-reranker-base,含韩语的多语言)将前 40 个候选与查询 1:1 对照重新排序。 - 新鲜度权重 —— 对最近 30 天的结果加分,1 年以上的旧 chunk 衰减。
- 引用次数权重 —— 在 AI 回答中实际被引用的次数越高,越靠前。
懂代码的分块
Section titled “懂代码的分块”代码文件不会简单地每 N 行切一刀。通过 tree-sitter AST 解析在函数·类·方法边界处分块(默认 6 KB),使检索结果不是”函数的半截”,而是完整的语义单元。
| 支持语言 | 分块方式 |
|---|---|
| Python · JavaScript · TypeScript · TSX | tree-sitter AST |
| C# · Java · Go · Dart | tree-sitter AST |
| 其他语言 · 超大文件 | 按行安全回退 |
本地嵌入模型
Section titled “本地嵌入模型”嵌入模型基于 transformers.js,在应用内运行。无需 API 密钥,也无需网络传输。首次使用时只下载一次模型,此后即使离线也能工作。
| 模型 | 维度 | 大小 | 备注 |
|---|---|---|---|
multilingual-e5-small | 384 | 约 110 MB | 默认值,快 |
multilingual-e5-base | 768 | 约 280 MB | 推荐韩语 —— 检索质量明显提升 |
| MiniLM · bge 系列 | 384 | 90~130 MB | 面向英语为主项目的轻量版 |
embeddinggemma-300m | 768 | 约 600 MB | Beta |
-
按
Ctrl+K打开通用搜索框。 -
用自然语言输入。
保存 SSH 密码的部分上周修复的编码 bug给 orders 表添加 amount 列的提交 -
用来源过滤 chip(code · db · git · chat · work_event · doc)缩小范围。
-
点击结果卡片会展开内容,按 ▶ 按钮 会跳转到原始文件·位置。
与 AI 聊天的自动联动
Section titled “与 AI 聊天的自动联动”AI 聊天 会在用户发送消息前用 workspace_search 工具自动检索索引。它会将相关代码·过往对话·DB 架构作为上下文带入,提高回答的准确度。无需额外操作,被引用的文件会显示在回答下方的 “参考:” 区域。
- 检测到 文件保存 或 DB 架构变更 时,会在后台增量索引。
- 模式选择 —— 在聊天设置中从
eco/balanced/fast中选择,以调节 CPU 使用率与反映速度的平衡。 - 状态仪表盘 —— 在聊天设置 → RAG 索引状态 标签中实时查看各来源的 chunk 数和索引队列。
会自动尊重 .gitignore,以下路径默认排除。
node_modules/ .git/ dist/ build/若需额外排除,可在项目根的 .termeditignore 文件中写入(gitignore 语法)。DB 对象在 [db] 区段中用 glob 模式排除。
# .termeditignore 示例vendor/*.generated.tscoverage/
[db]*.tmp_*BACKUP_*保存模式后,已索引的对应 chunk 也会立即清理。
索引清理工具
Section titled “索引清理工具”旧工作区中索引臃肿时,请使用仪表盘的清理工具。
| 工具 | 作用 |
|---|---|
| Orphan Scan | 移除已删除文件的残留 chunk |
| Pattern Purge | 按路径模式(如 dist/**)批量移除 |
| Stale Cleanup | 整理长期未被引用的 chunk |
| 失败重试 | 重新处理索引失败的条目 |
索引存放位置 & 大小
Section titled “索引存放位置 & 大小”索引以各工作区的 SQLite 文件(workspace.sqlite)保存。移动工作区文件夹后会重新索引。
大小不会造成负担。以 1 万 chunk 计,向量数据约 15 MB。
搜索框打不开
→ 请使用 Ctrl+K。若输入焦点与其他快捷键冲突,请先点击一次空白区域再重试。
没有结果或结果异常
→ 首次运行后,在模型加载·下载完成前结果可能为空。请在索引状态仪表盘中查看进度。若噪声较多,请用 .termeditignore 排除不必要的路径。
总是出现旧结果 → 在索引状态标签 → 运行 Orphan Scan 或 Stale Cleanup。若刚更换模型,请等待重新索引完成。
更换嵌入模型后既有索引怎么办? → 更换模型后既有索引会自动删除并从头重新索引。视项目规模可能需要数分钟。
远程(SSH/SFTP)文件夹也会被索引吗?
→ 暂不支持。在远程项目文件夹中 RAG 代码检索会被禁用,AI 会用 file_list_dir + file_read 工具直接探索。
AI 回答中引用了错误的代码
→ 调整来源过滤,或用 .termeditignore 排除噪声文件,引用质量会改善。开启重排选项后,相关性低的 chunk 会被挤后。