mcpField
R
Retrieve The Forgotten Memory

Retrieve The Forgotten Memory

本地服务
rtfm.roomi-fields.com记忆与知识276 天前更新

关于 Retrieve The Forgotten Memory

Retrieve The Forgotten Memory(RTFM)是面向编码 Agent 的本地检索层,可索引代码、文档、PDF 等项目文件。它结合结构化解析、全文与可选语义搜索,并通过 MCP 服务渐进提供上下文。

主要功能

  1. 01索引代码、文档、PDF 和数据
  2. 0215 种解析器并支持自定义解析器
  3. 03全文、语义和混合搜索
  4. 04关联文件与代码的知识图谱
  5. 05增量索引和文件历史记录
  6. 06渐进式上下文扩展

适用场景

  1. 01跨代码和项目文档查找相关段落
  2. 02在本地检索法律或研究语料
  3. 03检索 Claude Code 记忆文件中的决策
  4. 04通过关联笔记浏览 Obsidian 库

MCP 相关

MCP 服务向兼容的 AI 客户端提供搜索、扩展及相关检索能力。项目说明了 Claude Code 插件和手动客户端配置方式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"rtfm": {
"command": "uvx",
"args": [
"rtfm-ai"
]
}
}
}
启动命令uvx rtfm-ai

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypirtfm-ai0.55.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

RTFM

检索被遗忘的记忆

你的 AI Agent 所缺少的开放检索层

为项目中的所有内容建立索引——代码、文档、PDF、法律文本、研究资料、数据——让你的 Agent 即刻找到合适的上下文。没有幻觉。无需云服务。没有 API 费用。

减少每次搜索的调用次数: 一次查询即可返回代码、文档和 PDF 中按相关性排序的结果——只需几百个 Token 的指引——而不必依次执行 grep、glob 和读取整个文件。

免费 · 本地运行 · 开源 · MIT


RTFM 与原版 Claude Code 的对比——相同任务、相同模型,谁来买单?


PyPI 版本 许可证:MIT Python MCP Claude Code GitHub 星标数


问题

你的 AI Agent 正在盲目摸索。

它在数千个文件中搜索,却找不到能回答问题的文档;凭空编造不存在的模块;忘记你们在上次会话中的决定。项目越大,情况越糟。你换了更智能的模型,却毫无帮助。因为瓶颈不在智能,而在检索。

代码索引工具(Augment、Sourcegraph、Cursor)只能查看代码。但你的项目不只有代码,还有规范、PR、架构决策、研究论文、PDF、法规、知识库笔记——这些都是 Agent 不再靠猜测所需的上下文。

我为什么构建它

我当时在写一篇法国税务文章(约 50 页的法规文本,涉及法典条文之间的交叉引用、判例法和行政解释)。Claude Code 不停地循环搜索同一批目录,耗尽上下文,还自信满满地给出错误引文。我增加了更多记忆,改进了提示词,也换了更智能的模型,全都无济于事。问题不在于 Agent 推理得不好,而是它无法在包含 2,000 个文件的法律语料库中找到正确的段落。于是我不再试图让模型变得更聪明,转而构建它所缺少的那一层。这就是 RTFM。

解决方案

RTFM 为所有内容建立索引。 只需一条命令、一个 SQLite 文件,以及一个供 Agent 在搜索前查询的检索层。

pip install rtfm-ai && cd your-project && rtfm init

只需 30 秒。Claude Code 就能搜索你已建立索引的知识库——代码、文档、PDF,以及你放入其中的其他任何内容——支持全文、语义或混合搜索。Agent 首先看到 300 个 Token 的元数据,然后只展开相关内容。渐进式披露,而非倾倒上下文。

免费。本地运行。无需 API 密钥。无需云服务。你的数据仍由你掌控。

效果展示
$ rtfm search "authentication flow" --limit 3
[1] src/auth/handlers.py > authenticate_user (p.2)    score 9.12
    src/auth/handlers.py:147  42 lines
