Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

163 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ObsiMind

基于 Karpathy LLM Wiki 模式的个人知识库系统。Claude Code 做知识管家,Obsidian 做可视化前端。

两大场景

  • 📚 知识整理:喂文章/PDF/剪藏,AI 编译成 wiki 概念网络
  • 🧑‍🏫 代码仓库教学:给 AI 一个开源项目,它陪你从 L0 全景一路到 L5 踩坑,对话自动沉淀进对应章节

前置要求


工作模型:三方分工

在上手之前先记住三方谁干什么,后面所有操作都是这三者在配合。

┌─────────────────┐       ┌──────────────────┐       ┌─────────────────┐
│   你(用户)    │       │   Claude Code    │       │    Obsidian     │
│                 │       │   (AI 管家)      │       │   (可视化前端)  │
│ 1. 扔素材       │──────▶│ 读 raw/          │       │                 │
│ 2. 打字提问     │       │ 写 wiki/         │──────▶│ 展示 + 导航     │
│ 3. 用 Obsidian  │       │ 写 outputs/      │       │ (你在这里看)    │
│    阅读 wiki/   │◀──────┼─ 修 CLAUDE.md ──┘       │                 │
└─────────────────┘       │   为准绳         │       └─────────────────┘
                          └──────────────────┘
  • 你只动三种文件:往 raw/ 扔素材、在终端跟 Claude 对话、在 Obsidian 里阅读 wiki/
  • AI 只动两种文件:读 raw/、写 wiki/ + outputs/
  • raw/ 永远不变:AI 绝不修改你丢进来的原始文件

快速开始(4 步)

Step 1. 用 Obsidian 打开知识库

只需要做一次。打开 Obsidian → Open folder as vault → 选择 obsimind 文件夹。

建议固定打开下面三个文件在侧边栏,作为"导航入口":

  • wiki/index.md — 总索引(最新添加、统计、主题领域)
  • wiki/log.md — 操作日志(AI 每次都写,看这个就知道它动了什么)
  • wiki/QUESTIONS.md — 待探索问题(你说"先到这"时 AI 会把问题存进来)

Step 2. 启动 Claude Code

打开一个终端:

cd ~/Desktop/obsimind   # 或你放 obsimind 的路径
claude

关键claude 命令必须在 obsimind/ 目录下启动,它才会自动读取同目录的 CLAUDE.md(AI 的操作手册)。

启动后你会进入 Claude Code 的对话界面。

Step 3. 扔素材 / 说指令

根据你的场景二选一(或同时都做):

场景 怎么做
📄 整理一篇文章 .md / .pdf / .txt 文件复制到 raw/articles/(或 raw/pdfs/),然后在 Claude 对话里说"处理下 raw 里的新文章"
💻 分析一个代码仓库 在终端跑 ./scripts/init-codebase.sh /项目绝对路径(软链进来),然后在 Claude 对话里说"分析仓库 X"
直接问问题 不需要扔素材,直接在 Claude 对话里提问,AI 会查 wiki + 联网补充

Step 4. 在 Obsidian 里读 AI 整理出来的结果

AI 回答你之后,会在 Obsidian 侧的 wiki/ 下产生新文件。你在 Obsidian 里有几种阅读路径:

  1. 最新添加:看 wiki/index.md 的"最近添加"表格,从最新一行点进去
  2. 按类型
    • wiki/sources/ — 每篇文章的来源摘要(每篇一页)
    • wiki/concepts/ — 文章里抽出来的通识概念
    • wiki/codebases/<repo>/00-overview.md — 某个代码仓库的学习入口
    • wiki/topics/ — 按领域做的金字塔导航页(文章/代码攒多了之后 AI 会自动建)
  3. 跟着链接跳:任何一个 wiki 页都有 [[相关概念]] 双链,点开就能串着看
  4. 关系图:Obsidian 左下角的"图谱视图"(Graph view)能看到整个知识网络

Step 5. 继续、健康检查、暂停

你说的话 AI 做什么
继续 / 上次没看完的 列出所有进行中的章节 + QUESTIONS.md 里待探索问题
健康检查 scripts/lint.py,汇报断链、孤儿、缺 frontmatter、代码仓软链失效等
先到这 把没答完的问题存到 QUESTIONS.md,章节进度保存,下次接着来

