语义文件搜索工具

Rememex 是一个本地化的语义文件搜索工具,支持120多种文件类型的语义和关键字混合搜索,包括OCR图像处理、EXIF数据解析和AI代理集成。

  • by illegal-instruction-co
  • Rust
  • 本地部署
  • 72 星标
  • 更新于
在 GitHub 查看 illegal-instruction-co/rememex

使用说明

Rememex

a semantic upgrade to your file system. you type meaning, it finds files. nothing leaves your machine.

named after Vannevar Bush's Memex (1945), a vision of a device that stores and retrieves all human knowledge.


仅限windows 10+ 目前。使用UWP OCR和云母背景。


为什么选择rememex?

rememex ripgrep 一切 源码图 微软召回
搜索类型 语义+关键字混合 正则表达式/文字文本 文件名(内容通过 content:) 关键字+符号+语义 每5秒截图一次你的整个生活
理解意思 ✅ ❌ ❌ ✅ ✅ (它看到了一切。真的一切。)
本地和私人 ✅ 你机器上的一切✅ ✅ 云或自托管 “本地”(粉红色承诺)
文件类型 120+(代码、文档、图像、配置) 文本文件 所有文件(按名称索引) 代码仓库 您的屏幕。所有这些,总是。
图像OCR ✅ 内置 ❌ ❌ ❌ ✅ (它也会记录你的密码)
EXIF/GPS ✅ 城市名称的反向地理编码 ❌ ❌ ❌ 反正知道你在哪里
MCP服务器 ✅ 内置AI代理 ❌ ❌ ? 没有,但副驾驶看着你打字
价格 免费,开源 免费,开源 free 起价49美元/用户/月 免费*(*牺牲你的尊严)
氛围 查找您的意思 查找您键入的内容 查找文件名 enterprise™ 大哥作为功能

它做什么

  • 索引120多种文件类型(代码、文档、图像、配置等)
  • 通过windows内置引擎对图像进行OCR
  • 读取EXIF→ 将GPS反向地理编码为城市名称。搜索“伊斯坦布尔的照片”,它奏效了
  • EXIF日期→ 人类语言。《夏日早晨》找到了一张七月早上8点的照片
  • 混合搜索:矢量+全文+JINA交叉编码器重新排序器
  • 每种语言的智能组块(rust at fn/structpython在 def/class等)
  • 用于隔离(工作/个人/研究)的语义容器
  • 用于AI代理的MCP服务器。 详情→ · 代理人指示→
  • 注释:从UI或通过MCP将可搜索的注释附加到任何文件。代理和人类共享相同的知识层
  • 可选的云嵌入——插入OpenAI、Gemini、Cohere或任何兼容的API。默认值仍然是100%本地

建筑

索引

graph LR
    W[file watcher] -->|change event| SI[index single file]
    WB[WalkBuilder] -->|bulk scan| B[collect files]
    B --> C{image?}
    C -->|yes| D[UWP OCR + EXIF]
    C -->|no| E[file_io reader]
    D --> F[git context]
    E --> F
    F --> G["semantic chunking (per-language)"]
    G --> H[embedding provider]
    H -->|local ONNX or remote API| I[(lancedb)]
    I --> J[ANN + FTS index build]

搜索

graph LR
    Q[query] --> QR[query router]
    QR -->|weights + hyde flag| HYDE{hyde?}
    HYDE -->|conceptual| LLM[LLM hypothetical doc]
    HYDE -->|other| EMB[embed query]
    LLM --> EMB
    Q --> EXP[expand query variants]
    EMB --> VS[vector search]
    EXP --> FTS[full-text search]
    VS --> HM["hybrid merge (RRF)"]
    FTS --> HM
    EMB --> AS[annotation search]
    AS --> AM[merge annotations]
    HM --> AM
    AM --> RR[JINA reranker]
    RR --> SC[score normalization]
    SC --> MMR[MMR diversity]
    MMR --> R[ranked results]

    UI[tauri UI] --> Q
    MCP[MCP server] -->|stdio| Q

运行它

npm install
npm run tauri dev        # dev is slow
npm run tauri build      # release build, use this for real speed

Alt+Space 切换。配置和文档→ CONFIG.md

RAM使用率在初始索引期间达到峰值——这是意料之中的。一旦索引完成,它就会下降并保持稳定。


用真实数据试试

我们提供了一个测试数据集,这样你就可以看到语义搜索的实际感觉。2483份简历PDF,涵盖24个专业,会计师到教师。

# unzip test-set/data.zip somewhere
# create a new container in rememex, point it at the unzipped folder
# wait for indexing (~30 min on local embeddings)

我们将其编入索引并运行这些查询。以下所有结果均使用 最基本的配置 --没有云API,没有微调:

设置 值
嵌入模型 多语言E5-Base(本地ONNX,~170MB)
重新登录 关闭
块大小 512个令牌,64个重叠
查询路由器 打开
MMR多样性 开启(约65%平衡)
海德 关闭
嵌入提供程序 本地-零API调用

真实结果,真实分数:

