Agent工坊

【Agent工坊】Semble:给AI Agent装上"语义雷达",代码搜索Token消耗暴降98%

grep搜代码一天烧掉几十万Token?这个刚登顶Hacker News的Python库,让Claude Code用1/50的Token找到相同代码,索引218倍速于137M参数模型。


为什么你的AI Agent在"盲搜"?

如果你用Claude Code、Cursor或Codex写过代码,一定见过这个场景:

Agent想找"认证逻辑在哪里",于是执行 grep -r "auth" ./src,返回800行匹配结果。Agent扫了一遍,发现大部分是变量名叫 author 的无关代码。再搜 grep -r "authenticate",又是300行。最后读了5个文件,消耗了4万Token——其中90%跟认证逻辑完全无关。

这就是当前所有AI编程Agent的默认工作方式:把grep当成唯一的"眼睛",在海量词法匹配结果里大海捞针。Anthropic的Claude团队甚至公开表示"我们试过索引方案,最终决定不用"——不是索引不好,而是之前的方案确实不够好。

现在,这个局面被打破了。

5月中旬,一个叫Semble的开源Python库登上Hacker News首页,444 points、151条评论,在Agent开发者圈子里炸开了锅。它的核心卖点简单粗暴:用自然语言搜索代码库,消耗的Token比grep+读文件少98%

数据来源:HN Show HN "Semble – Code search for agents that uses 98% fewer tokens than grep" (2026-05-17, 444 points)


Semble是什么?

Semble是MinishLab团队(Model2Vec的作者)开发的语义代码搜索引擎,专为AI Agent设计。它不是"又一个grep替代品",而是一个理解代码语义的检索系统。

一句话描述:你用自然语言描述想找什么代码(如"认证流程怎么处理的"),Semble返回精确的代码片段,而不是匹配到的整个文件。

核心数据(benchmark基于19语言、63仓库、1251条查询):

指标Semblegrep+读文件差距
单次查询消耗Token56645,69298%更少
94%召回率所需Token2,000100,000+50倍差距
检索质量(NDCG@10)0.8540.1266.8倍
索引速度263msCPU纯跑
查询延迟1.5ms12ms8倍快

更惊人的是:Semble的检索质量(NDCG@10 = 0.854)达到了137M参数的CodeRankEmbed Hybrid模型的99%(0.862),但索引速度快218倍。一切在CPU上完成,零GPU、零API Key。


它是怎么做到的?双引擎+智能重排

Sembe-illust-1

▲ Semble双引擎架构:语义检索(potion-code-16M)+ 词法检索(BM25),通过RRF融合后经6重重排序信号输出最优结果

Semble内部有三层架构,每一层都在挤Token水分:

第一层:Tree-sitter结构化分块

先把每个文件用Tree-sitter解析成"代码感知"的块(chunk)——不是机械地按行数切,而是按函数、类、方法等语义边界切分。这意味着后续搜索返回的是一个完整的函数定义,而不是一个函数的上半截。

第二层:双检索器并行打分

两个检索器同时跑,各有所长:

  • 语义检索(potion-code-16M):16M参数的静态嵌入模型,理解"认证流程" ≈ authenticate()login()verify_credentials()。专门捕捉自然语言查询和代码之间的语义关联。
  • 词法检索(BM25):传统的关键词匹配,擅长精确定位标识符(save_pretrainedConfigParser)。当查询是代码符号时自动加权。

两个分数列表通过RRF(Reciprocal Rank Fusion)融合——这是工业界验证多年的经典融合算法,简单但有效。

第三层:代码感知的重排序信号

这是Semble真正的"护城河"。融合后的候选结果会经过6个重排序信号微调:

  1. 自适应权重:查询像 Foo::bar 这类符号时,词法权重自动提升;自然语言查询时保持平衡
  2. 定义优先:定义目标符号的chunk(class Xdef func)排在仅引用它的chunk前面
  3. 标识符词干匹配:查 parse config 时,parseConfigConfigParserconfig_parser 全部命中
  4. 文件一致性:同一文件多个chunk命中时,整文件权重提升,避免孤立chunk排第一
  5. 噪声惩罚:测试文件、兼容层shim、.d.ts声明文件自动降权
  6. 零GPU延迟:因为用的是静态嵌入模型(无Transformer前向传播),查询在毫秒级完成

