1. 项目概述:为持续运行的智能体构建一个类型化记忆层

如果你正在使用 Claude Code、OpenClaw 这类“持续运行”的智能体,你可能会遇到一个甜蜜的烦恼:它们太能写了。每天,这些不知疲倦的助手会自动将会议纪要、语音转录、灵感碎片、联系人信息整理成 Markdown 笔记,存入你的 Obsidian 知识库。一个月下来,你的 Vault 里可能就堆了七八百个文件。起初的兴奋很快会被混乱淹没:破碎的维基链接、重复的内容、前后不一致的标签(比如 status: ongoing status: active 到底是不是一回事?),以及大量你根本记不起来何时创建的“僵尸”笔记。知识库不仅没有成为外脑,反而成了一座需要持续维护的废墟。

autograph 就是为了解决这个问题而生的。它不是一个笔记应用,也不是一个 AI 工具,而是一个 类型化的记忆层 。你可以把它想象成知识库的“操作系统内核”或“数据库模式”。它的核心思想是 “一次定义,自动治理” :你只需要在一个名为 schema.json 的文件里,用代码的形式定义一次你的知识分类体系(Taxonomy)——比如有哪些卡片类型(笔记、联系人、项目、CRM商机)、每种类型应该放在哪个文件夹、允许哪些状态值、不同类型知识的遗忘速度如何——剩下的脏活累活, autograph 的引擎会自动接管。

这个引擎会持续工作:将新文件放入正确的文件夹,修复断裂的链接,合并重复项,为长期未触达的知识计算“健康度”并实施“遗忘”(归档),甚至能按需将尘封的旧知识重新推送到你面前进行间隔复习。最关键的是,这套 schema.json 定义可以被任何写入你 Obsidian 仓库的智能体(Claude Code, OpenClaw, Hermes, Codex 等)读取和遵守,从而在源头确保知识入库的规范性和一致性。它本质上是在你的文件系统之上,构建了一个强类型的、可编程的、具备自维护能力的知识图谱。

2. 核心设计理念与架构拆解

2.1 核心理念:Schema as Code(模式即代码)

传统知识管理(PKM)工具的配置往往是图形化、散落在各处的。 autograph 反其道而行之,将整个知识体系的结构化定义收敛到一个 schema.json 文件中。这是一种“基础设施即代码”思想在个人知识领域的实践。这样做有几个显著优势:

  1. 版本控制与协作 schema.json 是一个纯文本文件,可以像管理代码一样用 Git 进行版本管理。团队协作时,知识结构的变更历史一目了然,可以回滚、对比。
  2. 可移植性与一致性 :你的知识体系定义不再绑定于某个特定的 Obsidian 实例或插件配置。换电脑、重建环境时,只需复制这个文件,整个知识库的治理规则就完整迁移了。
  3. 机器可读与可编程 :智能体(AI Agent)可以轻松解析 JSON 文件,理解你的知识结构,从而做出符合规范的决策。这是实现“一次定义,多方遵守”的基础。
  4. 明确性与无歧义 :所有规则白纸黑字写在文件里,避免了图形界面配置可能带来的模糊性和隐藏设置。

一个简化的 schema.json 结构示例如下:

{
  "version": "1.0",
  "domains": {
    "people": {
      "path": "01-Areas/People",
      "card_type": "contact",
      "allowed_statuses": ["active", "inactive", "archived"],
      "decay": {
        "base_rate": 0.005,
        "floor": 0.1
      }
    },
    "projects": {
      "path": "02-Areas/Projects",
      "card_type": "project",
      "allowed_statuses": ["planning", "active", "on-hold", "completed"],
      "decay": {
        "base_rate": 0.012,
        "floor": 0.2
      }
    }
  },
  "global": {
    "required_frontmatter": ["title", "created"],
    "broken_link_threshold_days": 30
  }
}

在这个例子里,我们定义了两个“域”(domain): people projects 。所有存放在 01-Areas/People 文件夹下的笔记,都会被自动识别为 contact 类型的卡片,并且其 status 字段只能填入 active , inactive , archived 三者之一。同时,我们为联系人定义了较慢的遗忘速率( base_rate: 0.005 ),因为人际关系的变化通常较慢。

