Thought Forest 原始资料、阅读笔记到 RAG 的知识摄入流程

把外部原始资料先保存为可追溯 source,再经过阅读、提炼和原子化进入 Thought Forest 正式知识笔记,最后只导出整理后的知识供 BodySense RAG 使用。

#type / howto #status / growing #discipline / knowledge-base #discipline / learning #tech / ai

[!info] related notes

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:

![example](/vault-assets/example.png)

而不是把物理目录写死到每篇笔记中。配合 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 ""

也可以通过仓库级 .lfsconfigsources/** 默认不自动下载,再由使用者按需覆盖 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 能检索和追溯来源。

创建于 2026/8/23 更新于 2026/8/23