Context.dev 开源本地语义代码搜索 CLI「sgrep」
Context.dev 开源了 Rust 编写的本地语义代码/文档搜索 CLI「sgrep」,使用约 32MB 的本地 CPU 模型,首次搜索后完全离线,代码和查询不出本机。其流程为复用 ripgrep 枚举文件、用 Tree-sitter 与 Chonkie 做语法感知分块、采用 model2vec 风格静态嵌入(Potion Code 16M v2),再以 75% 语义加 25% BM25 混合评分。在 SWE-bench Verified(GPT-6,50 任务 × 2 次)上,管道模式的 sgrep 比 ripgrep 节省 21.3% 的 LLM API 开销,解题数 70/100 对 68/100;RepoQA 上领先,但 CoSQA 上弱于 CK 的语义模式。
。 1. 文件枚举:复用 ripgrep 列文件、遵守 .gitignore、跳过隐藏和二进制文件。不自己造轮子。 2. 语法感知分块:用 Tree-sitter + Chonkie 把代码切成约 2048 字符的段落(passage),保留完整行。Tree-sitter 支持 Python、C/C++、Go、Java、Rust、JS/JSX、TS/TSX;其他类型文件退化为纯文本切分。这意味着分块边界是语法单元(函数、类),不是任意字符位置;这直接决定了检索结果的可读性。 3. 静态嵌入(static embeddings):这是全项目最关键的技术决策。用的是 MinishLab 的 model2vec 风格静态模型: · Code 模型:Potion Code 16M v2(从 CodeRankEmbed 蒸馏,用代码/查询对训练),约 32–34MB · Text 模型:Potion Base 8M(自动模式下仅当所有候选段落都是纯文档时才启用) · 工作方式:每个 token 对应一个预学习的 256 维向量,查询时只需对 token 向量求平均并归一化,完全不做 transf
匹配字段正文