实操心得 :在定义 schema.json 的初期,不必追求完美。可以从 schema.example.json 模板开始,先定义 2-3 个你最核心的知识域(比如 projects daily )。在后续使用中,通过 autograph 的审计功能( graph.py health )观察问题,再迭代调整你的模式定义。记住,这是一个演进式的设计过程。

2.2 架构组成:14个引擎脚本的分工协作

autograph 的强大不是靠一个庞杂的 monolithic 程序,而是通过一组小巧、专注、基于标准库的 Python 脚本(共14个)分工协作实现的。这种“Unix哲学”式的设计让每个脚本职责清晰,也便于理解和定制。

整个系统的工作流可以概括为几个核心阶段,对应不同的脚本组合:

  • 发现与引导阶段 :当你面对一个全新或混乱的 Vault 时, discover.py 会像侦察兵一样扫描整个仓库,枚举出所有文件、文件夹和潜在的模式。 research.py 则提供了交互式的引导(通过 /autograph:research 命令),利用智能体群(swarm)与你对话,帮助你从混沌中提炼出初始的 schema.json 草案。
  • 强制执行与清理阶段 :一旦有了模式, enforce.py 就扮演“纪律委员”的角色。它会检查所有文件是否符合模式定义(如前端元数据字段、文件位置),并可以自动修复一些问题。 link_cleanup.py 专门清理那些指向不存在的文件的“幽灵链接”。
  • 丰富与连接阶段 :知识的价值在于连接。 enrich.py 是这个阶段的主力。它可以通过 LLM 分析卡片内容,自动生成标签( tags ),并基于目录(catalog)进行“群链接”( swarm-links )——即智能地为当前卡片寻找并建立与仓库内其他相关卡片的连接,解决“孤儿卡片”问题。
  • 去重与合并阶段 dedup.py 负责识别内容高度相似的卡片。它采用“安全合并”策略,通常会将重复内容移入 .trash/ 文件夹而非直接删除,并更新所有相关链接指向保留的主卡片。
  • 健康监测与修复阶段 graph.py 是系统的“仪表盘”和“维修工”。 health 子命令会计算仓库的整体健康度分数(基于链接完整度、描述覆盖率、陈旧文件比例等),而 fix 子命令可以自动修复断链和孤儿文件。
  • 记忆衰减与主动召回阶段 :这是 autograph 最富特色的部分,由 engine.py 驱动。它模拟艾宾浩斯遗忘曲线,根据卡片的类型、访问次数、时间间隔,动态计算其“相关性”(relevance)并调整其“层级”(tier,如 active , warm , cold , archive )。 creative 子命令则能主动将沉入“冷库”的旧知识召回,供你复习。
  • 地图生成阶段 moc.py 负责生成“内容地图”(Map of Content)。这是一种索引页,会自动聚合某个领域或标签下的所有卡片,并以结构化的方式呈现,帮助你俯瞰某个知识领域全貌。

这种模块化设计意味着你可以按需使用。比如,你可以只设置一个定时任务,每天运行 engine.py decay graph.py health 来维护记忆新鲜度和仓库健康;也可以在每次批量导入外部数据后,手动运行 enforce.py enrich.py 来规范化新内容。

3. 核心功能深度解析与实操指南

3.1 遗忘引擎:让知识库“呼吸”起来

静态的知识库最终会变成墓地。 autograph 的遗忘引擎是其灵魂,它让知识库具备了动态的、类似生物记忆的新陈代谢能力。这套机制并非简单粗暴地删除旧文件,而是通过精密的计算,实现知识的 分级存储 主动召回

3.1.1 遗忘算法的三层机制