两种场景:文章 vs 代码仓库

场景 A:整理文章(INGEST / EXPLORE)

适用:看到一篇好文章、下载了一份 PDF、用 Web Clipper 剪藏了一个博客页。

流程

1. 把文件放进 raw/articles/ 或 raw/pdfs/ 或 raw/clippings/
2. 终端里跟 Claude 说:"处理下 raw 里的新文章"
3. AI 做 INGEST:
     - 读原文
     - 在 wiki/sources/<文章名>.md 写来源摘要(含原文核心观点)
     - 从原文抽概念,每个概念写到 wiki/concepts/<concept>.md
     - 抽关键实体(人/公司/产品),写到 wiki/entities/
     - 建立 [[Wikilink]] 交叉引用
     - 更新 wiki/index.md 的"最近添加"
     - 在 wiki/log.md 记一笔
4. 在 Obsidian 里阅读:
     - 入口选 wiki/index.md,找到刚加的那条,点进去
     - 或直接打开 wiki/sources/<文章名>.md
     - 沿着 [[链接]] 往下跳看每个概念

场景 B:学代码仓库(CODEBASE_INIT / CODE_TUTOR)

适用:想吃透一个开源项目(vllm / langchain / 你同事的代码仓)。

类似 zread.ai 的"小白陪学"体验:给 AI 一个代码仓库,它分层 L0~L5 陪你吃透,对话自动沉淀到 wiki。

B-1. 软链代码仓库(准备原料)

cd ~/Desktop/obsimind
./scripts/init-codebase.sh /绝对路径/到/你的/项目
# 例:./scripts/init-codebase.sh ~/Desktop/vllm
# 可选指定别名:./scripts/init-codebase.sh ~/Desktop/vllm my-vllm

脚本会在 raw/codebases/<项目名>/ 创建软链不复制源码(节省空间,且源码更新自动同步)。

B-2. 初始化教学大纲

在 Claude 对话里说:

分析仓库 vllm

AI 会执行 CODEBASE_INIT,三轮扫描(结构/架构/流程)后生成:

  • wiki/codebases/vllm/00-overview.md — L0 全景入口(含金字塔图)
  • wiki/codebases/vllm/curriculum.md — 六章学习大纲(L0~L5)
  • wiki/codebases/vllm/glossary.md — 项目专有术语表
  • wiki/codebases/vllm/qa-log.md — 追问索引

B-3. 在 Obsidian 里打开学习入口

AI 初始化完成后,你要去 Obsidian 里打开两个文件作为学习起点

  1. wiki/codebases/<项目名>/00-overview.md — 先看全景,建立宏观印象
  2. wiki/codebases/<项目名>/curriculum.md — 再看大纲,知道整条学习路径

B-4. 逐章陪学(CODE_TUTOR)

看过大纲后回到 Claude Code,说:

开始学 vllm 第 1 章

AI 执行 CODE_TUTOR,每章按:

  1. 预读(列出本章要理解的 3 件事 + 对应源码文件)
  2. 讲解(类比 → 代码片段 → 原理拆解)
  3. 自测题(2~3 个)
  4. 推荐拓展方向(3~5 个)

结果写入对应章节页:

  • L1 架构 → 01-architecture.md
  • L2 核心模块 → 02-modules/<模块名>.md(每模块一页)
  • L3 关键流程 → 03-flows/<流程名>.md
  • L4 设计模式 → 04-patterns/<模式名>.md
  • L5 踩坑 → 05-pitfalls.md

在 Obsidian 里跟着节奏读:AI 每写完一个章节页,你就在 Obsidian 里打开它看,不懂的回到 Claude 追问即可。

B-5. 追问(CODE_DIVE)

学习中任何不懂的都可以直接问,例如:

这个 scheduler.schedule() 具体怎么做的?

AI 执行 CODE_DIVE

  • 给出 raw/codebases/vllm/vllm/core/scheduler.py:123 这种精确定位
  • 画出调用链(谁调它、它调谁)
  • 答案追加到当前章节页的 ## FAQ(不会散到其他地方)
  • 通识概念(如 PagedAttention)同时写到 wiki/concepts/,建立双向 Wikilink