查询 最佳结果 评分 为什么有趣
“精通Python和机器学习的软件工程师” AGRICULTURE/62994611.pdf --Python、TensorFlow、Keras、Scikit-learn、Pandas 55.2 归入农业。rememex还是找到了
“有急诊室经验的护士” ADVOCATE/46772262.pdf --注册急诊护士、创伤护理专家 58.2 以ADVOCATE名义提交。错误的文件夹,正确的人
“会做意大利和法国菜的人” CHEF/10276858.pdf --意大利美食、精致餐饮、民族美食准备 34.7 查询说“法国人”也一样——排名第一的是意大利人,排名第三的是“法国美食天才”。它将比赛分为候选人
“具有销售领导力的MBA毕业生” DIGITAL-MEDIA/20330739.pdf --建立了2500万美元的销售团队,销售执行总监 55.5 MBA+销售,见DIGITAL-MEDIA文件夹。类别并不重要
“使用Photoshop和Illustrator的平面设计师” DESIGNER/29147100.pdf --Adobe Photoshop、Illustrator、InDesign、作品集链接 66.1 最高得分。精准技能匹配+投资组合
“使用AutoCAD和项目管理的土木工程师” CONSTRUCTION/32025286.pdf --AutoCAD Civil 3D,成本分析,完整项目管理员 59.4 施工管理员,不是“土木工程师”。含义>标题

要点:grep需要精确的关键字。rememex能够找到意义——即使单词不同,即使文件放在错误的文件夹中。


代理基准

相同的5个任务,相同的代码库。grep与rememex MCP:

task grep rememex
“查找GPS坐标成为城市名称的位置” grep“GPS”→ 0. grep“地理编码”→ 已找到文件,需要打开。 3个步骤 1步
“查找质量筛选器阈值” grep“阈值”→ 0 (代码说 >= 25.0). 失败 1步
“查找每个文件的最佳块的重复数据删除逻辑” grep“重复数据删除”→ 0. grep“最佳”→ 噪音。 3-5个步骤 1步
“查找配置迁移处理” grep“遗留”→ 错误的文件。 错误对策 1步
“查找嵌入批大小常量” grep“batch_size”→ 0 (it's EMBED_BATCH_SIZE). 失败 1步

grep需要精确的关键字。rememex需要这个想法。

使用rememex的代理预计将使用5-10倍的令牌,并显著加快完成任务的速度。更少的搜索尝试,更少的错误文件打开,更少的往返。上面的基准显示1步vs 3-5步,这既是速度也是成本。


项目结构

rememex/
├── src/                          # react/ts frontend
│   ├── components/               # UI components
│   │   ├── Sidebar.tsx           # sidebar: containers, annotations, filters
│   │   ├── SearchBar.tsx         # search input
│   │   ├── ResultsList.tsx       # virtualized search results
│   │   ├── StatusBar.tsx         # indexing status bar
│   │   ├── TitleBar.tsx          # custom window title bar
│   │   ├── Settings.tsx          # settings panel
│   │   └── settings/            # modular settings sub-panels
│   ├── locales/                  # i18n translations (en, tr)
│   ├── Modal.tsx                 # modal dialog component
│   ├── i18n.tsx                  # internationalization setup
│   ├── types.ts                  # shared TypeScript types
│   └── App.tsx                   # main app shell
├── src-tauri/
│   └── src/
│       ├── indexer/              # core engine
│       │   ├── mod.rs            # indexer orchestration, batch embed, reranker
│       │   ├── chunking.rs       # per-language semantic splitting
│       │   ├── embedding.rs      # fastembed ONNX inference
│       │   ├── embedding_provider.rs  # local/remote provider trait
│       │   ├── search.rs         # hybrid vector + full-text + reranker
│       │   ├── pipeline.rs       # search pipeline scoring
│       │   ├── annotations.rs    # annotation CRUD operations
│       │   ├── ocr.rs            # UWP OCR bridge
│       │   ├── file_io.rs        # file reading (text, pdf, binary)
│       │   ├── git.rs            # git log integration
│       │   └── db.rs             # lancedb operations
│       ├── bin/mcp.rs            # MCP server binary (stdio)
│       ├── commands.rs           # tauri IPC commands
│       ├── config.rs             # config loading / migration
│       ├── state.rs              # shared app state types
│       ├── watcher.rs            # notify-based file watcher
│       └── lib.rs                # app setup, tray, shortcuts
├── config.schema.json            # JSON schema for config validation
├── AGENT.md                      # agent instructions for MCP
├── MCP.md                        # MCP server documentation
├── CONFIG.md                     # configuration reference
└── ROADMAP.md                    # what's done, what's next

堆栈

锈(tauri 2)、反应/ts, 兰斯布多语言E5-Base,JINA Reranker v2,人造丝

路线图

ROADMAP.md

文档

doc 什么
CONFIG.md 配置参考、所有选项、文件类型、提供程序设置
MCP.md MCP服务器设置、工具参考、编辑器配置
AGENT.md 使用rememex作为工具的AI代理说明
最佳实践.md 充分利用rememex的技巧
贡献.md 如何贡献、错误报告、公关指南

明星历史

贡献者

许可证

麻省理工学院