引擎的核心算法融合了三个可配置的机制:

  1. 访问计数与间隔效应 :这是对艾宾浩斯遗忘曲线的直接应用。每次你对卡片执行 engine.py touch <card-path> 操作(或任何修改、链接操作都会隐式触发 touch ),其 access_count 就会增加。访问次数越多,遗忘速度越慢。计算公式体现了“间隔效应”:

    strength = 1 + ln(access_count)       # 访问带来的记忆强度增益
    effective_rate = base_rate / strength # 实际遗忘速率 = 基础速率 / 强度
    relevance = max(floor, 1.0 − effective_rate × days_since_access) # 当前相关性分数
    

    举个例子,一张基础遗忘速率 base_rate 为 0.015 的卡片,如果只被访问过1次 ( access_count=1 ),那么 strength=1 effective_rate=0.015 。如果90天没看,相关性会降至 1 - 0.015*90 = -0.35 ,但由于有 floor (比如0.1)保护,最终 relevance=0.1 ,它很可能已被降级到 cold archive 层。 如果同一张卡片被访问过5次 ( access_count=5 ), strength ≈ 1 + 1.609 = 2.609 effective_rate ≈ 0.015 / 2.609 ≈ 0.00575 。同样90天后,相关性为 1 - 0.00575*90 ≈ 0.4825 ,依然保持在较高的水平。这模拟了大脑对反复记忆内容的强化过程。

  2. 领域特异性速率 :不是所有知识都以同样的速度被遗忘。 autograph 允许你在 schema.json 中为不同的 card_type 定义不同的 base_rate 。项目笔记可能比联系人忘得快,每日日志可能比学到的概念忘得快。这种差异化处理让记忆模型更贴合实际。

    卡片类型 基础速率 半衰期(天) 设计逻辑
    contact 0.005 ~100 人际关系变化较慢,需要长期记忆
    crm 0.008 ~62 商业机会有中等长度的生命周期
    learning 0.010 ~50 学到的知识会逐渐淡化,但不应过快
    project 0.012 ~42 项目有明确的起止日期,过期后相关性骤降
    daily 0.020 ~25 每日笔记细节价值衰减很快
    默认 0.015 ~33 其他未明确类型的通用设置

    注意事项 :设置 base_rate 时, 0.005 意味着每天遗忘 0.5% 的相关性。半衰期(相关性降至0.5所需天数)可以用公式 半衰期 ≈ ln(0.5) / ln(1 - base_rate) 粗略估算。建议初期采用默认值,运行几周后通过 engine.py stats 查看不同类型卡片的实际分布,再微调。

  3. 渐进式召回 :当一张卡片被“触摸”( touch )时,它不会直接从 archive 跳回 active 。引擎采用渐进策略,一次只提升一个层级: archive → cold → warm → active 。更重要的是, touch 操作会将卡片的 last_accessed 时间戳设置为 当前时间与目标层级中期时间的平均值 。这意味着,如果你只是简单 touch 了一下而没有真正复习,卡片会自然地沿着遗忘曲线慢慢滑回原来的层级。这防止了滥用 touch 命令导致所有卡片都堆积在活跃层。

3.1.2 实操:配置与运行遗忘引擎

假设你的 Vault 路径是 /home/user/my-vault

  1. 配置遗忘参数 :在你的 schema.json 文件中,为每个 domain 添加 decay 配置。

    {
      "domains": {
        "inbox": {
          "path": "00-Inbox",
          "card_type": "inbox",
          "decay": {
            "base_rate": 0.025, // 收集箱内容遗忘最快
            "floor": 0.05
          }
        },
        "knowledge": {
          "path": "01-Areas/Knowledge",
          "card_type": "learning",
          "decay": {
            "base_rate": 0.010,
            "floor": 0.15
          }
        }
      }
    }
    
  2. 手动运行衰减计算

    cd /home/user/my-vault
    uv run /path/to/autograph/skills/autograph/scripts/engine.py decay .
    

    这个命令会遍历所有卡片,根据上述算法重新计算每张卡片的 relevance tier ,并更新卡片的前端元数据(Frontmatter)。你会在输出中看到类似这样的日志:

    [INFO] Processed 1245 cards.
    [INFO] Tier distribution: active: 210, warm: 345, cold: 455, archive: 235.
    [INFO] 15 cards promoted to warm, 8 cards demoted to archive.
    
  3. 主动召回旧知识 :如果你想进行间隔复习,可以运行:

    uv run /path/to/autograph/skills/autograph/scripts/engine.py creative 5 .
    

    这个命令会找出当前 relevance 最低的5张卡片(通常是最久远、最可能被遗忘的),并将它们提升到 warm 层级,使其重新出现在你的视野中(例如,可以通过一个显示 tier: warm 的 Obsidian 查询来查看)。

