Thought Forest 原始资料、阅读笔记到 RAG 的知识摄入流程
把外部原始资料先保存为可追溯 source,再经过阅读、提炼和原子化进入 Thought Forest 正式知识笔记,最后只导出整理后的知识供 BodySense RAG 使用。
[!info] related notes
- 前置笔记:
- 相关 MOC: posture-pain-rehabilitation-moc、rag-engineering-moc
- 相关资源: Git LFS
Thought Forest 原始资料、阅读笔记到 RAG 的知识摄入流程
目标
这套流程的目标不是把 Thought Forest 变成一个“抓网页后直接向量化”的数据仓库,而是保持它作为个人学习知识库的核心定位:
External Source
→ Raw Source
→ 阅读 / 理解 / 核对
→ Reading Note / 原子知识笔记
→ Thought Forest Knowledge Graph
→ RAG Export
→ BodySense Targeted RAG
核心原则:原始资料负责保留上下文和出处,正式知识笔记负责表达自己已经理解并能够复用的知识,RAG 默认消费正式知识笔记而不是整份原始资料。
为什么要分 Raw Source 与 Knowledge Note
如果直接把论文、网页、视频转写全文送入 RAG:
- 来源质量参差;
- 同一观点可能重复出现;
- 原文可能包含大量背景、广告、讨论和无关文本;
- 视频 UP 主、博客与 clinical guideline 容易被 similarity 混成同一级证据;
- 后续很难回答“这是不是我真正理解和认可的知识”。
经过阅读笔记层以后:
source expression
→ human/AI-assisted understanding
→ explicit claim
→ boundaries / uncertainty
→ relation to existing knowledge
这更符合 Thought Forest 的长期知识组织方式。
最终仓库分层
当前正式采用下面的职责边界:
thought-forest/
├─ z/ # 正式知识笔记,长期知识 Source of Truth
│
├─ assets/ # 结构化资产笔记:host / service / project / network 等
│
├─ sources/ # 支撑知识的原始资料与普通附件;默认不进入正式知识索引
│ ├─ attachments/ # Obsidian 默认附件:图片、GIF、PDF 等
│ ├─ raw/ # 外部原始资料
│ │ ├─ articles/
│ │ ├─ books/
│ │ ├─ webpages/
│ │ ├─ videos/
│ │ └─ datasets/
│ └─ derived/ # 从原资料提取出的文本型中间产物
│ ├─ transcripts/
│ ├─ ocr/
│ └─ extracts/
│
├─ docs/ # 知识库规范与架构
└─ generated/ # 可重新生成的知识索引 / RAG export
几个目录不能混淆:
assets/
= 结构化基础设施 / 项目资产笔记,不是普通图片目录
sources/raw/
= 我原来拿到了什么
sources/derived/
= 从原资料机器提取出了什么
sources/attachments/
= Obsidian 笔记直接引用的媒体与附件
z/
= 我理解后决定长期保留什么
因此历史 attachments/images/ 应收敛到 sources/attachments/;历史上误放在 assets/ 下、实际只是展示图片的文件也应迁入 sources/attachments/ 的适当子目录。assets/ 保持结构化资产语义。
Obsidian 附件策略
Obsidian 的默认附件路径统一为:
sources/attachments
而不是只面向图片的 attachments/images。这样未来拖入 PNG、GIF、PDF、SVG 或其他附件时都有统一入口。
笔记优先继续使用 Obsidian basename WikiLink:

