24 小时搭建个人知识管理系统:一份工程师的架构设计与落地拆解

传统的笔记 App 解决不了这个问题——它们没有知识关联,没有自动化,没有面试导向的复习机制。于是我花了一个周末,重新设计了整套个人知识管理架构。

为什么我要重新设计知识管理系统

我决定正式往 FDE(Forward Deployed Engineer)方向发力。这个角色需要同时覆盖四个知识域:扎实的系统架构底子、AI 工程化能力(RAG / LLM / Multi-Agent)、产品与商业判断、客户现场的咨询交付能力。

问题是,这四块知识之间联系非常紧密,但也各自有独立的深度。传统的做法是一边学一边记笔记,存进 Notion 或者 Bear,然后等到面试前再翻出来复习。我用这套方式做了两年,结论是:对于结构性知识积累,这套方式效率极低。具体体现在三个地方:

知识孤岛
每篇笔记独立存在,"RAG 系统"和"企业 AI 落地"之间的关联要靠记忆,没有工具帮你维持知识网络。
复习失控
学了 LangGraph,三周后面试被问到,想不起来。没有间隔重复机制,知识的遗忘速度比积累速度快。
无法量化
不知道自己哪块知识薄弱、哪块已经够用,学习计划全靠"感觉",没有数据驱动。

所以我的需求不是"记笔记",而是设计一套能自动关联知识、能提醒复习、能量化进度的系统。这是个工程问题,不是笔记 App 选型问题。

设计原则:工程师思维做知识管理

在动手之前,我先定了四条设计原则,这些原则后来直接决定了技术选型和目录结构:

模块化
每个知识领域独立管理,互不干扰,但能通过统一接口关联。对应到文件系统就是:清晰的分层目录 + 双向链接。
自动化优先
能让工具做的事情不手动做。知识摄取、间隔重复计算、学习路径排序,都应该是代码跑出来的,不是人工判断的。
面试导向
每篇笔记都有"FDE 应用场景"章节,强制把知识和实际交付场景挂钩。知识不能只停在理论层面。
可量化
每个知识模块有难度标注、掌握程度、复习周期,学习进度以 JSON 持久化,随时可以出报表。

整体架构:三层技术栈

整套系统分三层,每层职责清晰:

┌──────────────────────────────────────────────────────┐ │ 界面层 · Obsidian │ │ 双向链接 · 知识图谱可视化 · 模板系统 · 日历视图 │ └──────────────────────────────────────────────────────┘ ↑ 读写 Markdown 文件 ┌──────────────────────────────────────────────────────┐ │ 自动化层 · Python CLI │ │ 知识摄取 · 学习路径生成 · 间隔重复 · 面试模拟 │ └──────────────────────────────────────────────────────┘ ↑ 调用 API / 读写数据 ┌──────────────────────────────────────────────────────┐ │ 智能层 · AI 服务 │ │ Claude API · 向量数据库(Qdrant) · 知识图谱(NetworkX) │ └──────────────────────────────────────────────────────┘

这个三层结构的关键决策是:Obsidian 只做界面,不做逻辑。它负责展示 Markdown 文件、维护双向链接,但复杂的逻辑全交给 Python。这样的好处是 Obsidian 挂掉或者换掉,数据和逻辑层完全不受影响。

目录结构:FDE 能力金字塔的物理映射

目录结构不是随手建的,它直接对应 FDE 的能力模型。我先画了一张能力金字塔,然后把它映射成文件系统:

咨询交付层 · consulting-delivery/ 客户现场实战 · 变革管理 · 项目交付框架 · 风险评估
产品业务层 · product-business/ AI 产品思维 · 用户价值公式 · 市场定位 · PM 能力模型
AI 工程化层 · ai-engineering/ LLM 工程化 · RAG 系统 · Multi-Agent 编排 · 模型评估体系
技术基础层 · foundation/ 系统设计 · 数据库 · 云原生 · 微服务架构 · 高并发