B-6. 暂停 / 恢复

先到这

→ 当前章节进度保存到 curriculum.md(状态改为"进行中"),未答完的问题进 QUESTIONS.md

继续

→ 下次说这个,AI 会合并列出所有进行中的章节 + 待探索问题,供你选择从哪恢复

B-7. 跨仓库对比(CODE_REFLECT)

当你学完 2+ 个相关仓库后:

vllm 和 sglang 在调度策略上有什么区别?

AI 生成 wiki/synthesis/comparison-scheduling.md 对比分析页。

B-8. 主题金字塔入口(TOPIC_COMPILE)

当某个领域累积了 2+ 仓库 + 5+ 概念后:

整理一下 AI Infra 领域的入口

AI 在 wiki/topics/ai-infra.md 自动编排金字塔导航页,版式对齐你手写的分层知识入口(定义 → 为什么重要 → N 层金字塔 → 学习路径 A/B/C/D)。

这就是你最终的"有逻辑有层次感"的个人知识库入口页

目录结构

obsimind/
├── CLAUDE.md              # 系统配置(Claude Code 的操作手册)
├── README.md              # 本文件
├── raw/                   # 原始素材(不可变)
│   ├── articles/          # 文章
│   ├── clippings/         # Web Clipper 剪藏
│   ├── conversations/     # 对话提取的知识
│   ├── codebases/         # 代码仓库软链(由 init-codebase.sh 创建)
│   ├── images/            # 本地图片
│   ├── pdfs/              # PDF 文件
│   └── notes/             # 随手笔记
├── wiki/                  # LLM 编译层(自动维护)
│   ├── index.md           # 总索引
│   ├── log.md             # 操作日志
│   ├── QUESTIONS.md       # 待探索问题
│   ├── concepts/          # 通识概念页
│   ├── entities/          # 实体页
│   ├── sources/           # 来源摘要
│   ├── synthesis/         # 综合分析(含跨仓库对比)
│   ├── topics/            # 主题聚合金字塔入口
│   ├── codebases/         # 代码仓库教学子库(L0~L5 分层)
│   │   └── <repo>/
│   │       ├── 00-overview.md
│   │       ├── 01-architecture.md
│   │       ├── 02-modules/
│   │       ├── 03-flows/
│   │       ├── 04-patterns/
│   │       ├── 05-pitfalls.md
│   │       ├── curriculum.md
│   │       ├── glossary.md
│   │       └── qa-log.md
│   └── templates/         # 页面模板
├── outputs/               # 输出层
│   ├── qa/                # 问答记录
│   ├── reports/           # 研究报告
│   └── learning/          # 代码仓库陪学会话归档
└── scripts/
    ├── lint.py            # 健康检查脚本
    └── init-codebase.sh   # 代码仓库软链脚本

操作指令速查

通识知识整理

你说的话 Claude 做的事
"处理下 raw 里的新文章" 读取、分类、提取、编译到 wiki
"XX 是什么" / "XX 和 YY 的区别" 搜索 wiki + 联网搜索 + 知识拓扑拓展
"帮我查下 XX" 先查 wiki,不够再联网
"健康检查" / "lint" 运行检查脚本,汇报问题
"总结下 XX 领域" 跨来源综合分析
"上次没看完的" / "继续" 从 QUESTIONS.md + 进行中章节恢复
"1 3"(数字编号) 继续深挖推荐拓展方向
"先到这" 保存待探索列表与章节进度

代码仓库教学

你说的话 Claude 做的事
"分析仓库 vllm" / "吃透 vllm" CODEBASE_INIT:扫描 + 生成 curriculum + overview
"开始学 vllm 第 1 章" / "继续学" CODE_TUTOR:按预读/讲解/自测章节化推进
学习中追问具体函数、类、机制 CODE_DIVE:path:line 定位 + 调用链 + 通识概念双写
"vllm 和 sglang 在 X 上的区别" CODE_REFLECT:跨仓库对比分析
"整理 AI Infra 领域入口" TOPIC_COMPILE:生成金字塔主题入口页

配置 Web Clipper

安装 Obsidian Web Clipper 浏览器插件后,设置保存路径为:

obsimind/raw/clippings/