3.2 链接治理与知识图谱健康

知识卡片之间的链接是构成知识图谱的血管。断链和孤儿卡片是知识库腐烂的开始。 autograph 提供了一套完整的工具链来诊断和修复链接问题。

3.2.1 健康度评分系统

运行 graph.py health 会生成一份详细的健康报告。这个评分系统考量多个维度:

  • 链接健康度 :计算所有 [[wikilink]] 中,指向有效文件的比例。断链会严重扣分。
  • 孤儿卡片比例 :没有任何入链(backlinks)的卡片被认为是“孤儿”。少量孤儿(如顶级索引页)可以接受,但比例过高说明知识连接性差。
  • 描述覆盖率 :卡片是否包含 description summary 字段来概括内容?这影响可检索性。
  • 陈旧卡片比例 :超过一定天数(如90天)未被修改的卡片占比。适度的陈旧是正常的,但比例过高可能意味着知识库僵化。
  • 模式合规率 :有多少卡片完全符合 schema.json 的定义(位置、字段、值)?

一个健康的 Vault 目标通常是:健康度 ≥ 90,断链数 = 0,描述覆盖率 ≥ 80%,陈旧卡片 < 20%。

3.2.2 自动化链接修复与创建

autograph 不仅能发现问题,还能自动修复和创建链接。

  1. 修复断链 graph.py fix --apply 命令会尝试自动修复断开的维基链接。策略包括:在文件名不变的情况下移动了文件位置、文件名大小写变化、简单的拼写错误纠正(通过模糊匹配)。应用前务必先使用 graph.py fix (不加 --apply )进行预演,查看它将要做出的更改。
  2. 消除孤儿卡片 :这是 enrich.py 脚本的强项。通过 enrich.py swarm-links --apply ,它会利用 LLM(需要配置 OPENROUTER_API_KEY )分析孤儿卡片的内容,然后在全库范围内为其寻找最相关的 2-3 个“兄弟”卡片和 1 个“中心”(hub)卡片,并自动建立双向链接。这极大地增强了知识网络的连通性。
  3. 创建新卡片时的链接保证 :在 autograph 的技能定义( SKILL.md )中,有一个标准工作流(Workflow 3)。当智能体需要创建一张新卡片时,它被要求必须同时提供:卡片类型、目标路径、正确的前端元数据、一个 ## Related 章节(其中至少包含一个中心链接和两个兄弟链接)。只有满足这些条件,任务才算完成。这从源头杜绝了孤立知识的产生。

避坑技巧 :在运行任何 --apply 的修复命令前, 务必确保你的 Vault 已用 Git 或其他版本控制系统备份 。虽然 autograph 的设计是保守的(比如合并时移动至 .trash ),但批量操作总有风险。先做 dry-run,审查日志,然后再应用。

3.3 模式强制执行与数据清洗

当从外部系统(如 HubSpot, Notion, Apple Notes)导入大量数据时,往往格式混乱。 autograph 的强制执行引擎可以将这些异构数据快速规范化。

3.3.1 标准化导入流程

一个典型的导入后处理流程如下:

# 1. 初始化:为新导入的文件生成或补充必要的前端元数据(如id, created, type)
uv run skills/autograph/scripts/engine.py init /path/to/vault --target-dir=Imported/Notion

# 2. 强制执行:检查并修正文件位置、前端元数据字段,使其符合schema
uv run skills/autograph/scripts/enforce.py /path/to/vault --apply

# 3. 丰富内容:基于卡片内容,利用LLM生成智能标签
uv run skills/autograph/scripts/enrich.py tags /path/to/vault --apply

# 4. 建立连接:为这些新卡片寻找并建立内部链接,将其织入知识网
uv run skills/autograph/scripts/enrich.py swarm-links /path/to/vault --apply