每篇笔记放在对应层级的目录下,并且每篇笔记的头部都有统一的 YAML frontmatter,这是整套自动化能工作的基础:

--- type: concept category: ["ai-engineering", "rag-systems"] difficulty: intermediate # beginner / intermediate / expert tags: ["RAG", "向量检索", "FDE实战"] implementation_status: practical # theoretical / implementing / production_ready use_cases: ["企业知识库", "客户现场PoC"] related_concepts: ["LLM工程化实践", "Multi-Agent编排"] prerequisites: ["机器学习基础", "Python编程"] ---

implementation_status 这个字段是我自己加的,用来区分"只看懂了理论"和"真的在项目里用过"——面试时这个区别非常重要,Dataview 插件可以直接按这个字段筛出来复习。

自动化工具链:把重复劳动交给代码

整个自动化层是一个 Python CLI 工具,入口是 fde-cli,下面挂了四个核心子命令:

1. 知识摄取(ingest)

给定一个 PDF 或者 Markdown 文件,自动切块、生成向量嵌入、写入 Qdrant,同时在 Obsidian 目录里生成对应的结构化笔记草稿。核心代码大概长这样:

class FDEKnowledgeIngester: def process_source(self, source: dict) -> list: processor = self.processors[source["type"]] chunks = processor.process(source["path"]) # 每个 chunk 带上 frontmatter 里的元数据 return self._enrich_chunks(chunks, source["metadata"]) def index_knowledge(self, chunks: list): vectors = [self.embeddings.embed_query(c.text) for c in chunks] self.qdrant.upsert("fde_knowledge", self._make_points(chunks, vectors))

2. 学习路径生成(path)

读取所有笔记的 frontmatter,构建一张知识依赖图(prerequisites 字段就是有向边),然后做拓扑排序,输出"今天应该学什么、先学什么后学什么"的排好序的清单。这解决了一个很具体的问题:知识点之间有依赖关系,但大多数学习计划都假装这个依赖不存在

def _topological_sort(self, skill_gaps: list) -> list: G = nx.DiGraph() for module in skill_gaps: G.add_node(module["id"]) for prereq in module["prerequisites"]: G.add_edge(prereq, module["id"]) return list(nx.topological_sort(G))

3. 间隔重复(review)

基于 SM-2 算法,根据每次复习的质量评分(0–5)动态计算下次复习时间。所有复习记录存在 docs/review_data.json 里,运行 fde-cli review 就能看到今天有哪些笔记到期了。

def record_review(self, item_id: str, quality: int): item = self.review_items[item_id] result = self.sm2.calculate_interval( item.interval_days, item.ease_factor, quality, item.repetition_count ) item.interval_days = result["interval"] item.ease_factor = result["ease_factor"] item.next_review = self._add_days(result["interval"]) item.repetition_count += 1

4. 面试模拟(interview)

从题库里按类型权重抽题,每道题用 Claude API 评估你的回答,给出维度评分(技术准确性、业务关联、表达清晰度)和改进建议,结果写入 JSON 文件留档。面试报告有历史对比,能看到哪个维度在提升、哪个维度还在原地踏步。

24 小时落地清单

