@dreb/语义搜索
有嵌入式排名和MCP服务器的语义编码库搜索引擎. 利用树套进行AST-感知分块和变压器嵌入模型提取和索引编码(全米-米尼LM-L6-v2),然后通过POEM对结果进行6-信号聚变排序.
所需资源
- 节点.js 26 LTS (单位:千美元)
^26.13.0)——使用内置node:sqlite模块
安装
npm install @dreb/semantic-search
克劳德代码插件
包船作为克洛德代码插件. 添加 dreb 市场并安装 :
/plugin marketplace add aebrer/dreb
/plugin install semantic-search@dreb
或来自CLI的会外:
claude plugin marketplace add aebrer/dreb
claude plugin install semantic-search@dreb
或者,在没有插件系统的情况下直接注册 MCP 服务器:
claude mcp add --transport stdio semantic-search -- npx @dreb/semantic-search semantic-search-mcp
对于本地开发的克隆回波:
claude --plugin-dir ./packages/semantic-search
MCP 服务器
包裹会暴露一个 search 工具在“示范背景协议”(stdio transport)之上。 该工具接受:
| 参数 | 需求 | 说明 |
|---|---|---|
query | 对 | 自然语言、标识符或路径查询 |
searchDir | 对 | 索引和搜索目录——每个独特的值都获得自己的独立索引 |
restrictToDir | 没有 | 过滤结果到已建索引中此路径下的文件( 不影响索引编制) |
limit | 没有 | 返回的最大结果( 默认: 20) |
rebuild | 没有 | 强制重建干净的索引( 默认: 假) |
单独启动服务器 :
npx @dreb/semantic-search semantic-search-mcp
排名如何运作
6个独立信号使用 邮政 (Pareto-Optimal 嵌入式建模)每个查询类型变化的权重:
| 信号 | 说明 |
|---|---|
| BM25型导弹 | 通过 FTS5 全文搜索进行关键字匹配 |
| 余弦相近性 | 使用全MiniLM-L6-v2嵌入基于语义的相似性 |
| 路径匹配 | 查询文件路径中的术语 |
| 符号匹配 | 查询匹配函数、类或类型名称的术语 |
| 导入图 | 接近导入/ 依赖图中高分文件 |
| Git 惯性 | 最近修改的文件排名更高 |
查询自动分类为 标识符, (中文(简体) ), 自然语言,或 路径 查询,每个类型应用不同的POEM列加权. POEM在所有信号维面上构建出一个Pareto前方并基于支配地位深度分配等级——不需要手动重心调制. 见 平面嵌入式建模 为理论基础.
图书馆 API
import { SearchEngine } from "@dreb/semantic-search";
const engine = new SearchEngine("/path/to/project", {
indexDir: "/custom/index/path", // default: <projectRoot>/.search-index
globalMemoryDir: "~/.dreb/memory", // additional directory to index
modelCacheDir: "~/.cache/models", // default: ~/.cache/semantic-search/models
visibleDirs: (root) => [`${root}/.special`], // extra dirs (bypasses .gitignore)
});
// First call builds the index (10-60s); subsequent calls are fast
const results = await engine.search("where is auth handled", {
limit: 20,
pathFilter: "src/",
onProgress: (phase, current, total) => console.log(`${phase}: ${current}/${total}`),
});
const stats = engine.getStats(); // { files, chunks } | null
await engine.resetIndex(); // delete index, next search rebuilds
await engine.close(); // dispose resources
SearchEngine.isAvailable(); // check for node:sqlite
何为索引
- 代码 ——树保姆AST块(功能,类,方法,界面等). TypeScript, JavaScript, Python, Go, Rust, Java, C, C++, GDScript. 星洲网.
- 文本 - Markdown(按标题)、YAML/TOML(按键)、JSON、简写(按段落)。 还索引了戈多特场景(
.tscn资源(.tres)和项目(.godot)文件为平正文本. - 额外目录 通过
globalMemoryDir或者说visibleDirs,即使被扫描.
索引存储于 .search-index/search.db 项目根( 添加 .search-index/ 改为 .gitignore) (中文(简体) ).
许可证
麻省理工学院