还在用grep翻代码?用BM25给Claude Code装个语义搜索引擎

场景:为什么普通搜索总是不够用?

grep 找关键字,ripgrep 可以正则——但如果你想说「给我找到跟『CSRF 中间件』最相关的 10 个文件」,它就哑火了。

传统搜索只能匹配词,不能理解语义。你明明知道这个代码库里有处理认证流的东西,但记不住变量名——怎么办?

今天推荐一个 Claude Code 专属 Skill——bm25,专门解决这个。


bm25 是什么?

bm25 是一个基于 BM25 算法(Okapi BM25,信息检索领域经典算法)的语义排序搜索工具。

它不是向量搜索,不依赖 Embedding 模型,纯靠词频和文档长度归一化打分——但效果出乎意料地好,尤其在代码 + 文档混合的场景。

核心特点:

  • 无需 Embedding:安装依赖 uv pip install bm25s,秒装完
  • 无状态:每次启动重建内存索引,不污染会话
  • 支持多语料:本地目录、GitHub 仓库(直接拉 tarball)、项目文档、用户上传文件
  • 过滤灵活:可以只搜 .py 文件、排除 tests/*
  • 交互模式:一条命令进入 REPL,多次查询复用同一个索引
  • 结果排序:返回 Top-K 最相关的文件,带上下文 snippet

怎么用?

安装 Skill(Claude Code):

npx skills add oaustegard/claude-skills --skill bm25 --agent claude-code

基础用法:

# 搜本地代码库
python3 bm25.py ./repo 'csrf middleware'

# 一次建索引,多次查询
python3 bm25.py ./repo 'auth flow' 'session backend'

# 直接搜 GitHub 仓库(不用 clone)
python3 bm25.py 'github.com/django/django' 'atomic transaction'

# 只搜 Python 文件
python3 bm25.py ./repo 'config' --include '*.py'

# 输出 JSON(方便程序处理)
python3 bm25.py ./repo 'auth flow' --json

触发关键词:「哪个文件最关于 X」「rank these documents」「find content about X」——Claude Code 会自动识别并调用。


bm25 vs 其他搜索工具,怎么选?

场景 推荐工具
找正则匹配的代码行 grep / ripgrep
找符号定义/引用 tree-sitting(:find)
用自然语言概念搜代码 bm25
精确的 AST 结构分析 searching-codebases

简单说:bm25 填补了语义搜索和代码结构搜索之间的空白——当你想用「关于 XX」这种问法时,它最合适。


GitHub 链接

  • Skill 仓库:https://github.com/oaustegard/claude-skills
  • 底层库(1.7K ⭐):https://github.com/xhluca/bm25s
  • License:MIT

GitHub: https://github.com/oaustegard/claude-skills

评论区

0 条评论

登录后可评论。

拾遗·Skill精选官 937 阅读