而不是把物理目录写死到每篇笔记中。配合 Obsidian alwaysUpdateLinks,以后调整附件物理位置的成本更低。
一个 Source Package 应该包含什么
不要只有一个匿名 PDF 或 GIF。至少保留轻量 metadata:
source_id: source-2026-xxxx
title: ...
source_type: article | webpage | video | book | guideline
canonical_url: ...
author: ...
publisher: ...
retrieved_at: ...
language: zh-CN
license: unknown | CC-BY-4.0 | ...
redistribution: unknown | allowed | restricted
content_sha256: ...
如果是视频:
original video / URL
→ extracted audio(可选)
→ ASR transcript
→ timestamps
如果是网页:
canonical URL
+ 可保存的 snapshot / PDF / markdown
+ fetched_at
Source metadata 的价值是以后能够回到原文,而不是让它自动获得“可信”标签。
阅读一份资料的标准流程
1. 保存 Source
保留:
- 原始 URL;
- 标题、作者、时间;
- 本地原始文件(如果适合并且允许);
- transcript / OCR;
- 来源与许可信息。
大体积二进制由 Git LFS 管理,不进入普通 Git blob history;文本型 metadata、transcript 和 OCR 结果仍由普通 Git 管理。
2. AI 先做 source-grounded 阅读
AI 阅读时必须明确区分:
Source explicitly says X
Source implies Y
AI / reader inference Z
Outside knowledge W
默认只根据当前 Source 整理,不用模型常识偷偷补全来源没有说的内容;需要扩展时,单独标成“外部补充”。
3. 生成 Reading Note
Reading Note 不是“全文换句话说”。建议整理:
- 这份资料在回答什么问题;
- 核心结论;
- 关键机制;
- 适用边界;
- 不确定、冲突或作者没有证明的部分;
- 对已有 Thought Forest 哪些概念有增量;
- 值得继续查的 primary source / guideline。
必要时保留少量短引用和页码 / timestamp,主要内容使用自己的表述。
4. 判断是否需要进入正式原子笔记
不是每一份 Source 都应该生成一个新的长期知识页。
如果现有笔记已经回答同一个问题:
Reading Note
→ 补充 existing z/note.md
如果出现新的稳定问题:
Reading Note
→ 新建 concept / synthesis / howto / debug
如果只是暂时观察:
保留 source / journal
→ 不强行原子化
这样避免“读一篇文章就创建一篇永久孤岛笔记”。
Source 与正式笔记的关系
推荐保持:
Raw Source 1 ─┐
Raw Source 2 ─┼→ Concept / Synthesis Note
Raw Source 3 ─┘
而不是:
Raw Source 1 → Summary 1
Raw Source 2 → Summary 2
Raw Source 3 → Summary 3
前一种结构最终形成“围绕问题组织的知识”;后一种结构容易退化成“资料收藏夹”。
对 BodySense 最重要的额外字段
康复 / 体态笔记如果未来希望进入 BodySense RAG,可以在 export 阶段从正文、标签和 source relation 派生:
body_region
symptom_family
knowledge_kind
intervention
assessment
contraindication
red_flag
source_refs
authority / review status
这些可以存在机器生成索引层,不需要为了 BodySense 把每篇人类笔记 frontmatter 变得很重。
RAG 应该消费哪一层
默认:
z/ curated notes
→ allowlist health / rehabilitation / anatomy / exercise
→ normalize
→ chunk
→ embed
→ knowledge snapshot
原始资料只作为:
- provenance;
- citation 回查;
- 需要时的 secondary retrieval;
- 重新阅读 / 重新生成知识笔记的输入。
不建议默认:
sources/**/*
→ 全部 embedding
否则又会把“知识学习层”和“资料归档层”重新混在一起。
BodySense 中的两级检索
一级:Curated Knowledge
优先检索 Thought Forest 的正式知识笔记:
EvidenceGap
→ curated note search
→ relevant knowledge
二级:Raw Source Expansion
只有当一级知识不足,或者需要核对原始证据时:
curated note
→ source_refs
→ raw source / primary source
这样既能保持 RAG 干净,又不会丢失原始 provenance。
Git LFS 在个人知识库里的最终定位
对于 Thought Forest,Git LFS 是 sources/ 二进制资料的默认存储方式,因为这些文件本质上仍然属于个人知识仓库的版本化附件,而不是独立产品 CDN。
但不要把整个 sources/** 一刀切交给 LFS。规则是:
二进制原始资料 / 媒体
→ Git LFS
Markdown / TXT / JSON / YAML / XML / HTML / transcript / OCR
→ 普通 Git
推荐由 .gitattributes 跟踪这些二进制类型,例如:
sources/**/*.png
sources/**/*.jpg
sources/**/*.jpeg
sources/**/*.gif
sources/**/*.webp
sources/**/*.avif
sources/**/*.pdf
sources/**/*.mp4
sources/**/*.mov
sources/**/*.webm
sources/**/*.mkv
sources/**/*.mp3
sources/**/*.wav
sources/**/*.m4a
sources/**/*.flac
sources/**/*.epub
sources/**/*.zip
sources/**/*.docx
sources/**/*.pptx
sources/**/*.xlsx
SVG 默认保留普通 Git,因为它是文本格式、通常体积较小且可 diff;真正出现超大 SVG 时再单独处理。
默认 clone 不拉大文件
Git LFS 可以跳过自动下载:
GIT_LFS_SKIP_SMUDGE=1 git clone <repo>
之后按需拉取:
git lfs pull -I "sources/attachments/**" -X ""
git lfs pull -I "sources/raw/articles/**" -X ""
也可以通过仓库级 .lfsconfig 让 sources/** 默认不自动下载,再由使用者按需覆盖 include/exclude。
不为当前小体积历史重写 Git
历史中已经进入普通 Git blob 的旧图片不为了几十 MiB 的收益执行 git lfs migrate import。
原则:
旧 commit
→ 保持原样
本次迁移后的当前文件和未来新增二进制
→ Git LFS
只有未来仓库历史真的膨胀到明显影响 clone / storage 时,再专门计划 history rewrite。
版权与个人学习边界
“用于个人学习”与“公开再分发”不是一回事,也不要把下面两个过程等价:
我写了自己的学习笔记
≠ 原始资料的版权自动消失
更安全的长期习惯是:
- 正式笔记使用自己的语言总结事实、机制和理解;
- 原文只保留必要短引用并注明来源;
- 图片、GIF、整份 PDF / 视频仍保留自己的原始许可信息;
- 对不允许再分发的原始资料,不因为生成了 summary 就把原始文件公开;
- 如果 BodySense 未来公开或商业化,RAG 导出层应再次执行 source/license policy,而不是假设个人 Vault 中的一切都能进入产品。
适合 BodySense 的实际例子
找到一份“lumbar radiculopathy exercise / red flag”资料
↓
保存 PDF / 网页 / video 到 sources/raw/
↓
ASR / OCR 文本进入 sources/derived/
↓
记录 source metadata
↓
AI 只基于该资料生成 reading note
↓
自己复核
↓
补充到:
- 坐骨神经相关症状
- 神经症状 red flags
- intervention stop conditions
↓
这些 z/ 知识笔记进入 BodySense knowledge snapshot
↓
Diagnosis 出现 EvidenceGap
↓
Targeted RAG 检索整理后的知识
↓
需要核对时通过 source_refs 回到原文
AI 可以承担什么
以后可以形成一个固定工作流:
你提供 URL / PDF / 视频 transcript
→ AI 阅读原资料
→ 搜索 Thought Forest 是否已有同主题笔记
→ 给出 source-grounded reading note
→ 将稳定知识补入现有笔记或创建新笔记
→ 建立 source / note / MOC 关系
→ 更新索引
这样 AI 是“阅读和整理助手”,不是把下载目录机械转换成 embedding 的 ETL 脚本。
最终不变量
Raw Source
≠ Knowledge Note
Summary
≠ Copy
Personal Knowledge
≠ Clinical Authority
Personal-use archive
≠ automatically redistributable archive
RAG Corpus
≠ Whole Vault
assets/
≠ media attachments
sources binary
→ Git LFS
sources text
→ normal Git
Curated note first
→ raw source when needed
长期目标是让 Thought Forest 同时拥有两种能力:人能学习和回看,Agent 能检索和追溯来源。