完成这四步后,外部导入的数据在结构和关联度上,将与手动创建的卡片别无二致。

3.3.2 安全去重

dedup.py 脚本使用内容哈希和语义相似度(可选)来识别重复项。其“安全合并”策略是:

  • 识别出重复卡片组。
  • 选择“最完整”的一张作为主卡片(通常基于文件大小、元数据完整性、修改时间)。
  • 将其他重复卡片 移动 到 Vault 根目录下的 .trash/ 文件夹中,并按日期组织。
  • 扫描整个 Vault,将所有指向被移动卡片的链接,更新为指向主卡片。
  • 在主卡片中添加一个 merged_from 元数据字段,记录被合并的来源。

这种策略的好处是:你永远不会因为去重操作而丢失任何内容。如果误判,你可以轻松地从 .trash/ 中恢复文件。

4. 部署、集成与自动化实践

4.1 在不同智能体平台上的安装

autograph 被设计为与主流“持续运行智能体”平台无缝集成。安装方式因平台而异,但核心都是将 autograph 的技能(skill)和命令植入到智能体的环境中。

  • Claude Code :最简便的方式是通过其插件市场安装。在 Claude Code 界面中,使用命令 /plugin marketplace add smixs/autograph 添加市场,然后 /plugin install autograph@autograph 进行安装。安装后,你就可以使用 /autograph:research 这个强大的交互式命令来引导初始化你的 Vault 了。
  • OpenClaw :作为本地优先的智能体框架,OpenClaw 通过克隆代码库并安装插件的方式集成。你需要将仓库克隆到本地(如 ~/dev/autograph ),然后运行 openclaw plugins install ~/dev/autograph 。安装后, /autograph:research 命令在 OpenClaw 的任意工作空间中全局可用。
  • Hermes :安装命令更为简洁: hermes skills install github:smixs/autograph/skills/autograph 。技能会被安装到 ~/.hermes/skills/ 目录下。需要注意的是,Hermes 可能不支持 Claude Code 风格的斜杠命令,你需要直接在聊天中通过技能名来调用其功能。
  • Codex :通过创建符号链接,将 .claude-plugin 目录链接为 .codex-plugin 目录,然后在 Codex 的代理配置中指向该路径即可。

选择建议 :如果你主要与 Claude Code 交互,并希望获得最便捷的安装和命令调用体验,首选 Claude Code 插件市场安装。如果你在本地深度使用 OpenClaw 或 Hermes 框架,并希望有更强的控制力和集成度,则选择对应的安装方式。对于开发者和喜欢一切尽在掌控的用户,直接克隆代码库并使用 uv 运行脚本是最灵活的方式。

4.2 自动化定时任务配置

知识库的维护贵在持之以恒。 autograph 的核心维护任务非常适合通过定时任务(cron)自动化。

4.2.1 任务规划

一个典型的自动化维护计划如下:

  • 每日任务(凌晨3点)
    1. 运行衰减计算 ( engine.py decay ):更新所有卡片的相关性和层级。
    2. 运行健康检查 ( graph.py health ):生成每日健康报告,发现问题(但不自动修复,需人工审查)。
  • 每周任务(周日凌晨4点)
    1. 运行去重 ( dedup.py ):合并一周内可能产生的重复内容。
    2. 重新生成内容地图 ( moc.py generate ):更新所有 MOC 索引页,反映知识结构的最新变化。

4.2.2 配置示例(以系统Cron为例)

在你的终端执行 crontab -e ,添加以下内容(请根据实际路径修改):

# 每天凌晨3点,运行衰减计算
0 3 * * * cd /home/user/my-vault && uv run /path/to/autograph/skills/autograph/scripts/engine.py decay . >> /tmp/autograph-decay.log 2>&1

# 每天凌晨3点05分,运行健康检查
5 3 * * * cd /home/user/my-vault && uv run /path/to/autograph/skills/autograph/scripts/graph.py health . >> /tmp/autograph-health.log 2>&1