这样浏览器中看到好文章一键剪藏,然后让 Claude 处理即可。


实用案例 1:理解一篇技术文章(FlashAttention 论文解读)

场景:朋友发给你一篇讲 FlashAttention 原理的文章(.md.pdf),你想吃透它,并让它的知识点永久沉淀。

Step 1. 放素材(30 秒)

# 假设文章在 ~/Downloads/flashattention-explained.md
cp ~/Downloads/flashattention-explained.md ~/Desktop/obsimind/raw/articles/

或者用 Finder 直接拖拽到 raw/articles/ 也行。

Step 2. 启动 Claude

cd ~/Desktop/obsimind
claude

Step 3. 对话(完整示例)

你:处理下 raw/articles 里的新文章

Claude:我读完了 flashattention-explained.md,这是一篇讲 FlashAttention 原理的文章。
        我生成了以下内容:

        - 来源摘要:wiki/sources/flashattention-explained.md
        - 新概念:
          - wiki/concepts/flash-attention.md
          - wiki/concepts/tiling.md
          - wiki/concepts/online-softmax.md
          - wiki/concepts/io-aware-algorithm.md
        - 更新了 wiki/index.md 的最近添加列表

        建议你从 wiki/sources/flashattention-explained.md 开始看,
        那里有原文的核心观点摘要和到各概念页的链接。

Step 4. 在 Obsidian 里打开 AI 写的文件看

在 Obsidian 侧边栏导航:
obsimind/
└── wiki/
    ├── sources/flashattention-explained.md  ← 从这里开始读
    └── concepts/
        ├── flash-attention.md                ← 原文的核心概念
        ├── tiling.md                         ← 相关技术
        ├── online-softmax.md
        └── io-aware-algorithm.md

每个页面都有 [[双向链接]],点任何一个 [[xxx]] 都能跳到对应概念页继续读。

Step 5. 追问深挖

读 wiki 时遇到不懂的,回到 Claude 继续问:

你:tiling 这个概念我还是不太懂,它和传统的 attention 计算有什么区别?

Claude:[详细解释 + 画图 + 代码示例]
        我把这个解释补充到 wiki/concepts/tiling.md 的"详细说明"段了,
        并且在 wiki/concepts/flash-attention.md 里也加了一段对 tiling 的说明。

        📌 推荐继续探索:
        1. memory-hierarchy — 理解 GPU 显存层次(SRAM vs HBM)
        2. recomputation — FlashAttention 如何用重算换显存
        3. fused-kernel — 算子融合的工程价值
        4. flashattention-v2 — V2 做了什么优化
        5. flash-decoding — 推理阶段的 FlashAttention 变种

你:1 3

Claude:好,我继续深挖 memory-hierarchy 和 fused-kernel……

Step 6. 暂停,下次继续

你:先到这,晚上接着看

Claude:好的。已经把以下问题存到 wiki/QUESTIONS.md:
        - recomputation 在 FlashAttention 里的具体实现
        - flashattention-v2 的改进点
        - flash-decoding 与推理的关系
        晚上你回来说"继续"就行。

最终在 Obsidian 里呈现的样子

wiki/
├── sources/flashattention-explained.md       ← 原文摘要(入口)
├── concepts/
│   ├── flash-attention.md                    ← 主概念(含 tiling 细节)
│   ├── tiling.md                             ← 含你追问后补充的解释
│   ├── online-softmax.md
│   ├── io-aware-algorithm.md
│   ├── memory-hierarchy.md                   ← 追问 1 衍生
│   └── fused-kernel.md                       ← 追问 3 衍生
├── QUESTIONS.md                              ← 存着待探索问题
└── log.md                                    ← 每次操作都有记录

你此时 Obsidian 的 Graph View 会看到一张由 FlashAttention 串起来的概念网络,点任何一个节点都能追溯到原文和追问链路。


实用案例 2:吃透一个开源代码仓库(vLLM 推理引擎)

场景:你想从零理解 vLLM 这个项目,已经把它 clone 到本地 ~/Desktop/vllm

Step 1. 软链代码仓库(5 秒)

cd ~/Desktop/obsimind
./scripts/init-codebase.sh ~/Desktop/vllm

脚本输出:

