MinishLab/semble

Fast and Accurate Code Search for Agents. Uses 99% fewer tokens than grep+read

Semble – 面向 AI 编码代理的快速、高 Token 效率代码搜索

是什么 – Semble 是一个 Python 库 / CLI / MCP 兼容服务器,让基于大语言模型的编码助手(Claude Code、Cursor、Codex、OpenCode 等)能够从代码库中精准检索所需代码片段。它相比简单的「grep + 读取完整文件」方法,节省约 99% 的 Token,同时检索质量与 1.37 亿参数的专用代码 Transformer 模型相当。

为何重要 – 代理经常需要探索陌生的代码库。将整个文件拉入模型上下文成本高且缓慢。Semble 在约 0.5 秒内完成代码库索引,CPU 上自然语言查询响应时间约 1 毫秒,使代理能立即获取相关代码片段,无需任何 API 密钥、GPU 或外部服务。


主要特性

  • 速度 – 平均代码库索引时间约 500 毫秒;查询延迟约 1 毫秒(仅 CPU)。相比同类 Transformer 基础检索器,索引速度提升 340 倍,查询速度提升 17 倍。
  • 准确性 – 在作者的基准测试中,NDCG@10 = 0.854,与 1.37 亿参数模型性能相当。
  • Token 效率 – 仅返回所需代码片段,相比读取完整文件节省约 99% 的 Token。
  • 零配置 – 无需 GPU,无需 API 密钥,仅需 pip/uv 安装即可使用。
  • MCP 服务器 – 作为原生工具暴露 searchfind_related,供任何 MCP 兼容代理调用。
  • 本地与远程仓库 – 支持文件系统路径或 Git URL。
  • 细粒度控制 – 通过 .gitignore 和专用的 .sembleignore 文件,可选择性包含或排除文件和扩展名。
  • 缓存与统计 – 索引和 Token 节省统计信息被缓存;semble savings 可查看已避免的 Token 数量。

快速开始(CLI)

# 安装工具(需 uv)
uv tool install semble
semble install          # 交互式安装 – 选择代理和集成类型

# 在本地仓库中进行基本搜索
semble search "authentication flow" ./my-project

# 搜索远程仓库(按需克隆)
semble search "save model to disk" https://github.com/MinishLab/model2vec

# 限制结果数量、仅显示少量代码行,或搜索文档/配置
semble search "deployment guide" ./my-project --content docs --top-k 5 --max-snippet-lines 10

使用 semble uninstall 移除集成,或 semble clear ... 清除缓存。


作为 Python 库使用

from semble import ContentType, SembleIndex

# 构建索引(首次使用时缓存)
idx = SembleIndex.from_path("./my-project", content=ContentType.CODE)
# 或包含文档/配置
# idx = SembleIndex.from_path("./my-project", content=[ContentType.CODE, ContentType.DOCS])

# 自然语言或代码查询
results = idx.search("save model to disk", top_k=3)
for r in results:
    print(r.chunk.file_path, r.chunk.start_line, r.chunk.content[:120])

# 查找与某位置相似的代码
related = idx.find_related(results[0], top_k=3)

该库适用于构建自定义工具,或直接嵌入到您自己的应用程序中。


MCP 服务器模式

作为 MCP 工具安装后,代理可调用:

工具 描述
search 在本地路径或 Git URL 的仓库上执行自然语言或代码查询。
find_related 给定文件路径和行号,返回语义上相似的代码块。
安装说明见 docs/installation.md#mcp-server

内部工作原理

  1. 分块 – 使用 tree-sitter 将文件分割为代码感知的代码块。
  2. 双检索器
    • Model2Vec 静态嵌入(potion-code-16M-v2)提供语义相似性。
    • BM25 提供对标识符和 API 名称的快速词法匹配。
  3. 融合 – 两个检索器的得分通过 Reciprocal Rank Fusion 进行融合。
  4. 重排序 – 采用自适应加权、定义优先级、标识符词干匹配、文件连贯性奖励和噪声惩罚,优化最终排序。
  5. 缓存 – 索引存储在磁盘上;文件变更时进行增量更新,避免完全重建。
  6. 模型灵活性 – 可通过设置 SEMBLE_MODEL_NAME 指向自定义 Model2Vec 模型。

所有操作在单个 CPU 核心上以毫秒级完成,因为嵌入模型是静态的(查询时无需 Transformer 前向传播)。


基准测试(报告结果)

  • 质量 – 在 63 个仓库、19 种语言上,NDCG@10 = 0.854,与 1.37 亿参数的 CodeRankEmbed 模型相当。
  • 速度 – 索引速度比 Transformer 基线快 340 倍,查询速度快 17 倍。
  • Token 节省 – 比 grep+read 基线节省约 99% 的 Token;在 2k Token 时系统达到 97% 召回率,而 grep+read 需要约 10 万 Token 才能达到 85% 召回率。 完整基准详情见 benchmarks/README.md

安装与缓存位置

  • 通过 uvuv tool install semble)或 pip install semble 安装。
  • 缓存目录默认为操作系统缓存位置(Linux 上为 ~/.cache/semble 等)。可通过 SEMBLE_CACHE_LOCATION 覆盖。
  • 模型文件缓存于标准 Hugging-Face 缓存目录(~/.cache/huggingface)。
  • 默认跳过大于 1 MiB 的文件;可通过 SEMBLE_MAX_FILE_BYTES 调整。

许可证与引用

  • 许可证:MIT(宽松,允许商业使用)。
  • 引用:学术用途请使用提供的 BibTeX 条目(Zenodo DOI 10.5281/zenodo.19785932)。

总结

Semble 为 AI 编码助手提供了一种本地化、快速且 Token 成本低廉的代码检索方式,彻底消除对昂贵 API 调用或大上下文窗口的需求。它开箱即用,支持 CLI、Python 库或 MCP 服务器模式,是任何基于 LLM 的开发工作流的实用补充。

相关

  • Dispatch
  • 项目
  • 项目
  • 项目