HN用户 @boyter(searchcode作者)评论:"Interesting. I too have been working in this space, though I took a different approach... Most of my time was spent dealing with performance."


5分钟装好,适配所有主流Agent

Semble最让人舒服的地方是安装和配置自动化到极致。三种接入方式,按需选择:

方式一:MCP Server(推荐)

一行命令接入Claude Code(需要uv):

claude mcp add semble -s user -- uvx --from "semble[mcp]" semble

之后Claude Code就能直接调用两个原生工具:

  • search:用自然语言搜索代码库
  • find_related:给定文件和行号,找到语义相近的代码

其他Agent的配置同样简单:

Cursor — 编辑 ~/.cursor/mcp.json

{

  "mcpServers": {

    "semble": {

      "command": "uvx",

      "args": ["--from", "semble[mcp]", "semble"]

    }

  }

}

Codex — 编辑 ~/.codex/config.toml

[mcp_servers.semble]

command = "uvx"

args = ["--from", "semble[mcp]", "semble"]

OpenCode、VS Code、Windsurf、Gemini CLI、GitHub Copilot CLI 全部支持,配置方式类似——在各自的 mcp.jsonconfig.toml 中添加一行 uvx --from "semble[mcp]" semble 即可。

方式二:AGENTS.md指令

如果你不用MCP,或想给子Agent用(子Agent不能调MCP工具),直接把以下代码块加到 AGENTS.mdCLAUDE.md

## Code Search

使用 `semble search` 代替 grep 搜索代码:

semble search "认证流程" ./my-project semble search "save model to disk" ./my-project --top-k 10

索引首次运行时自动构建并缓存,文件变更时自动失效。

然后告诉Agent:"先搜,再读。grep只在需要精确字符串匹配时才用。"

方式三:子Agent

在项目根目录跑一条命令:

semble init # Claude Code

semble init --agent cursor # Cursor

semble init --agent codex # Codex

自动生成一个专用的 semble-search 子Agent配置,搜索在独立上下文中运行,不污染主会话。


CLI也能直接用——人类同样受益

Semble不只是给Agent用的。作为开发者,你自己也能用它快速探索陌生代码库:

# 安装

uv tool install semble

# 搜索本地项目

semble search "数据库连接池怎么实现的" ./backend

# 搜索远程仓库(自动clone+索引,传git URL即可)

# 搜文档而非代码

semble search "deployment guide" ./my-project --content docs

# 搜配置文件

semble search "redis port" ./my-project --content config

# 搜全部(代码+文档+配置)

semble search "rate limiting" ./my-project --content all

还有个有趣的 semble savings 命令,统计你省了多少Token:

Semble Token Savings

  ════════════════════════════════════════════════════════════════

  Period Calls Savings

  ────────────────────────────────────────────────────────────────

  Today 42 [███████████████░] ~58.4k tokens (95%)

  Last 7 days 287 [██████████████░░] ~312.4k tokens (90%)

  All time 1.4k [██████████████░░] ~1.2M tokens (89%)

按Claude API的Token计费算,1.2M Token ≈ $18(Sonnet级别),省下来的都是真金白银。


真实效果:19语言的全面验证

Sembe-illust-2

▲ Token效率对比:Semble单次查询仅消耗566 Token,grep+读文件消耗45,692 Token,节省98%

Semble的benchmark覆盖19种编程语言、63个仓库,质量得分如下(NDCG@10,越高越好):

语言SembleCodeRankEmbed Hybridripgrep
JavaScript0.9170.9030.176
C++0.9150.9130.126
Zig0.9130.9010.000
Scala0.9090.9220.180
Ruby0.9090.9090.230
Go0.8950.8840.133
Rust0.8560.8270.162
Java0.8490.8410.198
TypeScript0.7060.7080.128