✅ 软链已创建:
   /Users/you/Desktop/obsimind/raw/codebases/vllm
   → /Users/you/Desktop/vllm

下一步:在 Claude Code 里对 ObsiMind 说:
   分析仓库 vllm

Step 2. 启动 Claude 并初始化大纲(1~2 分钟)

cd ~/Desktop/obsimind
claude

对话:

你:分析仓库 vllm

Claude:我正在扫描 raw/codebases/vllm……

        【结构扫描】
        - 主语言:Python(96%)
        - 入口:vllm/entrypoints/api_server.py, vllm/engine/llm_engine.py
        - 依赖:torch, ray, xformers, pydantic, fastapi

        【架构扫描】识别出 5 层:
        - entrypoints/ — HTTP/CLI 接口
        - engine/ — 核心调度引擎
        - core/ — 调度器、块管理
        - worker/ — 执行器(GPU 上跑的进程)
        - model_executor/ — 模型加载与前向

        【流程扫描】识别出 4 条主线:
        - 请求生命周期(请求进入 → 返回 token 流)
        - 服务启动流程
        - 调度循环(scheduler 每步做什么)
        - KV Cache 块管理

        我生成了:
        - wiki/codebases/vllm/00-overview.md  — 全景入口(含金字塔图)
        - wiki/codebases/vllm/curriculum.md   — L0~L5 学习大纲
        - wiki/codebases/vllm/glossary.md     — 项目术语表
        - wiki/codebases/vllm/qa-log.md       — 追问索引

        建议你先去 Obsidian 里打开 00-overview 和 curriculum 看一遍,
        然后回来说"开始学 vllm 第 1 章"。

Step 3. 在 Obsidian 里读全景和大纲(5 分钟)

打开顺序:
1. wiki/codebases/vllm/00-overview.md    ← 看金字塔图,建立宏观印象
2. wiki/codebases/vllm/curriculum.md     ← 看学习路线

Step 4. 开始 L1 架构章节

你:开始学 vllm 第 1 章

Claude:好,进入 L1 架构章节。

        【预读】本章你要理解的 3 件事:
        1. vLLM 的分层结构:entrypoints → engine → core → worker
        2. engine 和 worker 如何协作(Ray 进程模型)
        3. 一次请求的数据流向

        【讲解】

        类比:想象一个餐厅……
        - entrypoints = 前台接待
        - engine = 大堂经理(负责排队、派菜)
        - core.scheduler = 菜单调度员(决定先做哪道菜)
        - worker = 厨师(真正做菜 = GPU 前向)

        代码片段(raw/codebases/vllm/vllm/engine/llm_engine.py:132):
        [贴 20 行关键代码]

        原理拆解:
        1. 请求进入 → entrypoints 的 FastAPI 路由
        2. engine.add_request() 把请求入队
        3. engine.step() 循环:scheduler.schedule() → worker.execute_model()
        4. 每个 step 吐一批 token 回给客户端

        【自测题】
        1. engine.step() 为什么是"每步吐一批"而不是"一次吐完整个回答"?
        2. 如果把 scheduler 换成 FIFO,会发生什么?
        3. worker 放在独立进程的价值是什么?

        📌 推荐继续探索:
        1. 调度器内部逻辑(L2 scheduler 模块)
        2. Ray 进程模型(L2 worker 模块)
        3. KV Cache 块分配(L3 kv-cache 流程)
        4. 请求生命周期(L3 request-lifecycle 流程)
        5. Continuous Batching(L3 batching 流程)

        已更新:
        - wiki/codebases/vllm/01-architecture.md(新建)
        - wiki/codebases/vllm/curriculum.md(L1 状态:进行中)

Step 5. 在 Obsidian 里看 AI 刚写的章节 + 追问

打开 wiki/codebases/vllm/01-architecture.md,读完后不懂的回到 Claude:

你:scheduler 内部到底是怎么选下一步处理哪些请求的?

