BodySense 知识来源、RAG 摄入与媒体资产架构
把 Thought Forest、开放医学证据、专业索引、视频转写与 GIF/图片资产组织成 BodySense 可治理的 RAG 数据源和媒体存储架构。
[!info] related notes
BodySense 知识来源、RAG 摄入与媒体资产架构
核心结论
BodySense 不需要先拥有一个“包罗万象的医学知识库”才开始做 RAG。更现实的路线是:
小而可信的 seed corpus
→ 规范化来源、许可、版本与可信度
→ 用真实 Diagnosis / Treatment EvidenceGap 驱动 targeted retrieval
→ 持续补知识缺口
真正要避免的是:
把网上能抓到的文本全部向量化
→ similarity 高就当成医学事实
对于 BodySense,knowledge acquisition 也是 governance 的一部分。
同时,文字知识与 GIF / 图片 / 视频片段应当彻底分离:
Git / Thought Forest
= Markdown、manifest、source metadata、知识图谱
Object Storage
= GIF、WebP、图片、视频、PDF 等大对象
这样 Git clone 默认就是轻量文字仓库;媒体按需下载或通过 CDN / 对象存储 URL 读取。
先纠正一个术语:视频转文字是 ASR / STT
以前“下载 B 站视频 → 音频转文字”的流程,本质是:
video
→ audio extraction
→ ASR / STT
→ transcript
→ information extraction
不是 TTS。TTS 是 Text-to-Speech,方向相反。
这类视频转写可以继续保留,但应该进入低可信度来源层,而不是直接成为 Diagnosis authority。
Thought Forest 可以作为 BodySense 的 seed corpus
当前 Thought Forest 已经有:
- 体态、疼痛与康复 MOC;
- 头前伸、骨盆前倾/后倾、骨盆旋转、髋内旋、梨状肌综合征、膝外翻等问题页;
- 功能解剖 MOC;
- 训练动作与方案 MOC;
- 运动康复 以及 PEDro、Physiopedia、AAOS、NHS、E3 Rehab 等资源入口。
因此 Thought Forest 不是“没有知识”,而是还缺:
- source authority 分层;
- license / commercial-use 标记;
- machine-readable RAG export;
- claim / evidence 粒度;
- media asset manifest;
- 与 BodySense Evidence provenance 的版本绑定。
不建议 BodySense 直接读取整个私人 Vault
更好的边界:
Thought Forest
↓ allowlist / export
health + rehabilitation notes
↓ normalized snapshot
BodySense Knowledge Ingestion
↓
Postgres / pgvector
原因:
- Vault 中存在大量与 BodySense 无关内容;
- 私人笔记不应该天然进入产品运行时;
- 需要形成可 replay 的知识 snapshot;
- BodySense 应依赖稳定的数据契约,而不是 Obsidian 文件结构。
来源分层:不要把所有知识看成同一级
推荐至少分四层。
Tier A:可批量摄入的开放 / 明确授权专业资料
目标:真正进入 BodySense 长期知识库。
优先考虑:
- PMC Open Access Subset 中许可明确允许目标使用方式的文章;
- NCBI Bookshelf 中 public domain 或明确可复用的具体出版物;
- 其他明确 CC BY / CC0 / compatible license 的医学、解剖、康复资料;
- 合法可复用的政府公开资料。
注意:
“网页可以免费阅读”
≠
“允许批量抓取并重新分发 / 商用”
必须逐源记录 license。
Tier B:高质量专业发现层
例如:
- PEDro;
- Physiopedia;
- AAOS OrthoInfo;
- NICE / 专业 guideline 网站;
- Physiotutors;
- E3 Rehab。
这一层很适合:
发现主题 / guideline / original paper
→ 保存 metadata + canonical URL
→ 必要时人工筛选或 query-time fetch
默认不要把整个站镜像到自己的 RAG 中。
尤其 Physiopedia 自身也强调它通常属于 secondary source,应尽量追到 primary source。
Tier C:Thought Forest 自有知识
这是非常适合 Demo 和个人版 BodySense 的来源,因为内容是自己的,组织也已经围绕真实学习和使用场景形成。
但需要明确:
personal curated note
≠ peer-reviewed clinical evidence
可以给它高“相关性”,但不能因此给高“临床权威性”。
Tier D:视频 / 博客 / UP 主内容
包括:
Bilibili / YouTube
→ ASR transcript
→ structured extraction
可用于:
- 发现动作;
- 发现术语;
- 发现可能的 mechanism;
- 生成搜索 query;
- 丰富低风险教育内容。
不建议单独用于:
- red flag;
- diagnosis rule;
- contraindication;
- 高风险 Treatment authorization。
一个实际可用的 Source Contract
建议每个知识源至少记录:
source_id: pmc-xxxx
source_type: journal_article
title: ...
canonical_url: ...
authority_tier: A
publisher: ...
license: CC-BY-4.0
commercial_use: true
redistribution: true
retrieved_at: 2026-08-23
source_version: ...
content_sha256: ...
review_status: imported
language: en
重要字段不是为了“整理好看”,而是为了以后能回答:
这条 Evidence 来自哪里?
当时用的是哪个版本?
现在是否仍允许使用?
能否在产品中展示原文或媒体?
Chunk 不能只有 text + embedding
BodySense 的 chunk 至少应携带:
chunk_id: ...
source_id: ...
body_region: [hip, pelvis]
knowledge_kind: contraindication
condition: ...
symptom: ...
intervention: ...
red_flag: false
authority_tier: A
license: CC-BY-4.0
source_version: ...
这样 Targeted RAG 才能做:
EvidenceGap
→ source / body-region / kind filter
→ vector / lexical retrieval
→ admissibility
→ grounding
而不是只有“相似度最高的五段文字”。
Demo 阶段应该多大
第一版不需要百万文档。
更实际的目标:
10~20 个高频 body region / symptom family
×
每个主题 5~15 个高质量 source / curated note
也就是先做到约几十到几百个可靠 document,配合几百到几千个 chunks。
它已经足够测试:
- targeted RAG;
- citation;
- source filtering;
- evidence provenance;
- grounding;
- unresolved evidence gap;
- Diagnosis / Treatment demo。
RAG 的 demo 价值来自检索行为和证据链真实,而不是知识库体积大。
优先知识主题
针对 BodySense 当前定位,优先顺序可以是:
- anatomy / biomechanics 基础;
- symptom + body region;
- differential hypothesis;
- assessment / clinical test;
- red flags / escalation;
- intervention / exercise;
- dosage / progression / regression;
- contraindication / stop condition;
- prognosis / outcome monitoring。
其中 5、8 的权威来源要求应高于普通动作说明。
外部数据获取的推荐方式
PMC Open Access Subset
这是非常适合做程序化 corpus 的来源。
官方提供:
- FTP;
- Cloud Service;
- OAI-PMH;
- E-Utilities;
- BioC API;
- OA Web Service API。
而且 Open Access Subset 明确按许可分组:
Commercial Use Allowed
Non-Commercial Use Only
Other
如果 BodySense 未来可能商业化,第一阶段最好只摄入:
CC0 / CC BY / CC BY-SA / 其他明确允许 commercial use 的内容
NCBI Bookshelf
可用于:
- anatomy;
- pathophysiology;
- clinical reference;
- government / public-domain manuals。
但 Bookshelf 中不同出版物版权不同,不能看到 NCBI 域名就默认可复制。应读取每个 title 的 copyright / permission。
另外不要爬站式批量抓网页;使用官方 OAI / FTP 等允许的批量渠道。
PEDro
PEDro 是很好的 evidence discovery layer:
- randomized controlled trials;
- systematic reviews;
- clinical practice guidelines;
- trial quality ratings。
适合作为:
clinical question
→ PEDro 找高质量 record
→ 定位 guideline / systematic review / primary study
→ 再按原始来源许可摄入全文或元数据
不应简单理解成“PEDro 页面全部下载下来就是知识库”。
Physiopedia
很适合:
- 快速建立 topic map;
- 找 assessment 名称;
- 找 primary references;
- 找可能的 exercise / media。
但要保留页面与媒体各自 license;不要假设一个站点内所有图片都具有同一种授权。
图片、GIF、视频应该从 Git 中分离
推荐 North Star:
thought-forest / BodySense Git
├── markdown
├── source manifests
├── media manifests
└── scripts
Object Storage
├── exercise/*.webp
├── exercise/*.gif
├── anatomy/*.webp
├── video/*.mp4
└── source-pdf/*.pdf
Git 中只保存:
asset_id: exercise-wall-slide-v1
kind: exercise-demo
object_key: exercise/wall-slide/v1/demo.webp
mime: image/webp
sha256: ...
bytes: 183204
source_url: ...
license: CC-BY-SA-4.0
attribution: ...
exercise_id: wall-slide
body_region: [shoulder, scapula]
不要在每篇 Markdown 中硬编码 Cloudflare / Backblaze 的完整 URL。
优先引用:
asset://exercise-wall-slide-v1
或 stable asset ID。
运行时由 Asset Resolver 转换成:
https://media.example.com/exercise/wall-slide/v1/demo.webp
这样未来换对象存储不需要改所有笔记。
为什么优先 Cloudflare R2
对于 Thought Forest / BodySense 的 GIF、图片、PDF、小视频,R2 的特征非常适合:
- S3-compatible;
- 适合脚本上传 / 同步;
- 可绑定自有域名;
- 标准存储存在免费额度;
- Internet egress 不收费;
- Git 仓库不会膨胀。
Backblaze B2 也可以作为替代方案。
不把 Git LFS 当首选运行时媒体库
Git LFS 能解决 Git history 被大二进制污染的问题,并且可以做到 clone 时不下载 LFS object。
例如概念上:
GIT_LFS_SKIP_SMUDGE=1 git clone ...
以后再执行 LFS pull。
但对于产品媒体:
Object Storage + CDN / custom domain
通常比:
Git LFS + bandwidth quota
更自然。
Git LFS 更适合“这些二进制本质上仍然属于源码版本的一部分”;R2 更适合“这些对象是产品运行时资源”。
Git clone 默认只拉文字
如果媒体完全不进入 Git,那么天然实现:
git clone thought-forest
→ 只得到 Markdown + metadata + manifests
需要媒体时:
pnpm assets:pull
或者:
pnpm assets:pull --scope rehabilitation
pnpm assets:pull --exercise wall-slide
下载到:
.cache/media/
并写入 .gitignore。
这个模型比把图片放 Git 后再想办法 sparse checkout 更简单。
媒体来源:Wikimedia Commons 很适合做第一批
Wikimedia Commons 上的大多数媒体具有可复用许可或属于 public domain,但每个文件的 license / attribution requirement 都可能不同。
因此自动导入时必须同时抓:
- author;
- canonical file page;
- license;
- attribution;
- original file URL;
- sha256;
- local/object-storage key。
不要只下载二进制文件而丢掉 license provenance。
对于动作演示,优先顺序可以是:
自己制作 / AI 生成且权利清晰
→ Wikimedia Commons / 明确开放许可媒体
→ 获得明确授权的专业媒体
→ 仅外链、不可复制的第三方媒体
不建议直接 hotlink 第三方媒体
即使技术上可以,长期也有问题:
- URL 失效;
- 来源站限流;
- 对方更换文件;
- 无法绑定 immutable version;
- 用户隐私会暴露给第三方域;
- license / attribution 容易丢失。
对于允许再分发的媒体,更稳妥的是:
下载
→ verify license
→ hash
→ 上传自己的 object storage
→ 保存 original source + attribution
Thought Forest 到 BodySense 的推荐数据流
Thought Forest source notes
│
├─ curated health notes
├─ resource links
└─ media manifests
↓
Knowledge Exporter
↓
Normalized Knowledge Snapshot
├─ source.jsonl
├─ chunks.jsonl
└─ assets.jsonl
↓
BodySense Ingestion
↓
PostgreSQL + pgvector
↓
EvidenceGap-driven Targeted RAG
↓
Evidence + provenance
这个 snapshot 应有版本:
knowledge_snapshot_id
历史 run 记录:
knowledge_snapshot_id
source_id
source_version
chunk_id
asset_id(若使用媒体)
这样才可以 replay。
一条知识不要同时承担“用户事实”和“外部事实”
例如 Thought Forest 中:
“骨盆旋转可能与髋控制相关”
进入 BodySense 后仍然是:
External / General Knowledge
不能因为检索到了这条知识,就推导为:
“当前这个用户存在某种髋控制缺陷”
这继续遵守 BodySense Targeted RAG 与 Evidence Provenance 的不变量:
population / general knowledge
≠ individual observed fact
第一阶段最现实的实施范围
Phase 1:Demo Corpus
- Thought Forest 康复 / 解剖笔记作为 seed;
- 手工筛 20~50 篇可信 external sources;
- 建 source/license metadata;
- 先覆盖 10 个左右高频问题;
- 做 50~150 条可测试 evidence documents。
Phase 2:开放证据自动摄入
- PMC OA API / FTP;
- topic query;
- license allowlist;
- dedupe;
- parse XML;
- chunk + metadata;
- embedding;
- snapshot。
Phase 3:媒体资产
- R2 bucket;
- media manifest;
- Asset Resolver;
- selective pull;
- license / attribution UI。
Phase 4:Evidence QA
- source hierarchy;
- review status;
- stale source policy;
- conflicting evidence;
- grounding eval;
- golden cases。
最终心智模型
Huge corpus
≠ good RAG
Free-to-read
≠ free-to-ingest
Retrieved
≠ admissible
≠ sufficient
Personal note
≠ clinical evidence
Git repository
≠ media object store
Media URL
≠ asset identity
Knowledge today
≠ historical knowledge snapshot
BodySense 第一阶段最值得做的不是继续“搜集大量文本”,而是把已经拥有的 Thought Forest 内容和少量高质量开放资料,变成有来源、有许可、有版本、有可信度、有 Evidence provenance 的小型真实知识库。