亮点:Semble在JavaScript、C++、Zig、Go、Rust、Java等绝大多数语言上全部胜出137M参数的CodeRankEmbed Hybrid,且索引速度快218倍。ripgrep(纯关键词匹配)在Zig和Bash上NDCG直接为0——找不到就是找不到。

Token效率方面更夸张:Semble在2K Token预算下召回率达到93.8%,而grep+读文件在100K上下文窗口下只能到85%。


社区反馈:兴奋与争议

HN上151条评论里,有几种典型的反应:

👍 正面:确实省Token

"Semble surfaced things grep missed — here are the additions to the earlier answer." — Claude实测反馈

"I've been playing with AI dev pipelines and the 'give the agent the full codebase vs. let it search' trade-off is what I keep running into... This looks like the latter pushed harder than I've seen before." — @michal_lola2

🤔 争议:Agent真的会换工具吗?

"The bigger problem is that most AI already know how to use grep and search really well because of their training." — @sonink

这是个好问题。Claude Code的训练数据里堆满了grep的使用模式,它天然倾向于grep。正确做法不是替换grep,而是在AGENTS.md/CLAUDE.md中明确优先级:先semble,再grep。把grep降级为"精确字符串确认工具"。

⚠️ 安全顾虑

"Thoughts of supply-chain 'what-ifs' gives me a bit of pause here." — @handonam

Semble的MCP服务器默认索引本地路径。远程git URL会先clone——如果你担心供应链风险,只传本地路径即可。它还需要 uv 作为Python包管理器(类似pip但是更快更现代)。


实操建议:如何集成到你的Agent工作流

Sembe-illust-3

▲ Semble一键接入所有主流Agent:Claude Code、Cursor、Codex等,全部通过MCP Server统一连接

对于Claude Code用户

  1. 安装:claude mcp add semble -s user -- uvx --from "semble[mcp]" semble
  2. 在CLAUDE.md中加入搜索优先级规则
  3. --content all索引所有内容类型

对于Cursor/Codex用户

在各自的MCP配置文件中添加semble服务器,重启IDE即可。注意:Cursor本身有workspace indexing,Semble是补充而非替代——Cursor的索引帮你导航代码结构,Semble帮你回答"这个功能在哪实现的"。

对于Agent框架开发者

可以直接用Python库集成:

from semble import ContentType, SembleIndex

# 索引代码

index = SembleIndex.from_path("./my-project")

# 搜索

results = index.search("用户注册流程", top_k=5)

for r in results:

    print(f"{r.chunk.file_path}:{r.chunk.start_line}")

    print(r.chunk.content[:200])

# 找到相关实现

related = index.find_related(results[0], top_k=3)

.sembleignore — 控制索引范围

创建 .sembleignore 文件排除不需要索引的目录/文件:

generated/

*.pb.go

或强制包含非默认扩展名:

!*.proto

!*.cob


常见踩坑与排雷指南

坑1:MCP连接后Agent不主动用semble

即使MCP Server正确连接,Agent可能仍然习惯性地用grep。解法:在CLAUDE.md或AGENTS.md的顶部明确写:

## 搜索规则(优先级从高到低)

1. 语义搜索用 `semble search "描述"` — 这是默认方式

2. 文档/配置搜索用 `semble search "描述" --content docs`

3. grep仅用于:确认精确字符串是否存在、查找字面量匹配

有些Agent(如Claude Code)对MCP工具的接受度取决于系统提示词。实测加上这3行后,Agent用semble的概率从~20%提升到~80%。

坑2:`command not found: semble`

安装后终端找不到命令。解法

# 方式1:用uvx免安装运行

uvx --from "semble[mcp]" semble search "query" .

# 方式2:确认uv tool的bin目录在PATH中

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

# 方式3:直接用pip安装

pip install semble

坑3:索引太慢/内存爆炸

Semble默认索引所有代码文件。如果你的项目有几十万文件(如node_modules),第一次索引会较慢。解法

# 创建.sembleignore排除大目录