Claude:[CODE_DIVE 模式]
        定位:raw/codebases/vllm/vllm/core/scheduler.py:234 的 _schedule() 方法

        调用链:
        engine.step()
          └─ scheduler.schedule()
               └─ scheduler._schedule()
                    ├─ _schedule_prefills()
                    └─ _schedule_running()

        核心逻辑:[详细讲解]

        这里涉及到的"连续批处理(Continuous Batching)"是一个通识概念,
        我已经把通识解释写到 wiki/concepts/continuous-batching.md,
        同时在 wiki/codebases/vllm/01-architecture.md 的 ## FAQ 段
        加了一条针对 vllm 的具体实现说明。

        对话归档到:outputs/learning/vllm/01-architecture-20260417-1530.md

Step 6. 暂停

你:先到这,明天接着学 L2

Claude:好的。curriculum.md 里 L1 状态已改为"进行中",
        明天你说"继续"就会看到恢复选项。

Step 7. 隔天恢复

你:继续

Claude:你当前有 1 个进行中的学习和 2 个待探索问题:

        进行中:
        - [vllm] L1 架构(已读完基础,待追问:scheduler 细节)

        待探索(QUESTIONS.md):
        - vLLM 和 SGLang 在 KV Cache 上有什么设计差异?
        - Ray 在 vLLM 里具体怎么用的?

        想从哪个继续?

学完 2 个仓库后的跨仓库对比

等你同样把 SGLang 吃透(重复 Step 1~6),就可以说:

你:vllm 和 sglang 在 KV Cache 管理上有什么区别?

Claude:[CODE_REFLECT] 我对比了:
        - wiki/codebases/vllm/03-flows/kv-cache.md
        - wiki/codebases/sglang/03-flows/kv-cache.md

        生成对比分析到:wiki/synthesis/comparison-kv-cache.md

        主要差异:
        | 维度 | vLLM | SGLang |
        |------|------|--------|
        | 核心机制 | PagedAttention | RadixAttention |
        | ...

最终在 Obsidian 里呈现的样子

wiki/
├── topics/
│   └── ai-infra.md                               ← 金字塔总入口(TOPIC_COMPILE 生成)
├── codebases/
│   ├── vllm/
│   │   ├── 00-overview.md                        ← 全景
│   │   ├── 01-architecture.md                    ← L1
│   │   ├── 02-modules/{scheduler,worker,engine}.md  ← L2
│   │   ├── 03-flows/{request-lifecycle,kv-cache,batching}.md  ← L3
│   │   ├── 04-patterns/{ray-actor-model,async-step}.md  ← L4
│   │   ├── 05-pitfalls.md                        ← L5
│   │   ├── curriculum.md                         ← 进度表
│   │   ├── glossary.md                           ← 术语
│   │   └── qa-log.md                             ← 追问索引
│   └── sglang/{...}
├── concepts/
│   ├── continuous-batching.md                    ← 从 vllm 学习中沉淀
│   ├── paged-attention.md
│   ├── radix-attention.md
│   └── ...
└── synthesis/
    └── comparison-kv-cache.md                    ← 两个仓库的对比

最终你点开 wiki/topics/ai-infra.md,能看到一张类似 AI 知识整理 那样的分层金字塔,入口页 → 概念 → 代码仓库全部串起来,每一项都可以追溯到它最初来自哪篇文章或哪段源码。


常见问题

Q: 我已经扔文章进 raw/articles/ 了,但 Claude 不知道?

A: 确认你是在 obsimind/ 目录下启动的 claude 命令。如果还不行,直接说:读 raw/articles/<文件名>.md 并处理它

Q: init-codebase.sh: permission denied

A: 加执行权限:chmod +x scripts/init-codebase.sh

Q: Obsidian 里看不到新文件?

A: Obsidian 默认会自动同步,如果没刷新按 Cmd+R(macOS)重新载入 vault。

Q: 我想换个不同的仓库分析,之前那个要删掉吗?

A: 不用。直接 ./scripts/init-codebase.sh <新仓库路径>,多个项目在 raw/codebases/wiki/codebases/ 下并存互不影响。要删只需 rm raw/codebases/<old-repo>(删软链)+ rm -rf wiki/codebases/<old-repo>(删教学子库)。

Q: 怎么知道 AI 到底改了哪些文件?

A: 打开 wiki/log.md,每次操作都有详细记录(操作类型 / 触发 / 变更清单 / 摘要)。

致谢

灵感来自 Andrej Karpathy 的 LLM Wiki 方案

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages