semble
AI编程Agent专用代码搜索引擎,用自然语言查找代码,token消耗比grep+read减少98%
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
AI编程Agent专用代码搜索引擎,用自然语言查找代码,token消耗比grep+read减少98%
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:一位刚刚入职的AI编程助手(Agent)被分配到一个陌生的代码仓库,里面有上万个文件、几百万行代码。传统做法是让Agent用grep搜索关键词,或者把整个文件读一遍——这就好比让你在一座没有导航的巨型图书馆里找一本书,要么凭关键词盲搜翻遍整排书架,要么把书架上的每一本书都拆开看。
Semble 正是为解决这个痛点而生。它为AI编程工具装上了一款"代码雷达"——用自然语言描述你想找什么,Semble就能在毫秒级时间内,从整个代码库中精准定位到最相关的代码片段,且只返回你需要的那几行,token消耗比传统方法节省约98%。
大模型(LLM)编程工具近年来快速普及,Claude Code、Cursor、Codex、OpenCode等代表产品已深度融入开发工作流。然而,当这些Agent进入一个陌生代码库时,普遍面临一个根本性挑战:代码搜索效率极低。
传统路径依赖两种手段:grep做关键词匹配(无法理解语义),或者把整个文件读进上下文(token开销巨大)。对于大型项目,单次文件读取可能消耗数十K的token,若Agent需要反复探索,token消耗很快失控。这不仅带来经济成本,更严重的是上下文窗口被无用信息填满,导致模型"迷路"——返回的代码和真正需求南辕北辙。
这个问题的本质是语义搜索的需求:开发者往往用自然语言描述意图(如"认证流程在哪里"),而不是精确的函数名或变量名。传统文本检索无法满足这一需求,而大模型语义检索又太贵太慢。
Semble背后的MinishLab团队(包括Thomas van Dongen和Stéphan Tulkens)决定做一款专门为Agent设计的代码搜索工具:极快、极准、极省token。
Semble的技术方案巧妙地平衡了速度与质量。它没有使用昂贵的Transformer前向传播,而是结合了三种技术:
第一步:代码感知分块(Code-Aware Chunking) Semble使用tree-sitter对源代码进行语法级别的解析,将每个文件切分为语义完整的代码块(chunk)。这比简单的固定长度分块更智能——函数、类、方法的边界被准确识别,每个chunk都是有意义的代码单元。
第二步:双路检索融合 两套检索器并行运行:
两路结果通过**Reciprocal Rank Fusion(RRF)**融合为统一排序列表。
第三步:代码感知重排序(Re-ranking) 融合结果还会经过一轮精细的重排序,使用的信号包括:
getUserById)加大BM25权重,自然语言查询平衡两个检索器的贡献class、def、func等定义的代码块优先于仅引用的代码块parseConfig、ConfigParser).d.ts声明文件会被降权
图1:Semble在NDCG@10质量上达到CodeRankEmbed Hybrid的99%,同时索引速度快218倍。
图2:Semble平均节省98%的token,在仅2K token时达到94%召回率,而grep+read需要100K上下文才能达到85%。
Semble提供了三种互补的集成路径,适用于不同的使用场景:
Model Context Protocol(MCP)是AI Agent的工具调用标准协议。Semble作为MCP服务器运行,可以原生接入Claude Code、Cursor、Codex、OpenCode、VS Code等主流AI编程工具。以Claude Code为例,只需一行命令:
claude mcp add semble -s user -- uvx --from "semble[mcp]" semble
MCP模式下,仓库会被按需克隆和索引,索引结果持久化到OS缓存目录,文件变更由watcher自动监听并重建索引,整个过程对Agent透明。
在没有MCP支持的老版本工具中,可以将Semble的使用说明写入AGENTS.md或CLAUDE.md。Semble官方维护了AGENTS.md标准片段,支持Claude Code、Copilot CLI、Kiro等工具。Agent在每次会话开始时读取这些文件,知道何时调用seemble search替代grep。
对于脚本场景或自定义工具构建,Semble提供了完整的Python API:
from semble import ContentType, SembleIndex
index = SembleIndex.from_path("./my-project")
results = index.search("authentication flow", top_k=3)
CLI则适合管道集成或快速调试:semble search "save model" ./repo
在MinishLab的基准测试中,使用约1,250个查询跨越63个代码库、19种编程语言:
关键在于无Transformer推理:Model2Vec的embedding是静态的,查询时只是简单的向量相似度计算和BM25查表,不涉及任何GPU计算。这使得整个系统在普通开发机上即可流畅运行。
Semble对运行环境的要求极低:
uv tool install semble即可完成安装唯一的依赖是Python >= 3.10。默认情况下只索引代码文件(通过tree-sitter解析),也可以选择索引文档(markdown/rst)或配置文件(yaml/toml)。
尽管Semble表现出色,但仍有一些局限值得关注:
Embedding模型是静态的:这既是优势(快),也是劣势。模型无法在运行时学习项目特定的语义——如果团队有大量内部术语或领域特定缩写,Model2Vec可能无法充分理解。potion-code-16M是一个通用代码Embedding,在垂直领域的表现可能不如微调模型。
对复杂多跳推理场景的支持有限:Semble擅长单轮精确搜索,但当Agent需要"先找A→理解A→再找B→综合A和B"这种多轮推理时,单次搜索无法覆盖全流程,仍需Agent自行管理中间状态。
MCP生态锁定:深度使用需要支持MCP协议的工具。如果你的工作流重度依赖不支持MCP的老牌工具(部分本地模型推理框架),Semble的价值会打折扣。
中文代码库支持待验证:potion-code-16M基于英文代码训练,虽然tree-sitter支持中文标识符,但语义理解效果在纯中文代码库上的表现尚未有公开基准数据。
Semble的出现反映了一个趋势:AI编程工具正在从粗暴的上下文填充,向精准的信息检索演进。
过去一年,行业普遍做法是扩大上下文窗口——从8K到128K再到1M token,让模型能"读完"更多代码。但这个方向有明显的边际递减:代码库越大,消耗的token越多,而模型对长上下文的注意力分散问题也越严重。
Semble代表了一条更聪明的路:在模型看到代码之前,先用检索系统把无关内容过滤掉。这本质上是一种"先检索后推理"的架构,和RAG(检索增强生成)在LLM应用中的思路一脉相承,只是这次的应用对象是AI编程Agent。
MinishLab同时开源的potion-code-16M模型也是一个重要贡献:它证明了代码专用的小模型(16M参数)在检索任务上可以媲美百倍参数规模的大模型,这对资源受限场景有重要参考价值。
如果这个方向持续发展,未来AI编程工具的标准工作流可能是:MCP检索 → 精准上下文组装 → 推理生成,而Semble正是这条流水线上的关键一环。