内存搜索工具

Lean Memory 是一个为AI代理设计的设备内存搜索工具,支持快速关键词和语义搜索,特别适用于资源有限的环境。

  • by joinQuantish
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 joinQuantish/lean-memory

使用说明

精益记忆

针对AI代理的设备内存搜索,针对精益计算进行了优化。没有GPU。没有2GB型号下载。只需对您的markdown文件进行快速关键字和语义搜索。

叉子 QMD 由Tobi Lutke开发,针对无头服务器、VPS实例和无法在CPU上下载和运行三个GGUF模型的环境进行了重建。

发生了什么变化

QMD(上游) 精益记忆
嵌入 嵌入Gemma 300M GGUF(~30MB) BGE小型ONNX(~33MB)
重排序器 Qwen3重新分级0.6B GGUF(~640MB) 已删除
查询扩展 自定义微调1.7B GGUF(~1.1GB) 已删除
模型总重量 ~2.1GB ~33MB
搜索模式 关键字,语义,混合(扩展+重新排序) 关键字,语义
首次搜索 ~10s(模型加载+扩展+重新存储) ~0.6s
典型搜索 ~2-10秒 ~0.3-0.6秒
最小计算量 快速CPU+4GB RAM 任何CPU+512MB RAM

为什么

QMD专为配备M系列芯片和大量RAM的MacBook而设计。在每月5美元的VPS上,对每个搜索查询运行1.7B的参数模型进行查询扩展是不现实的。即使是0.6B的重新登录也会在CPU上为每个查询增加几秒钟的延迟。

精益记忆以混合流水线换取原始速度。我们使用 BGE-small-en-v1.5 (2023)用于嵌入,其在MTEB检索基准测试中的得分高于MiniLM模型(2022),并且通过CPU上的ONNX在每个嵌入中运行约4ms。

结果:搜索分数翻了一番(在我们的语料库上,平均值从39%上升到70%+),搜索时间从秒下降到亚秒,总下载量为33MB,而不是2.1GB。

快速开始

# Install
bun install -g github:joinQuantish/lean-memory

# Add your documents
qmd collection add ~/notes --name notes
qmd collection add ~/docs --name docs

# Build search index
qmd update && qmd embed

# Search
qmd search "API authentication"      # Fast keyword search (~30ms)
qmd vsearch "how does auth work"     # Semantic search (~600ms)

MCP 服务器

Lean Memory公开了一个MCP服务器,其中包含5个用于AI代理集成的工具:

工具 说明
search BM25关键字搜索(~30ms)
vector_search 语义向量搜索(~600ms)
get 按路径或docid检索文档
multi_get 按glob或list批量检索
status 索引健康和收集信息

克劳德代码

# Via plugin
claude plugin add lean-memory

或在 ~/.claude/settings.json:

{
  "mcpServers": {
    "memory": {
      "command": "qmd",
      "args": ["mcp"]
    }
  }
}

光标/风帆

{
  "mcpServers": {
    "memory": {
      "command": "qmd",
      "args": ["mcp"]
    }
  }
}

HTTP传输

对于共享的长期服务器:

qmd mcp --http                    # localhost:8181
qmd mcp --http --port 8080        # custom port
qmd mcp --http --daemon           # background, PID in ~/.cache/qmd/mcp.pid
qmd mcp stop                      # stop daemon

终点:

  • POST /mcp --MCP流式HTTP(JSON,无状态)
  • GET /health --活性检查

建筑

┌─────────────────────────────────────────────────┐
│              Lean Memory Pipeline                │
└─────────────────────────────────────────────────┘

                    ┌──────────┐
                    │  Query   │
                    └────┬─────┘
                         │
              ┌──────────┴──────────┐
              ▼                     ▼
     ┌────────────────┐    ┌────────────────┐
     │  BM25 (FTS5)   │    │  BGE-small     │
     │  Keyword match  │    │  ONNX embed    │
     │  ~30ms          │    │  ~4ms/embed    │
     └────────────────┘    └────────────────┘
              │                     │
              ▼                     ▼
     ┌────────────────┐    ┌────────────────┐
     │  SQLite FTS5   │    │  sqlite-vec    │
     │  inverted idx  │    │  cosine sim    │
     └────────────────┘    └────────────────┘

无查询扩展。没有重新登录。没有2GB的GGUF型号。只有两条快速搜索路径。

用法

集合

qmd collection add ~/notes --name notes
qmd collection add ~/docs --name docs --mask "**/*.md"
qmd collection list
qmd collection remove notes

上下文(元数据以获得更好的结果)

qmd context add qmd://notes "Personal notes and ideas"
qmd context add qmd://docs "API documentation"
qmd context list

索引

qmd update                # Index all collections
qmd update --pull         # Git pull first, then index
qmd embed                 # Generate vector embeddings
qmd embed -f              # Force re-embed everything

搜索

# Keyword search (BM25)
qmd search "authentication flow"
qmd search "API" -c notes              # Filter to collection
qmd search "API" -n 20 --min-score 0.3 # More results, with threshold

# Semantic search (vector)
qmd vsearch "how to login"
qmd vsearch "deployment process" -c docs

# Output formats
qmd search "API" --json       # JSON for agents
qmd search "API" --files      # File paths only
qmd search "API" --md         # Markdown

检索

qmd get "notes/meeting.md"       # By path
qmd get "#abc123"                 # By docid
qmd get "notes/meeting.md:50"    # Start at line 50
qmd multi-get "docs/*.md"        # Glob pattern
qmd multi-get "a.md, b.md"       # Comma-separated

需求

  • 包子 >=1.0.0(或Node.js>=22)
  • macOS: brew install sqlite (用于扩展支持)
  • 约33MB磁盘,适用于BGE小型ONNX型号(首次嵌入时自动下载)

数据存储

指标: ~/.cache/qmd/index.sqlite

collections     -- Indexed directories with name and glob patterns
path_contexts   -- Context descriptions by virtual path
documents       -- Markdown content with metadata and docid
documents_fts   -- FTS5 full-text index
content_vectors -- Embedding chunks (384-dim BGE-small vectors)
vectors_vec     -- sqlite-vec cosine similarity index

学分

建立在 QMD 通过 托比娃娃核心索引、分块、FTS5、sqlite-vec和MCP基础设施是他的工作。我们交换了嵌入模型,删除了繁重的GGUF管道,并针对无头计算进行了优化。

许可证

麻省理工学院