[2] docs/architecture/auth.md > SSO flow (p.1)        score 7.84
    docs/architecture/auth.md:1   23 lines
[3] docs/ADR/0007-oauth.md > Decision (p.1)           score 6.90
    docs/ADR/0007-oauth.md:12  18 lines

三个结果,约 300 个 Token。Agent 使用 rtfm_expand(source, target_section) 决定接下来要读什么——不是倾倒上下文,而是一场对话。


快速开始

推荐 — Claude Code 插件

在 Claude Code(CLI 或桌面端的 Code 选项卡)中:

/plugin marketplace add roomi-fields/claude-plugins
/plugin install rtfm@roomi-fields

RTFM 通过 roomi-fields/claude-plugins marketplace 分发,其中也提供用于带引用问答的 notebooklm-mcp。要一次性获取两者:

/plugin install notebooklm@roomi-fields

就这么简单。插件会在首次使用时自动初始化每个项目:

  • 创建 .rtfm/library.db(一个 SQLite 文件)
  • 将搜索说明注入 CLAUDE.md
  • 预先授予 MCP 工具权限(每次搜索都无需确认)
  • 在首次提示词时为项目编制索引,此后每次提示词都会增量重新编制索引

无需 pip install。 纯 Python,可在已将 Python 3.10+ 添加到 PATH 的 Linux / macOS / Windows / WSL 上运行。插件内置了自己的 MCP 服务(不依赖 mcp SDK),并会自动查找 python3 / python / py。

然后对 Claude 说:“查找身份验证流程”——它会使用 rtfm_search,而不是运行 grep。

可选附加组件(语义搜索、PDF 解析)

核心插件无需依赖。较重的可选附加组件(嵌入模型、PDF 解析器)会按需安装到插件数据目录中的隔离 venv 内,不会污染系统 Python,也不会产生 PEP 668 冲突:

/rtfm:install-embeddings    # FastEmbed ONNX (~85 MB), semantic + hybrid search
/rtfm:install-pdf           # pdftext only (~50 MB), fast text extraction
/rtfm:install-pdf-full      # + marker-pdf + CPU-only torch (~1.5 GB), complex layouts

pdf-full 安装会使用 PyTorch 的仅 CPU 索引(无需 CUDA 或 GPU),安装大小约为 1.5 GB,而不是 5 GB。

安装后重启 Claude Code,以加载这些附加组件。

手动安装(Cursor、Codex、Claude Desktop 聊天、其他 MCP 客户端)

适用于没有 Claude Code 插件系统的客户端:

pip install rtfm-ai
cd /path/to/your-project
rtfm init

然后将 MCP 客户端指向 rtfm-serve(pip 包提供的入口)。可选附加组件可通过 pip install rtfm-ai[embeddings,pdf] 安装。


对比

RTFMAugment CESourcegraphCode-Index-MCPMemPalace
代码索引✅(感知 AST)✅✅✅浅层(按字符分块)
文档、规范、Markdown✅(按标题解析)部分支持❌有限支持原样分块
法律 / 监管内容✅(XML、BOFiP)❌❌❌❌
研究资料(LaTeX、PDF)✅❌❌❌❌
自定义解析器✅(约 50 行)❌❌❌❌
知识图谱✅(文件 / 代码链接)❌部分支持❌实体图谱(人物)
文件版本历史✅(无限)❌❌❌❌(清空后替换)
原生支持 MCP✅✅✅✅✅
本地运行✅云端企业版✅✅
开源MIT❌部分开源✅MIT
价格免费每月 $20-200每月 $$$免费免费

RTFM 是唯一一款开源方案,能够通过结构化解析为多领域内容建立索引,并提供代码级知识图谱和无限的单文件历史记录。 这就是它的定位。

与 MemPalace 的具体区别:MemPalace 是面向对话的实体级记忆(在 SQLite 中存储人物 / 项目 / 决策三元组,并在 ChromaDB 中存储原样分块)。RTFM 则是面向制品的检索层——按格式解析、在文件级别建立关联,并随时间保留版本。两者可以组合使用,并非相互竞争。

