使用说明
RecallForge
每种模式,一次搜索。本地优先。
标准RAG仅适用于文本。拖放一个包含图表、白板照片、视频记录或转录支持的音频笔记的PDF——你的AI代理就会失明。RecallForge为代理商提供 密切关注本地文件系统。文本、图像、文档、视频和音频转录都存在于一个统一的搜索空间中,任何内容都不会离开您的机器。
这能带来什么
你: “上次会议的白板是什么样子的?”
克劳德: (搜索您的本地
~/Documents,从iPhone中查找白板的照片,通过Qwen3 VL读取笔迹,并显示带有上下文的图像。)
你: “从我上周下载的PDF中找到架构图。”
克劳德: (对PDF进行索引,将您的查询与提取的文本和嵌入的图形进行匹配,返回相关页面。)
你: (掉落电路板的图像) “查找我与此相关的笔记。”
克劳德: (在索引笔记中反向图像到文本搜索。返回匹配的文档。)
一个查询。任何形式。都是当地人。
是什么让RecallForge与众不同
| 能力 | RecallForge | Chroma | Mem0 | Qdrant | 编织 |
|---|---|---|---|---|---|
| 跨模式搜索 | ✅ 本地 | ✅ OpenCLIP | ❌ 仅文本 | ❌ | ✅ CLIP模块 |
| 视频支持[Beta] | ✅ | ❌ | ❌ | ❌ | ❌ |
| 音频转录摄取 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 文档摄取(PDF/DOCX/PPTX) | ✅ | ❌ | ❌ | ❌ | ❌ |
| 内置重新银行功能 | ✅ 多模式 | ❌ | ❌ | ✅ 科尔伯特✅ 模块 | |
| MCP本地 | ✅ 26工具❌ | ❌ | ❌ | ❌ | |
| 100%本地 | ✅ | ✅ | ⚠️ 云默认值 | ✅ | ✅ Docker |
| 苹果硅优化 | ✅ MLX 4位 | ❌ | ❌ | ❌ | ❌ |
| 云选项 | ❌ | ✅ | ✅ | ✅ | ✅ |
| JS/TS-SDK | ❌ | ✅ | ✅ | ✅ | ✅ |
在以下情况下使用RecallForge: 您需要为完全在您的机器上运行的AI代理提供多模式内存,特别是在Apple Silicon上。一次搜索文本、图像、文档、视频和转录支持的音频。
在以下情况下使用其他东西: 你需要云托管、大规模(数百万向量)或JS/TS优先的生态系统。
演出
5种模态(文本、图像、文档、视频、转录支持音频)统一在单个MLX优化的局部向量空间中。嵌入模式下的搜索延迟低于60毫秒。驻留内存低于400MB。
管道消融(Mac mini M4 16GB,MLX 4位)
管道的每个阶段都提高了检索质量。再评级是质量峰值。
| 阶段 | R@1 | R@5 | R@10 | MRR | p50 |
|---|---|---|---|---|---|
| 仅矢量 | 65.2% | 65.2% | 67.4% | 67.3% | 20ms |
| 仅BM25 | 57.6% | 57.6% | 93.5% | 64.4% | 17毫秒 |
| 向量+BM25(RRF) | 69.6% | 88.0% | 90.2% | 77.5% | 100ms |
| +Reranker(混合动力模式) | 85.9% | 92.4% | 97.8% | 89.2% | 3.8秒 |
重新登录者交付 +RRF融合上20.7%的R@1 将R@10提高到97.8%。嵌入模式为您提供20ms的搜索速度敏感的工作负载。当质量很重要时,混合模式为您提供85.9%的R@1。
基准类别:仅文本(30个查询)、仅图像(30个)、长查询(12个查询)和打字错误查询(20个查询)。看 benchmarks/results/pipeline_ablation_modality_results.json 完全崩溃。
对于发布验证,请使用 benchmarks/cross_modal_ablation.py它在运行时检查JSON输出,因此长时间的MLX基准测试会话在中断时仍会留下部分工件。UAT视频语料库现在使用紧凑的情节固定装置,带有可搜索的转录侧边栏和相关的工件元数据,因此视频查询练习会议、屏幕录制、演练、现场和食谱风格的记忆。要将基准工件转换为排名修复列表,请运行 benchmarks/cross_modal_diagnostics.py;目前的报告在 docs/研究/跨模态诊断.md.
延迟和资源使用
| 公制 | MLX 4位 | PyTorch fp16 |
|---|---|---|
| 热搜索p50(嵌入) | 53ms | 599ms |
| 热搜索p95(嵌入) | 55ms | -- |
| 冷启动 | 7.6秒 | ~20秒 |
| 峰值RSS(嵌入) | 329MB* | ~4GB |
| 峰值RSS(混合) | ~1.5GB* | ~5GB |
| 文本索引 | 5.0文档/秒 | -- |
*MLX通过内存映射文件懒洋洋地映射模型权重。RSS反映的是驻留页面,而不是完整的模型大小(~1.7GB嵌入器+~1.7GB磁盘重新登录器)。实际内存压力低。
COCO 1K检索(原始嵌入,无管道)
透明度:原始嵌入质量在标准COCO基准上(1000张图像,无BM25/重新分级/扩展)。这些数字仅反映了Qwen3-VL-2B嵌入器,而不是整个管道。
| 方向 | R@1 | R@5 | R@10 |
|---|---|---|---|
| 文本→ 图片 | 24.5% | 42.3% | 49.9% |
| 图片→ 文本 | 34.3% | 42.0% | 44.1% |
Qwen3-VL是一种生成性VLM,而不是像CLIP那样的对比模型。上述管道消融显示了BM25融合和重新分级是如何弥补这一点的。
安装
pip install recallforge[mlx] # Apple Silicon (recommended, 4-bit quantization)
pip install "recallforge[mlx,server]" # Apple Silicon + HTTP/SSE server
pip install recallforge[cuda] # NVIDIA GPU
pip install recallforge[torch] # CPU / other PyTorch targets
pip install recallforge[docs] # add richer PDF extraction (optional)
注:
pip install recallforge在没有后端的情况下安装核心。 您至少需要以下之一[mlx],[cuda],或[torch]进行推理。 添加[server]仅当您需要HTTP/SSE传输时(recallforge serve --http).
来源:
git clone https://github.com/brianmeyer/recallforge.git
cd recallforge
pip install -e ".[mlx]"
需求
- 需要Python 3.12或3.13(3.14尚不支持,正在等待pyarrow轮)
- 磁盘:首次运行时可免费下载约2-5GB的模型
- 内存(MLX 4位):~1.7GB(
embed)至约3.4GB(hybrid) ffmpeg建议用于视频索引/搜索- 音频索引首先是转录:添加一个
.srt,.vtt,.txt,或.transcript.json音频文件旁边的sidecar - 首次运行会自动下载模型,可能需要几分钟时间
MCP服务器(主要用途)
RecallForge被设计为 AI代理的模型上下文协议服务器.在Claude Desktop(或任何兼容MCP的代理主机)中配置:
{
"mcpServers": {
"recallforge": {
"command": "recallforge",
"args": ["serve", "--mode", "hybrid"]
}
}
}
手动运行(stdio):
recallforge serve --mode embed --backend mlx --quantize 4bit
通过HTTP/SSE运行:
recallforge serve --http --host 127.0.0.1 --port 7433 --mode embed
RecallForge现已公开 26个MCP工具 跨搜索、摄取、内存图导航、集合管理和运行时配置。HTTP/SSE模式也公开了 /health, /sse,以及 /messages/长时间运行的工具会发出MCP notifications/progress 当客户端提供请求时 _meta.progressToken,因此兼容的HTTP/SSE客户端可以显示摄取、搜索、批处理、内存写入和FTS重建的实时进度。
看 docs/mcp-tools.md 以获取完整的工具参考。
搜索模式
| 模式 | 已加载型号 | 内存(MLX 4位) | 质量 | 最适合 |
|---|---|---|---|---|
embed |
嵌入器 | ~1.7GB | 良好 | 内存受限,搜索速度快 |
hybrid |
嵌入器+排序器 | ~3.4GB | 最佳 | 最高检索质量 |
视频[Beta]注释: 视频支持需要
ffmpeg火炬后端视频路径存在已知的上游问题(参见 QwenLM/Qwen3.5#58).
运作原理
RecallForge使用Qwen3 VL将文本、图像、视频帧、文档、对话和音频转录编码到相同的2048维向量空间中。它还提取了轻量级的实体和关系元数据,以便代理可以从一个内存导航到其他内存,这些内存提到了相同的人、项目、票证、URL和组织。文档、视频、音频和对话的重新索引首先被分为隐藏批,然后一起升级,这样代理就会一直看到之前的完整内存,直到替换准备就绪。这意味着“查找此图表的注释”无论图表是文本、图像、对话线程还是视频中的帧都有效。其余部分由三级管道处理:
graph TD
subgraph Local Filesystem
Docs[📄 Documents]
Imgs[🖼️ Images]
Vids[🎬 Video]
Aud[🎙️ Audio + Transcript]
Conv[Conversation Turns]
end
subgraph RecallForge Ingest
Docs --> TxtExt[Text Extractor]
Imgs --> VLM[Qwen3-VL Encoder]
Vids --> Frame[Frame & Audio Extractor]
Aud --> TxtExt
Conv --> TxtExt
Frame --> VLM
TxtExt --> VLM
end
subgraph LanceDB Storage
VLM -->|2048-dim Vectors| VecDB[(Vector Space)]
TxtExt -->|Text/Transcripts| FTS[(Tantivy FTS)]
end
subgraph MCP Search Pipeline
Query[Agent Query] --> BM25[BM25 Text Search]
Query --> Dense[Vector Similarity Search]
BM25 --> RRF[RRF Fusion]
Dense --> RRF
RRF --> Rerank[Cross-Encoder Reranker]
Rerank --> Output[Final Context to Agent]
end
管道: BM25探头→ 平行BM25+矢量→ RRF融合→ 重新分级(混合动力模式)→ 分数混合
CLI(开发与调试)
# Index anything
recallforge index ./photos ./docs
recallforge index ~/Movies/demo.mp4
recallforge index ~/Recordings/standup.wav # requires standup.srt/.vtt/.txt/.transcript.json
recallforge index ~/Documents/roadmap.pptx
# Search any modality
recallforge search "whiteboard diagram from last meeting"
recallforge search --image ./photos/whiteboard.png
recallforge search --video ~/Movies/demo.mp4
# Watch a folder for changes (auto-index)
recallforge watch start ~/Documents --collection docs
recallforge watch list
recallforge watch stop ~/Documents
# Status
recallforge status
RecallForge自动检测苹果Silicon上的MLX,其他地方的PyTorch。
Python API
from recallforge import get_backend, get_storage
from recallforge.search import HybridSearcher
backend = get_backend()
storage = get_storage()
backend.warm_up()
# Index
storage.index_document(
path="notes.md",
text="My notes about AI...",
collection="my_docs",
model="Qwen3-VL-Embedding-2B",
embed_func=backend.embed_text,
)
# Search
searcher = HybridSearcher(backend=backend, storage=storage, limit=10)
results = searcher.search("artificial intelligence")
for r in results:
print(f"[{r.score:.3f}] {r.title}")
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
RECALLFORGE_BACKEND |
auto |
auto, mlx, torch |
RECALLFORGE_MODE |
hybrid |
embed, hybrid |
RECALLFORGE_MLX_QUANTIZE |
4bit |
4bit, bf16 |
RECALLFORGE_STORE_PATH |
~/.recallforge |
存储目录 |
完整参考文献:
docs/ENV_VARS.md,
docs/MEMORY_POLICY.md,以及
docs/RUNTIME_BUDGETS.md
对于阿尔法/贝塔测试人员:
recallforge flags
recallforge crash-report --output recallforge-crash-report.json --message "what happened"
测试指南、功能标志默认值和选择加入崩溃报告策略已上线 docs/ALPHA_BETA_TESTING.md.
项目结构
src/recallforge/
├── backends/
│ ├── mlx_backend.py # MLX 4-bit/bf16 (Apple Silicon)
│ └── torch_backend.py # PyTorch (CUDA/MPS/CPU)
├── storage/
│ └── lancedb_backend.py # LanceDB + Tantivy FTS
├── cache.py # LRU query cache with index-version invalidation
├── search.py # Hybrid search pipeline (BM25 + vector + RRF)
├── server.py # MCP server (26 tools, stdio + HTTP/SSE)
├── documents.py # PDF/DOCX/PPTX extraction
├── video.py # Frame/transcript extraction
├── audio.py # Transcript-first audio ingest
├── feature_flags.py # Alpha/beta feature flag registry
├── diagnostics.py # Local-only crash report helpers
├── watch_folder.py # Folder monitoring with dedup
└── cli.py # CLI interface
发展
pytest tests/ -m "not live" # Unit tests (no model download needed)
pytest tests/ -m live -v # Integration tests (requires models)
发布工作流
CI in .github/workflows/ci.yml 运行测试矩阵,构建发行版,运行 twine check,冒烟测试轮子安装,冒烟测试内置轮子之外的HTTP服务器。标签推送匹配 v* 触发 .github/workflows/publish.yml,它以受信任的发布方式发布到PyPI。
在标记发布之前,请运行repo测试套件和install/CLI UAT脚本,如果您在有能力的主机上,请运行实时集成切片和扩展基准测试。完整的检查表位于 docs/RELEASE.md,日常的树枝/工作台清理工作也在 docs/GIT_HYGINE.md.
看 贡献.md 获取完整的开发指南。
归因
RecallForge的灵感来自 QMD QMD开创了多阶段检索管道(嵌入、重新排序)。RecallForge通过跨模式检索和多后端支持将此模式扩展到视觉语言。
许可证
MIT许可证