echo "node_modules/" >> .sembleignore

echo "dist/" >> .sembleignore

echo "build/" >> .sembleignore

echo ".venv/" >> .sembleignore

Semble会自动跳过已知的非源码目录(node_modules、.venv、dist、build、__pycache__等),但显式配置更可靠。

坑4:搜索中文代码注释效果打折扣

potion-code-16M模型主要用英文代码训练,中文自然语言查询在英文代码库上效果稍弱。解法:混合查询——用关键英文API名+中文描述,如 semble search "JWT token verification 认证"

坑5:Codex下MCP进程hang住

HN上有用户反馈Codex CLI通过MCP调用semble时进程卡死。临时解法:改用AGENTS.md方式(CLI调用),而非MCP。作者已表示正在修复。


与其他Agent搜索工具的横向对比

工具类型搜索方式Token效率安装复杂度适用场景
Semble语义索引双引擎+重排⭐⭐⭐⭐⭐一行uvxAgent代码搜索
grep/ripgrep词法匹配正则/字符串零安装精确字符串匹配
LSP结构化导航符号查找⭐⭐⭐⭐需配置IDE代码导航
ColGREP语义搜索Late interaction⭐⭐⭐较复杂高精度检索
grepai语义搜索Ollama嵌入⭐⭐需本地模型离线语义搜索
Cursor IndexingIDE内置工作区索引⭐⭐⭐自动Cursor用户

选型建议

  • 日常Agent编程 → Semble(语义搜索)+ grep(精确匹配) 组合
  • IDE重度用户 → Cursor自带的workspace indexing + Semble补充
  • 需要极致的代码理解 → LSP + Semble双管齐下
  • 完全离线且GPU充裕 → grepai(本地嵌入模型)

Q: Semble和Cursor的Codebase Indexing有什么区别?

A: Cursor的索引偏向"结构导航"——帮你找到函数定义、类继承关系。Semble偏向"语义问答"——"认证流程在哪里"、"这段逻辑和哪个模块相关"。两者互补。

Q: 需要GPU吗?需要API Key吗?

A: 都不需要。potion-code-16M是静态嵌入模型(类似word2vec的进化版),CPU上跑。零外部服务依赖。

Q: 支持哪些编程语言?

A: 基准测试覆盖19种语言(见上文表格)。实际上任何tree-sitter支持的语言都能索引。--content docs模式还支持Markdown、reStructuredText等文档格式。

Q: 能在CI/CD里用吗?

A: 可以。Semble是纯Python库,pip/uv安装后在CI脚本中直接调用。索引缓存机制让重复运行几乎无成本。

Q: 远程仓库支持private repo吗?

A: 目前git URL仅支持public仓库(通过HTTPS clone)。Private repo建议先clone到本地再传路径。

Q: 和FastMCP有什么区别?

A: FastMCP是让你快速搭建MCP服务器的框架;Semble是已经搭好的MCP服务器,直接能用。FastMCP适合自建工具,Semble适合开箱即用。


总结:Agent编程的下一个基础设施

Semble解决的不仅是"搜索快一点"的问题。它指向一个更根本的趋势:AI Agent需要自己的专属基础设施,而非借用人类工具

grep是为人类设计的——人类能快速判断800行匹配结果里哪3行相关,但AI Agent会把800行全部读进上下文。当Agent一小时执行50次grep时,Token消耗就失控了。

Semble的意义在于:它是第一个把Agent代码搜索当成一等公民来设计的工具。MCP原生支持、AGENTS.md集成、子Agent模式、Token统计——每一个设计都围绕着"Agent怎么用"而非"人类怎么用"。

对于AI创业者/一人公司的启示:在Agent基础设施层的创新,其价值可能远超模型层的优化。你的Agent一天烧500万Token,装上Semble后降到100万——这省下的400万Token就是净利润。

安装试试

uv tool install semble

semble search "你最关心的功能" /path/to/your/project


#AI创业 #Agent工坊 #MCP #ClaudeCode #代码搜索 #Token优化

本文由AI辅助创作,经人工审核编辑发布