# 每周日凌晨4点,运行去重和MOC生成
0 4 * * 0 cd /home/user/my-vault && uv run /path/to/autograph/skills/autograph/scripts/dedup.py . --apply >> /tmp/autograph-dedup.log 2>&1
30 4 * * 0 cd /home/user/my-vault && uv run /path/to/autograph/skills/autograph/scripts/moc.py generate . >> /tmp/autograph-moc.log 2>&1

这里使用了 >> 追加日志到文件,并 2>&1 将错误输出也重定向到同一日志文件,方便后续排查。

4.2.3 使用智能体框架的内置Cron

如果你使用 OpenClaw 或 Hermes,它们提供了更集成的 cron 功能,可以直接在智能体会话中调度任务,并能更好地处理环境变量和工具调用权限。具体命令示例在项目 README 中已给出。这种方式的好处是任务执行在智能体环境内,可以无缝使用智能体的其他工具和上下文。

4.3 从零开始引导一个混乱的仓库

面对一个已有成百上千个杂乱文件的 Obsidian Vault,如何开始使用 autograph ?项目提供的 /autograph:research 命令和引导工作流(bootstrap workflow)正是为此设计。

这个引导过程大致分为10个阶段,封装在 skills/autograph/references/bootstrap-workflow.md 中。其核心思想是“探索-生成-验证”的交互式循环:

  1. 探索 discover.py 脚本扫描你的 Vault,生成一份关于现有文件夹结构、文件命名模式、前端元数据使用情况的详细报告。
  2. 交互式分析 /autograph:research 命令会启动一个智能体,与你对话。它会基于探索报告,询问你关于这些文件的目的、你希望如何分类(例如,“ Projects/ 文件夹下的文件似乎都是关于工作的,你想把它们归类为 ‘project’ 类型吗?”)。
  3. 模式草案生成 :智能体根据你的回答,结合常见的最佳实践,生成一份初始的 schema.json 草案。
  4. 智能体群验证 :为了确保草案的合理性和覆盖度,系统可能会启动一个“智能体群”(swarm),让多个 AI 助手从不同角度(如组织性、可扩展性、与现有内容的契合度)评估这份草案,并提出修改建议。
  5. 批准与实施 :你将收到一份整合了所有建议的最终草案。批准后,系统会开始执行强制执行 ( enforce.py )、链接清理 ( link_cleanup.py )、去重 ( dedup.py )、丰富 ( enrich.py ) 等一系列操作,将你的混乱仓库逐步规范化。

这个过程不是全自动的魔法,而是人机协作的典范。你作为领域专家(最了解自己笔记的人)提供意图和决策,AI 作为执行力强大的助手,完成繁琐的分析、建议和批量操作。

5. 常见问题、排查与进阶技巧

5.1 安装与依赖问题

问题:运行脚本时出现 ModuleNotFoundError ,即使已安装 uv

  • 排查 autograph 强调“仅使用标准库”,但它的运行依赖 uv 作为 Python 环境/运行器。确保你是在项目 skills/autograph/ 目录下,或使用正确的绝对路径调用 uv run
  • 解决 :确认 uv 已正确安装且位于系统 PATH 中。尝试在脚本所在目录直接运行 uv run python -c "import sys; print(sys.version)" 检查 Python 版本(需 ≥ 3.11)。

问题:在 Claude Code 中安装了插件,但 /autograph:research 命令不生效。

  • 排查 :Claude Code 的插件可能需要重启或重新加载。检查插件管理界面,确认 autograph 插件已启用且版本正确。
  • 解决 :尝试在 Claude Code 中输入 /plugin reload autograph 。如果问题依旧,查看 Claude Code 的日志或控制台输出,可能有更详细的错误信息。

5.2 运行时报错与调试

问题: enforce.py graph.py health 报告大量“模式不匹配”错误。

  • 排查 :这通常是因为你的 schema.json 定义与仓库现状差异过大。可能是你定义了一个 allowed_statuses ,但现有文件使用了不在列表中的状态值;或者你定义了某个文件夹必须存放特定 card_type ,但里面的文件类型混杂。
  • 解决
    1. 先审计,后修复 :永远先运行 graph.py health (不带 --apply )和 enforce.py (不带 --apply )来查看问题报告,而不是直接应用修复。
    2. 迭代模式 :不要试图一次性定义完美的模式。根据错误报告,逐步调整你的 schema.json 。也许你需要放宽某些限制,或者先运行一个脚本将旧数据迁移到符合新模式的临时结构。
    3. 使用 --dry-run --interactive 模式 :一些脚本支持这些选项,让你可以预览更改或逐个确认。

