Rust 写的 AI 代码搜索,快到你怀疑人生
📅 2026年05月19日 · 技术
Rust 写的 AI 代码搜索,快到你怀疑人生
在 AI 编程时代,一个普遍的痛点:AI Agent 读取代码库太慢、太贵。grep 不能理解语义,cat 会塞爆上下文窗口,ls -R 在稍大的项目中输出几万甚至几十万 token。有没有一种工具,既快、又准、还省 token?
有。semble_rs 就是答案。
安装:一条命令的事
git clone https://github.com/johunsang/semble_rs.git && cd semble_rs
cargo install --path .
编译后二进制文件位于 ~/.cargo/bin/semble_rs。首次运行时,默认嵌入模型 minishlab/potion-code-16M(约 60 MB)会从 HuggingFace 自动下载。
一句话用起来
# 用代码树代替 ls -R
semble_rs tree ./my-project --symbols
# 按语义搜索代码(代替 grep + cat)
semble_rs search "项目里怎么处理鉴权" ./my-project --outline
# 压缩构建输出后再喂给 AI
cargo build 2>&1 | semble_rs digest
gh run view <id> --log-failed | semble_rs digest
核心特性
🚀 极速索引
22 个文件的仓库约 150ms 完成索引,1600 个文件约 10 秒。静态嵌入器意味着查询时不需要跑 Transformer 前向传播——查询速度和本地一样快。
💰 Token 极致省
tree将ls -R的输出压缩 4倍到747倍--outline模式比完整输出节省 47% tokendigest在真实 GitHub Actions 日志上达到 -98.9% 的压缩率
🔍 混合检索
BM25 + Model2Vec 静态嵌入融合 RRF(倒数排序融合),再用定义/标识符-词干/文件一致性进行重排序,并加入噪声惩罚。既有关键词搜索的精确性,又有语义搜索的灵活性。
🔗 依赖图
deps / impact 命令显示文件导入和导出了什么,以及修改它会影响到哪些文件。可选的 Graphviz --dot 输出。
📦 构建/CI 压缩
digest 自动识别 cargo、pnpm/npm/yarn/bun、tsc、pytest、go test、gradle、ruff、mypy、clang/gcc/cmake/make/swiftc、GitHub Actions。错误、file:line:col、回溯、panic 堆栈和失败步骤体始终保留——只有进度行被压缩为计数。
搜索模式详解
semble_rs search "auth flow" ./my-project --outline # 第一遍:结构概览
semble_rs search "loginWithEmail" ./my-project --compact # 第二遍:匹配行
semble_rs search "save model" https://github.com/MinishLab/model2vec # 支持 git URL
输出模式
- --outline:每个代码块一个签名行,适合第一遍结构扫描(比 --compact 省 47% token)
- --group:目录分组 + 最多 3 行匹配(+N 溢出),匹配行多时适用
- --compact:分数 + 路径 + 每行匹配,基线模式
- --json --strip:代码块体(注释已剥离),适合管道/工具集成
- --json:原始代码块体
--outline 概览 → --compact 精确定位 → 仅在需要代码体时用 --json --strip
find-related:找相关代码
给定一个 file:line(来自之前的搜索结果),返回与该位置语义相似的代码块。
semble_rs find-related src/auth.rs 42 ./my-project
plan:AI 不知道从哪下手时
当 Agent 不知道从何开始时,plan 运行一个小搜索并打印推荐的命令序列:
semble_rs plan "修复登录页的 bug" ./my-project -k 5
代码树:告别 ls -R 的 Token 灾难
实测数据:
- 本仓库(Rust + target/):
semble_rs tree仅 533 B,而ls -R输出 398 KB,压缩 747× - 6693 文件的 Python 后端:3,950 B vs 254 KB,压缩 64×
- 325 文件的 ML 训练仓库:838 B vs 7.5 KB,压缩 9×
semble_rs tree # 当前目录
semble_rs tree -d # 仅目录
semble_rs tree --max-depth 2 # 限制深度
semble_rs tree --symbols # 每个文件附加顶层符号
semble_rs tree --lang rust,python # 按语言过滤
Digest:把 3MB 日志压成 35KB
实测数据(15 个真实夹具):
- cargo build(全新构建,218 个 crate):7,611 B → 59 B(-99.2%)
- cargo test(45 个通过):3,368 B → 369 B(-89.0%)
- pnpm install:1,323 B → 349 B(-73.6%)
- tsc(13 个错误):1,085 B → 648 B(-40.3%)
- GitHub Actions 日志(rust-lang/rust 失败 CI,真实):3.3 MB → 35 KB(-98.9%)
- 总计(15 个夹具):3.33 MB → 43 KB(-98.7%)
Agent 集成
将以下内容追加到项目根目录的 CLAUDE.md 或 AGENTS.md 中,即可在任何 AI Agent 中使用:
## Code search and exploration
Use `semble_rs` instead of `ls -R`, `grep`, `cat`:
semble_rs tree . --symbols # 代码库地图(极省 token)
semble_rs search "<feature or symbol>" . --outline # 第一遍
semble_rs search "<feature or symbol>" . --compact # 第二遍
semble_rs deps <file> . # 文件导入/定义
semble_rs impact <file> . # 修改影响哪些文件
Compress noisy command output before reading it:
cargo build 2>&1 | semble_rs digest
pnpm install 2>&1 | semble_rs digest
gh run view <id> --log-failed | semble_rs digest
semble_rs savings 查看过去搜索中节省的预估 token 数。
适用场景
- 大型代码库的日常开发,需要快速定位和理解代码
- AI 编程助手(Claude Code、Codex、Cursor 等)的代码搜索加速
- CI/CD 日志分析,快速定位构建/测试失败原因
- 代码审查中的依赖关系分析
- 跨语言代码库的语义搜索