如需深入了解 RAG 的设计选择(分块、检索、增强、集成、时效性、存储),请参阅 RAG 基础知识——6 个维度 →


跨会话延续的记忆

大多数 Agent 在会话之间都会遗忘。RTFM 会为你机器上所有项目中的 Claude Code 自带记忆文件建立索引,并保留完整版本历史。

rtfm memory                    # Manual snapshot
rtfm memory --install-hook     # Auto-snapshot on every SessionEnd
  • 跨项目索引 — ~/.rtfm/memory.db 中的一个数据库即可查看你机器上所有 ~/.claude/projects/*/memory/ 目录。询问 rtfm_search("OAuth auth decisions"),即可从你的全部 18 个项目中获取匹配结果。
  • 无限版本历史 — 记忆文件的每次更改都会生成快照(不会清理)。rtfm_history <slug> 会返回完整的演变记录。
  • 在 SessionEnd 时自动生成快照 — 只需一条命令即可安装全局 Claude Code hook。每次结束会话时,都会捕获新快照。
  • 经过整理,而非原样记录 — RTFM 为 Agent 在会话期间自行整理的笔记建立索引(精简、有结构、信息密度高)。这与 MemPalace 的理念不同:后者会在 ChromaDB 中为完整对话记录建立索引(内容庞大、噪声较多,需要进行积极的语义过滤)。

Obsidian 库模式

RTFM 是 Karpathy LLM Wiki 模式的检索层。Karpathy 本人写道:“规模较小时,索引文件就够用了;但随着 Wiki 增长,你就需要完善的搜索。” 这就是完善的搜索。

cd /path/to/your-obsidian-vault
rtfm vault
  • 检测 .obsidian/,并提出文件夹到语料库的映射
  • 按照 Obsidian 规则解析 [[wikilinks]] → 存储为图边
  • 生成 _rtfm/,提供 Obsidian 原生导航(索引、Mermaid 图、中心页、孤立笔记、Dataview frontmatter)
  • 已在一个包含 1,700 篇笔记的研究库中测试
_rtfm/
├── index.md      # Hub: corpus list, top connected documents
├── graph.md      # Hub documents, orphans, broken links, Mermaid
├── recent.md     # Recently modified files
└── corpus/       # Per-corpus indexes

LLM 仍会为你编写 Wiki。RTFM 负责处理 index.md 无法扩展支持的检索工作。

完整的 Obsidian 指南 →


NotebookLM 集成

RTFM 与 notebooklm-mcp 天然适配。NotebookLM 将每个笔记本的查询次数限制为每天 50 次;RTFM 通过在本地为答案建立索引,打破这一上限——查询一次,永久检索,离线可用,耗时仅毫秒。

notebooklm-mcp 的 /batch-to-vault 端点会将带引用的问答写入 {slug}.md(包含 frontmatter 的 Markdown)和 {slug}.json(结构化的 nblm-answer-v1 sidecar)。两者可保证共存。今天即可使用以下两种集成方式:

  • 方式 A — Markdown(零配置):将库放入 RTFM,然后运行 rtfm sync。默认的 Markdown 解析器会自动将每个答案切分为问题、答案和逐条引用的区块。无需映射、无需模式、无需代码。
  • 方式 B — JSON sidecar(类型化元数据):将 nblm-answer.yaml 映射放入 .rtfm/mappings/。每个 .json 答案文件都会生成类型化区块,其中包含可通过 SQL 查询的 notebook_id、source_name、citation_marker,并生成答案与来源之间的 cites 边候选项。

除非你确实需要按结构化引用字段筛选或构建图,否则请使用方式 A。

完整的 NotebookLM 操作指南 →


测量结果

我进行了两类基准测试。实际情况比较复杂——检索对那些确实可解决、且 Agent 正在花时间查找内容的任务帮助最大。

文档密集型任务:法语税务文章生成(B10)

根据法律条文、判例法和行政解释语料,撰写一篇约 50 页的规范性文章。使用相同的 Agent(Claude Code + Sonnet 4)和相同的提示词,测试了 8 种配置。

配置耗时成本Token 数
基线(不使用 RTFM)8m 16s$22.618.21 M
使用 RTFM(默认 FTS)6m 58s$11.143.22 M

Δ:成本 −51 %、Token 数 −61 %、耗时 −16 %,且事实准确性更高。 这正是 RTFM 的设计用途:在大型多领域语料中查找内容,而 grep 往往找不到正确段落。

代码任务:FeatureBench(LiberCoders 数据集)

11 个任务、3 个不同规模的仓库、4 种条件(A = 标准提示词,包含文件路径;B = 探索,不提供路径;C = RTFM FTS;D = RTFM 混合模式),每种条件各运行 3 次。

仓库大小RTFM 有帮助的情况
metaflow620 个文件所有任务都已解决——RTFM 没有带来可测量的提升
astropy1,119 个文件所有条件的 F2P 通过率均为 25–30 %;没有任务完全解决
mlflow8,255 个文件所有条件的 F2P 通过率均为 0–5 %;没有任务完全解决

在一次范围较小的运行中(metaflow 上的 test_stub_generator),与不提供路径的基线相比,RTFM 将 Agent 耗时缩短了 −37 %。在较大的仓库中,无论使用何种检索方式,任务本身都难到 Sonnet 4 无法在 20 分钟超时内解决。

诚实地说,仍有一些限制
  • 只有一个模型(Sonnet 4)和一个 Agent(Claude Code),统计结果并非万无一失。
  • 对于小型代码库(少于 1k 个文件),grep 已经够用,而 RTFM 反而会增加开销。
  • FeatureBench 衡量的是代码修改,而非信息检索。它并不适合用来评测检索工具——我仍用它进行评测,只因为目前有这个基准。更合适的基准(RepoQA、SWE-QA、LocAgent)已列入路线图。
这说明了什么

当瓶颈是**“在包含 2,000 个文件的语料库中找到正确段落”**时,RTFM 的效果有可衡量的优势。它不会神奇地让无法解决的任务变得可解。模型仍然需要完成工作——RTFM 只是确保它能获取正确的上下文来完成工作。


适用对象

只要你的项目不只有代码,RTFM 就能派上用场:

  • 法律科技 — 代码 + 税法 + 监管规范。内置 Legifrance XML 和 BOFiP 解析器。
  • 研究 — 代码 + LaTeX 论文 + 数据集。内置 LaTeX 和 PDF 解析器。
  • 金融科技 — 代码 + 金融法规 + XBRL 报告。只需 50 行代码即可编写 XBRL 解析器。
  • 医疗科技 — 代码 + 医疗记录(HL7/FHIR)+ 临床指南。
  • 拥有大型项目的独立开发者 — 别再每次会话都看着 Agent 对同样的 8,000 个文件执行 grep。
  • Obsidian / PKM 用户 — 让 AI 真正能够搜索你的知识库。
  • 任何受监管的行业 — 如果你的项目混合了代码与领域文档,RTFM 就适合你。

完整功能列表

搜索与检索
  • FTS5 全文搜索 — 即时、零配置,开箱即用
  • 语义搜索 — 可选嵌入(FastEmbed/ONNX,无需 GPU)
  • 混合模式 — 结合两种方式,按相关性得分排序
  • 元数据优先 — 搜索结果返回文件路径和得分(约 300 个 token),而非内容倾倒
  • 渐进式披露 — Agent 只展开实际需要的内容块
  • 知识图谱 — 将 wikilinks + Python 导入解析为图边,支持枢纽检测和中心性排序
多格式索引
  • 内置 24 种解析器 — Markdown、Python(AST)、LaTeX、YAML、JSON、TOML、Shell、PDF、XML、HTML、SQLite、Jupyter、CSV/TSV、XLSX、EPUB、MOBI/AZW、FB2、DJVU、DOCX、ODT、RTF、MIDI、音频标签(MP3/FLAC/OGG/M4A/WAV/AIFF…)、纯文本
  • 可扩展 — 用约 50 行 Python 支持任意格式
  • 自动同步钩子 — 每次提示词后保持索引最新,无需手动操作
  • 增量处理 — 只重新索引发生变化的内容
集成
  • 原生 Claude Code 插件 — /plugin install rtfm@roomi-fields/rtfm,按项目自动初始化
  • 纯 Python MCP 服务 — 无外部依赖,无需 mcp SDK / pydantic / 原生二进制文件
  • 跨平台 — Linux、macOS、Windows、WSL(只需 PATH 中有 Python ≥ 3.10)
  • 14 个 MCP 工具 — 搜索、上下文、展开、图谱、历史记录、同步、标签等
  • 手动安装备用方案 — 使用 pip install rtfm-ai,适用于 Cursor、Codex、Claude Desktop chat 及其他 MCP 客户端
  • CLI + Python API — 可用于编写流水线脚本
  • 无侵入性 — 不会触碰你的代码,也不会替换你的编辑器

解析器架构

需要索引一种目前没有任何工具支持的格式?用约 50 行代码编写解析器即可。

from rtfm.parsers.base import BaseParser, ParserRegistry
from rtfm.core.models import Chunk
import json
from uuid import uuid4

@ParserRegistry.register
class FHIRParser(BaseParser):
    """Parse HL7 FHIR medical records."""
    extensions = ['.fhir.json']
    name = "fhir"

    def parse(self, path, metadata=None):
        data = json.loads(path.read_text())
        for entry in data.get('entry', []):
            resource = entry.get('resource', {})
            yield Chunk(
                id=resource.get('id', str(uuid4())),
                content=json.dumps(resource, indent=2),
                book_title=f"FHIR {resource.get('resourceType', 'Unknown')}",
                book_slug=resource.get('id', 'unknown'),
                page_start=1,
                page_end=1,
            )

将它放入项目,重启 Claude Code,你的医疗 AI Agent 就能理解 FHIR 记录了。

两种 JSON 集成方式

对于基于 JSON 的格式,RTFM 还提供了第二种扩展方式,无需使用 Python:

级别操作效果
1. 通用无需操作。直接索引文件即可。每个顶层键都会成为一个内容块。全文搜索可搜索值。
2. 映射将 YAML 映射文件放入 .rtfm/mappings/(约 30 行)。获得带有已声明元数据、自定义标题、数组 foreach 提取和边候选项的类型化内容块。生成该数据的项目(NotebookLM、Linear、Notion、OpenAPI 等)提供映射;RTFM 保持通用。

请参阅 JSON schema 映射了解完整参考,并参阅 RTFM × NotebookLM查看具体示例。

内置解析器
解析器扩展名策略
Markdown.md按标题拆分,提取 YAML frontmatter
Python.py基于 AST:每个类或函数 = 1 个分块
LaTeX.tex按 \section、\chapter 等拆分
YAML.yaml、.yml按顶层键拆分
JSON.json按顶层键或数组元素拆分
TOML.toml顶层表;生成 depends_on 边(PEP 621、Cargo、Poetry)
Shell.sh、.bash、.zsh按函数拆分
PDF.pdf按页拆分(pip install rtfm-ai[pdf])
Legifrance XML.xml法国法律法规(LEGI 格式)
BOFiP HTML.html法国税务法规
SQLite.sqlite、.sqlite3、.db每个表包含架构和示例行;外键边(只读)
Jupyter.ipynb按 Markdown 标题对单元格分组;丢弃输出
CSV / TSV.csv、.tsv标题行 + 示例行 + 轻量级类型推断
XLSX.xlsx每个工作表的架构和示例(pip install rtfm-ai[xlsx])
纯文本.js、.ts、.rs、.go、...按行边界拆分(约 500 个字符)

MCP 工具

工具功能
rtfm_search搜索索引(全文、语义或混合)
rtfm_context获取主题的相关上下文(仅元数据)
rtfm_expand显示来源的所有分块及完整内容
rtfm_discover快速扫描项目结构(约 1 秒,无需建立索引)
rtfm_books列出已索引的文档
rtfm_stats知识库统计信息
rtfm_sync同步目录(增量)
rtfm_ingest摄取单个文件
rtfm_tags列出所有标签
rtfm_tag_chunks为指定分块添加标签
rtfm_remove从索引中移除文件
rtfm_graph显示来源的依赖关系图(导入、链接)
rtfm_history文件版本历史和记忆快照
rtfm_coverage对比索引内容与磁盘上的内容

CLI 参考

# Search
rtfm search "authentication flow"
rtfm search "article 39" --corpus cgi --limit 5

# Sync
rtfm sync                              # All registered sources
rtfm sync /path/to/docs --corpus docs  # Specific directory
rtfm sync . --force                    # Force re-index

# Source management
rtfm add /path/to/docs --corpus docs --extensions md,pdf
rtfm sources

# Obsidian vault
rtfm vault                             # Initialize for cwd vault
rtfm vault /path/to/vault              # Specific vault
rtfm vault --regenerate                # Regenerate _rtfm/ files

# Cross-project Claude memory
rtfm memory                            # Manual snapshot
rtfm memory --install-hook             # Auto-snapshot on SessionEnd

# Status & info
rtfm status
rtfm books
rtfm tags
rtfm history path/to/file.md           # Memory version history

# Semantic search
rtfm embed                             # Generate embeddings (one-time)
rtfm semantic-search "tax deductions" --hybrid

# MCP server
rtfm serve

Python API

from rtfm import Library

lib = Library("my_library.db")

# Index
stats = lib.ingest("documents/article.md", corpus="docs")
result = lib.sync(".", corpus="my-project")  # SyncResult(+3 ~1 -0 =42)

# Search
results = lib.search("depreciation", limit=10, corpus="cgi")
results = lib.hybrid_search("amortissement fiscal", limit=10)

# Export for LLM
prompt_context = results.to_prompt(max_chars=8000)

lib.close()

RTFM 的定位

RTFM 不是任务管理器,也不是 Agent 框架。无论你已经在使用什么,RTFM 都是 Agent 所需的底层知识层。

┌─────────────────────────────────┐
│  GSD / Taskmaster / Claude Flow │  ← Orchestration
├─────────────────────────────────┤
│              RTFM               │  ← Knowledge (you are here)
├─────────────────────────────────┤
│          Claude Code            │  ← Execution
└─────────────────────────────────┘

没有 RTFM,你的编排器驱动的 Agent 会产生幻觉。有了 RTFM,Agent 就能了解自己所构建的基础。


参与贡献

添加解析器是最简单、也最有影响力的贡献方式。请参阅 CONTRIBUTING.md。

发现了 Bug?有想法?提交问题。

致谢

@AVeryTastyRaspberry 让 RTFM 能在原生 Windows 上运行。RTFM 在 Linux 上开发,而每条命令在 Windows 上都会出错——CLI 在导入时就崩溃,甚至还没来得及解析参数。问题报告 (#8) 指明了出错的代码行;随后在一台真实的 Windows 11 机器上进行的测试,通过 tasklist 而非 RTFM 自己的说法进行核验,发现了另外五个相关缺陷,并确认每项修复都有效。接着,#9 追查了那些不断弹出的控制台窗口。没有这项贡献,本项目就无法支持这个平台。

许可证

MIT — 使用、分叉、扩展、发布,悉听尊便。

作者

Romain Peyrichou — @roomi-fields


代码索引器只能看到你的代码。RTFM 无所不见。

如果 RTFM 帮你的 Agent 避免了幻觉,请在 GitHub 上⭐ 点赞。

想了解它的底层工作原理?请参阅架构——SQLite + FTS5、解析器注册表,以及优先队列工作线程(摄取 → 嵌入 → OCR)。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。