如果你想复刻这套系统,下面是我实际走过的时间线,每个阶段的目标和产出写得很具体,避免陷入"配置了半天什么都没做"的陷阱:

  • Hour 0–2
    目录设计 + Obsidian 初始化
    先画你自己的能力金字塔(不超过 4 层),把每一层映射成一个顶层目录。在 Obsidian 里打开这个文件夹,安装 4 个插件:Dataview(结构化查询)、Templater(模板)、Tasks(任务追踪)、Calendar(复习日历)。不要在这个阶段折腾主题和外观,这是最常见的时间黑洞。
  • Hour 2–6
    设计 frontmatter 规范 + 写第一批模板
    定义你自己的 frontmatter 字段,关键字段:typedifficultyimplementation_statusprerequisitestags。用 Templater 把这些字段固化成模板。写 3 种模板就够用:概念笔记、书籍笔记、面试题。模板写好后,用第一篇真实笔记测试一遍流程是否顺畅。
  • Hour 6–12
    搭 Python 环境 + 跑通间隔重复
    先只做间隔重复这一个功能:扫描所有 Markdown 文件读取 frontmatter,生成初始复习记录,实现 SM-2 算法,写一个 CLI 命令输出"今天该复习哪些"。这个功能独立、有即时反馈,是验证整套工具链能不能跑起来的最快路径。Qdrant 和 Claude API 的集成留到后面。
  • Hour 12–18
    迁移存量知识 + 测试 Dataview
    把原来零散的笔记迁移进来,重点是补上 frontmatter——这步比写内容重要,因为没有结构化元数据,后面所有自动化都失效。迁移完之后,用 Dataview 写几条查询测试:按 difficulty 筛、按 implementation_status 筛、找出所有 prerequisites 包含某个知识点的笔记。查询跑通说明结构是对的。
  • Hour 18–22
    接入 Claude API + 面试模拟跑通
    配置 .env 文件,加入 ANTHROPIC_API_KEY。实现面试模拟的最小版本:随机抽一道题,把你的回答发给 Claude,拿到评分和反馈,写入 JSON。第一版不需要漂亮的输出格式,能跑通闭环就行。
  • Hour 22–24
    建 Git 仓库 + 写 README
    初始化 Git,把 .env__pycache__、大文件(PDF)加进 .gitignore,提交第一版。README 里写清楚:这个项目是什么、目录结构是什么、怎么跑起来。这步容易被跳过,但两周后你自己都会忘记某些配置是干什么的。

踩过的几个坑

这套系统从零到可用大概花了一个周末,但期间踩了几个让我白白花掉 4–5 小时的坑,列在这里:

坑 1
先选工具再设计结构:花了两个小时研究用 Notion 还是 Obsidian 还是 Logseq,结论是工具不重要,目录结构和 frontmatter 规范才是核心。这两样东西想清楚了,用任何工具都能实现。
坑 2
一次性接入所有 AI 功能:第一版想同时做向量检索 + 面试模拟 + 学习路径生成,结果三个都没跑通。正确做法是一次只做一个功能,跑通了再加下一个。
坑 3
frontmatter 字段太多:第一版设计了 15 个字段,结果写每篇笔记时要花 5 分钟填元数据,写了两天就懒得填了。现在精简到 8 个核心字段,每篇笔记的元数据填写不超过 2 分钟。
坑 4
忽略 Windows 编码问题:Python 脚本在 Windows GBK 终端下运行时,中文输出乱码,导致调试时完全看不懂报错信息。加一行 sys.stdout.reconfigure(encoding="utf-8") 就解决了,但找到这个原因花了将近一小时。

现在这套系统能做什么

这套系统现在能做的事情:用自然语言检索跨层级的知识点,得到带上下文的结构化答案;按能力模型自动排出当日复习队列,不需要人工判断先看什么;跑完一次面试模拟后给出多维度评分和历史对比,清楚看到哪个维度在提升、哪个还在原地踏步。

更重要的是,知识之间的关联变得可见了。Obsidian 的图谱视图能清楚看到"RAG 架构"连着"LLM 工程化"连着"企业 AI 实施"——这张图比任何思维导图都能帮你理解你自己的知识结构。

如果你正在系统性地准备某一个方向的转型,我的建议是:别把时间花在选笔记 App 上,把时间花在设计你自己的知识分层结构上。结构设计好了,用什么工具都能跑起来。


这套系统的完整代码和目录结构在 GitHub 上公开,欢迎 fork 和提 issue。有问题也可以发邮件:shaoyanyan91@163.com