
大家好,我是 Ai 学习的老章
之前 Karpathy 分享了一个用 LLM 构建个人知识库的思路,叫 LLM Wiki,在推上引发了很大讨论,我之前也介绍过三个大佬对知识管理的不同理解
基于大模型、SKills 的知识管理
他们的方案都很优雅,但大多数人确卡在了第一步,这个问题我已经用skills
完美解决了,而且也迭代了几个版本,目前这个很好用了,分享给大家。
简单说,Karpathy 提出了一个三层架构来做个人知识库:
核心理念是"编译式知识库"——新素材进来时,LLM 会读取、提取、整合到现有知识网络中,持续更新,形成复利
听起来很美对吧?但我发现一个现实问题:
Karpathy 说得轻巧——"把素材丢进 raw 文件夹就行"。但实际操作中,把网页内容高质量地保存到本地,这件事本身就很难
我之前用的是 Obsidian Web Clipper 插件(之前文章介绍过),一键把网页转成 markdown 保存
用了一段时间后发现几个硬伤:
1. 只能硬转 markdown,丢失大量信息
Web Clipper 做的是"当前页面→markdown"的单层转换
但很多高质量文章里,正文中嵌入的链接本身也是重要素材——比如一篇 AI 综述里引用了 5 篇论文、3 个 GitHub 仓库,这些链接背后的内容同样有价值
Web Clipper 只会把它们保留为超链接文本,不会帮你展开
2. 图片处理是个大坑
Web Clipper 保存的图片本质上还是原始外链:
3. 没有结构化组织
抓下来就是一个孤零零的 .md 文件,没有索引、没有关联关系、没有来源追踪
这就导致了一个尴尬的局面:你以为存了知识,其实只存了一堆半残的文本
为了彻底解决这个问题,我写了一个 Agent Skill 叫 web-pack——网页素材包采集
设计理念是:不只"剪藏"一个页面,直接一把梭哈"采集"一个主题的完整素材包
给 AI Agent 一组同主题的链接,它会:
每次任务会生成一个独立的素材包文件夹:
YYYY-MM-DD-主题名/
├── README.md # 素材包概览
├── 00-research-brief.md # 研究简报
├── 01-link-inventory.md # 链接清单(全量)
├── 02-image-inventory.md # 图片清单
├── 03-reading-map.md # 阅读地图(关系图)
├── MAIN-01-入口正文.md # 入口页面正文
├── LINKED-02-相关链接.md # 正文中展开的相关链接
└── assets/ # 本地图片资源
这个结构本身就是 Karpathy 所说的 Raw 层的理想形态——有索引、有关联、有本地化资源
我设计了一套分层抓取策略,确保尽可能多地拿到内容:
jina 作为兜底Jina Reader 只在前面都失败的情况下才启用,避免滥用
不是所有链接都值得展开,我在 Skill 里定义了判断规则:
优先展开的:
直接跳过的:
所有正文图片下载到 assets/ 目录,markdown 中统一用本地相对路径引用,完全不需要担心:
而且收尾阶段还会自动检查——如果有任何非自有图床的外链图片残留,会自动调用图床上传 Skill 处理
直接跟 Agent 说"帮我采集这几个链接的素材",Agent 会自动识别并调用
几个关键参数:
--max-depth 1:入口 + 入口正文里的相关链接(默认推荐)--max-depth 2:要深挖时使用--max-pages 80:控制总页面数,防止无限展开--same-domain-only:只采同域内容
1-web-pack vs Web Clipper 对比流程图
维度 | Obsidian Web Clipper | web-pack |
|---|---|---|
采集深度 | 单页面 | 入口 + 正文相关链接递归展开 |
图片处理 | 保留外链 | 全部下载到本地 |
结构化 | 无 | 研究简报 + 链接清单 + 阅读地图 |
噪音过滤 | 有限 | 智能过滤广告/导航/页脚 |
失败兜底 | 无 | HTTP → GitHub API → Jina Reader |
适合场景 | 快速剪藏单篇文章 | 深度采集一个主题的完整素材 |
有了高质量的 Raw 层,Karpathy 那套 Wiki 编译逻辑才能真正跑起来
垃圾进垃圾出——如果你的原始素材就是一堆半残的 markdown、裂掉的图片、断掉的引用,LLM 再聪明也编译不出好的 Wiki
我的实践路径是:
1-web-pack 采集高质量的 Raw 素材包Raw 层是地基
地基不牢,上面建什么都是空中楼阁
Skill 的完整代码我已经开源,感兴趣的可以去看看
