semble_rs
用 BM25 + 轻量语义向量混合检索,为 AI 编程 Agent 提供极速、低 token 消耗的
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用 BM25 + 轻量语义向量混合检索,为 AI 编程 Agent 提供极速、低 token 消耗的
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一个场景:Claude Code 或 Cursor 正在帮你开发一个大型 Node.js 后端项目,代码库有 3000 多个文件。你对它说:「帮我看看登录模块是怎么实现的。」
传统方案中,Agent 可能会先用 grep -r "login" 搜索,然后 cat 打开整个文件——结果光文件列表就消耗了 8 万 token,真正的代码还没开始看,预算就已经烧掉了三分之一。
semble_rs 就是来解决这个问题的。它是一个 Rust 编写的代码搜索工具,专为 AI Agent 设计:给一段自然语言描述,它能精准返回 Agent 真正需要的代码片段,把 token 消耗降低 99%。

图1:semble_rs 作者 johunsang
大语言模型在编程辅助上已经非常强大,但当代码库规模超过一定量级时,Agent 面临的核心问题是信息过载。以一个有 1600 个文件的 Rust 项目为例:
ls -R 完整列出所有文件:约 40 万 tokensemble_rs tree 精简树形结构:533 token(747 倍压缩)grep 输出完整匹配行:可能 2 万 tokensemble_rs search --outline 结构化概览:节省 47%这个项目起源于 MinishLab/semble(Python 版),作者 johunsang 将其用 Rust 重写,获得了巨大的性能提升。Rust 版本的优势在于:零运行时依赖、零 API Key、单二进制文件、CPU 即可运行——这对于需要长期运行在远程开发环境中的 AI Agent 来说,是最佳选择。
semble_rs 的检索系统分为三个层次,协同工作以实现又快又准的搜索结果:
BM25 是信息检索领域的经典算法,在文本搜索中以高效的词项匹配著称。semble_rs 在此基础上针对代码做了专门优化——它对函数名、变量名、注释等不同文本区域赋予不同权重,使搜索「login」时能优先命中 loginWithEmail 这样的函数定义,而非仅仅出现在注释中的偶然匹配。
BM25 的优势是完全静态,无需加载机器学习模型,索引速度快得惊人——1600 个文件仅需约 10 秒建立索引。
Model2Vec 是一个轻量级静态嵌入模型(minishlab/potion-code-16M,约 60MB),它在查询时不需要运行 transformer 前向传播,因为所有代码文件的向量在索引时就预先计算好了。这是 semble_rs 与传统向量搜索方案的本质区别——速度提升 10 倍以上,同时保持了语义理解能力。
语义搜索使得「how is auth handled」这样的自然语言查询能够命中所有与认证相关的代码,无论代码中是否包含「auth」这个关键词。
两层检索结果通过 Reciprocal Rank Fusion(RRF) 算法融合,这是一种简单但效果稳定的排名聚合方法。融合后再经过一个精心设计的重排序阶段,应用以下策略进一步提升精度:
authorize 和 authentication 获得更高权重代码被解析成 AST(抽象语法树) 后按语义边界分块——函数体、类定义、结构体 impl 块各自成为独立 chunk。这比简单按行数切分更能保持语义完整性:搜索结果展示的是一个完整的函数,而不是被拦腰截断的半个函数体。
semble_rs 内置支持 20 种语言 的 Tree-sitter 解析器,包括 Rust、Python、JavaScript、TypeScript、Go、Java、C/C++、Kotlin、Ruby、PHP、Swift 等主流语言。
semble_rs search — 混合检索# 结构化概览(节省47% token)
semble_rs search "auth flow" . --outline -k 8
# 精准匹配
semble_rs search "loginWithEmail" . --compact -k 8
# 语义搜索(支持git URL远程仓库)
semble_rs search "save model" https://github.com/MinishLab/model2vec
推荐工作流:--outline(第一遍结构扫描)→ --compact(精确定位)→ --json --strip(如需代码体)。
semble_rs tree — 智能文件树替代 ls -R,自动应用 .gitignore 规则,大幅压缩文件树体积。配合 --symbols 标志还能同时输出符号(函数/类名)列表,让 Agent 对代码结构一目了然。
semble_rs digest — 构建日志压缩这是 semble_rs 最有特色的功能之一。当运行 cargo build、pytest、tsc --noEmit 等命令时,终端会输出大量进度信息,真正的错误只占很小比例。digest 命令智能分析日志格式,保留错误、警告、文件路径和堆栈跟踪,去掉所有进度条和重复信息。
作者实测:3MB 的 GitHub Actions 日志压缩到 35KB,节省 98.9%。这对于 AI Agent 读取 CI 失败信息来说意义重大——Agent 不再需要在大海般的绿色进度条中艰难寻找红色的错误信息。
semble_rs deps / impact — 依赖图分析deps 展示一个文件导入了哪些模块、被哪些模块使用;impact 则反向查询:修改某个文件会影响哪些其他文件。这对于大型重构和理解代码变更的影响范围极为有用。
semble_rs 的 Rust 源码组织非常清晰,核心模块包括:
| 模块 | 行数 | 职责 |
|---|---|---|
graph.rs | ~1500 | 依赖图构建与查询,最核心的模块 |
digest.rs | ~1000 | 构建/CI日志压缩逻辑 |
chunking.rs | ~460 | Tree-sitter AST分块 |
file_walker.rs | ~460 | gitignore感知文件遍历 |
plan.rs | ~440 | Agent计划生成(推荐搜索序列) |
ranking/boosting.rs | ~330 | 多维重排序加分策略 |
search.rs | ~240 | 混合检索入口 |
outline.rs | ~260 | outline模式输出格式化 |
总计约 5600 行 Rust 代码,不含测试和空行。整个项目通过 Cargo.toml 声明依赖,依赖栈非常干净:没有运行时 Python、没有重型 ML 框架,只有 tree-sitter-* 系列语法解析器和轻量的 model2vec-rs 向量库。
semble_rs 的部署极度简洁——一行 cargo install --path . 即可完成安装,最终产物是一个可独立分发的二进制文件,macOS/Linux/Windows 三平台通吃。
然而,它需要 Rust 工具链(Rust 1.75+),对于没有 Rust 环境的用户来说,编译时间可能成为一个小障碍(首次编译约需 2-3 分钟)。项目没有提供 Docker 镜像,也没有 Web UI——这是一款纯 CLI 工具,面向的是愿意配置开发环境的 AI Agent 用户群体。
硬件需求极低:512MB RAM、200MB 磁盘空间(不含嵌入模型约 60MB),完全不需要 GPU。
semble_rs 目前的局限值得注意:
1. 没有中文代码搜索优化。项目 README 有韩文翻译版(README.ko.md),说明作者面向的是韩语开发者群体,但中文代码的分词和嵌入效果未经过专项优化,在中文代码场景下的搜索精度可能不如英文。
2. 语义搜索依赖 Model2Vec。虽然这个模型非常轻量(约 60MB),但它仍是静态嵌入——代码语义完全由预训练决定,无法捕捉特定项目内部的领域术语。例如,在某个金融项目中,「头寸(position)」是一个核心概念,但 Model2Vec 的词汇表中可能根本没有这个词。
3. 许可证字段为空。项目 README 声称 MIT License,但 GitHub API 返回的 license 字段为 null,需要确认实际的许可证状态——如果是公共项目无 LICENSE 文件,潜在的法律风险需要注意。
4. 依赖图准确性有限。graph.rs 是最大的模块(1500 行),依赖图的构建依赖静态分析,对于动态 import(importlib.import_module、require(variable))和反射调用无法处理。
semble_rs 的出现代表了一个重要趋势:AI 编程 Agent 的工具链基础设施正在专业化。
过去一年,Cursor、Claude Code、GitHub Copilot 等 Agent 产品的能力快速提升,但它们在处理超大型代码库时的 token 效率问题始终存在。semble_rs 从底层重新思考了这个问题——不是让 Agent 更聪明地去读取大文件,而是让搜索工具更聪明地只返回 Agent 真正需要的片段。
从技术路线看,BM25 + 轻量静态嵌入的混合方案代表了一个务实的中庸之道:既保持了语义搜索的能力,又避免了重型 transformer 的延迟和内存开销。这种「恰到好处」的设计哲学,在端侧 AI 和高效 Agent 场景中有着广泛的参考价值。
semble_rs 是一个设计目标非常明确的项目——它不为人类开发者设计,而是为 AI Agent 优化。凭借 Rust 的性能和巧妙的检索算法,它在代码搜索这个细分场景中做到了极致的速度与 token 效率。依赖图、AST 分块、日志压缩等附加功能则进一步扩展了它的实用场景。
对于正在构建或使用 AI 编程 Agent 的团队,semble_rs 值得一试:它能直接降低 token 消耗,让 AI 更专注于真正有价值的编程工作。
一句话总结:给 AI 编程 Agent 用的极速代码搜索瑞士军刀,用 BM25 + 轻量语义向量混合检索,把大型代码库的 token 消耗降低 99%。