问题: enrich.py swarm-links 运行失败,提示 API 密钥错误或超时。

  • 排查 :此功能需要调用外部 LLM API(通过 OpenRouter)。检查你是否设置了 OPENROUTER_API_KEY 环境变量,以及网络连接是否正常。
  • 解决
    export OPENROUTER_API_KEY="your-api-key-here"
    # 或者在运行命令前临时设置
    OPENROUTER_API_KEY="your-key" uv run enrich.py swarm-links /path/to/vault
    
    如果问题持续,可以尝试在 enrich.py 脚本中调整请求的超时时间,或者暂时跳过此步骤,手动建立关键链接。

5.3 性能与规模化考量

问题:我的 Vault 有上万文件,运行 engine.py decay graph.py health 非常慢。

  • 优化策略
    1. 增量处理 :检查脚本是否支持增量更新。 engine.py decay 理论上可以只处理自上次运行以来有变动的文件,但需要实现状态跟踪。目前可能需要全量计算。
    2. 调整运行频率 :对于超大型仓库,不必每天全量计算衰减。可以改为每周一次,或者仅对 active warm 层级的卡片进行每日计算, cold archive 的卡片降低计算频率。
    3. 并行处理 autograph 脚本是单进程的。对于计算密集型的 decay ,你可以考虑手动将 Vault 按文件夹拆分,用多个进程并行处理,但要注意最终结果的合并和写冲突。
    4. 硬件与缓存 :确保脚本在 SSD 上运行。Python 的 os.walk 和文件读取在 HDD 上是瓶颈。可以考虑为已解析的文件内容添加内存缓存。

问题:自动化脚本误操作,移动或修改了不该动的文件。

  • 黄金法则 始终使用版本控制(如 Git) 。在设置任何定时任务或运行任何带有 --apply 的命令之前,确保你的 Obsidian Vault 是一个 Git 仓库,并且当前更改已提交。
  • 恢复流程
    1. 立即停止定时任务。
    2. 使用 git status 查看更改。
    3. 使用 git diff 检查具体修改内容。
    4. 如果需要回滚,使用 git checkout -- . 恢复所有文件,或 git restore <file> 恢复特定文件。对于被移动到 .trash/ 的文件,可以直接从那里复制回来。

5.4 进阶定制与扩展

自定义卡片模板 autograph references/ 目录下可能包含卡片模板。你可以复制并修改这些模板,使其包含你惯用的 frontmatter 字段、标题格式或内容结构。然后,在智能体创建新卡片的流程中,指引它使用你的自定义模板。

集成外部数据源 autograph 的核心是处理 Obsidian Markdown 文件。你可以编写自己的“摄取”脚本,将来自其他应用(如 Readwise, Pocket, Raindrop.io)的数据转换为符合 schema.json 的 Markdown 文件,并放入指定的“收件箱”域。然后,定时运行 enforce.py enrich.py 即可完成自动化入库和连接。

调整遗忘曲线参数 :项目默认的衰减速率和半衰期是基于通用假设的。你可以通过长期运行 engine.py stats 来收集数据,观察不同类型卡片实际被访问和遗忘的模式。例如,如果你发现 learning 类卡片衰减得太快,你可以将它的 base_rate 从 0.010 调低到 0.007。这是一个需要结合个人记忆习惯进行调优的过程。

与 Obsidian 插件联动 :虽然 autograph 独立运行,但你可以利用它生成的元数据来增强 Obsidian 体验。例如,你可以用 tier 字段配合 Dataview 插件,创建一个仪表盘,实时显示 active , warm , cold , archive 各层级的卡片数量和列表。也可以用 relevance 字段来排序或过滤笔记,让最重要的知识总是浮在最上面。

更多推荐