# KB — Personal Knowledge Base > LLM 驱动的第二大脑。原则:**默认全存,人类筛选,Agent 编译。** > > 不再依赖 Obsidian,不再需要 Notion。就是一堆 markdown 文件 + git。 ## 这是什么 KB 是一个三层知识管理系统: ``` 你分享的任何东西 → raw/ (自动保存) → wiki/ (编译后的知识) ↑ ↑ Agent 即时写入 Agent + 你一起消化 ``` - **raw/** — 源材料。你看过的每篇文章、分享的每个链接、聊过的每个话题,都存在这里。按月分桶,永久保留。 - **wiki/** — 编译后的知识。从 raw 中提炼出的结构化笔记:投资 thesis、技术 runbook、决策日志。 - **SCHEMA.md** — 约定和规范。告诉 Agent(和你)怎么写页面、用什么 tag。 ## 目录结构 ``` kb/ ├── README.md # 你正在看的 ├── SCHEMA.md # 约定:tag、frontmatter、模板 ├── log.md # 操作日志(谁在什么时候做了什么) │ ├── raw/ # 层1 — 不可变源材料 │ ├── links/ # 从 Links App 每日自动同步的新闻 │ └── YYYY-MM/ # 手动分享的文章、网页、对话提取 │ ├── wiki/ # 层2 — 编译后的知识 │ ├── investing/ # 投资:thesis、分析、税务 │ ├── tech/ # 技术:K3s、Cloudflare、部署笔记 │ ├── life/ # 生活:钢琴、健身、墨尔本 │ └── decisions/ # 决策日志:为什么选了 A 不选 B │ ├── scripts/ # 实用脚本 └── _archive/ # 已被取代的旧页面 ``` ## 不需要 Hermes Agent 也能用 KB 就是 markdown 文件 + git。你可以: - **用 VS Code 打开** → 直接浏览、搜索、编辑 - **用 rg/grep 搜索** → `rg "NVIDIA" wiki/ raw/` - **用 GitHub 看** → github.com/wahyd4/kb - **用 Obsidian 打开**(可选)→ 直接作为 vault,`[[wikilinks]]` 即点即用 ## 核心操作 ### Ingest(采集)— Agent 自动做 你分享 URL 或粘贴内容给 Hermes → Agent 抓取 → 存 `raw/YYYY-MM/YYYY-MM-DD-slug.md` raw 文件的 frontmatter: ```yaml --- source_url: https://example.com ingested: 2026-07-13 status: inbox # inbox → absorbed → skipped --- ``` ### Absorb(消化)— Agent + 你 把 raw 里的源材料编译成 wiki 页面: 1. Agent 读 raw 源 2. Agent 搜 wiki/ 找相关已有页面 3. **优先更新已有页面**(不铺新页) 4. 必要时建新页面 5. 改 status → `absorbed` ```bash # 手动 absorb 辅助:列出所有 inbox 条目 ./scripts/inbox.sh # 手动 absorb 辅助:搜索 raw 中相关内容 ./scripts/search.sh "NVIDIA" raw/ # 用 Hermes: "absorb raw/2026-07/2026-07-13-nvidia-article.md" ``` ### Query(查询) ```bash # 搜索所有 KB 内容 ./scripts/search.sh "关键词" # 或直接用 ripgrep rg "NVIDIA" ~/Code/kb/wiki/ ~/Code/kb/raw/ ``` 结果会标注来源类型:wiki 页面是 **已编译**,raw 条目是 **源材料待编译**。 ### Lint(健康检查) ```bash # 检查断链 ./scripts/lint.sh ``` Agent 会检查:断链 wikilinks、过期投资页面、孤儿页面。 ## Frontmatter 规范 ### Wiki 页面 ```yaml --- title: "页面标题" created: 2026-07-13 updated: 2026-07-13 tags: [domain/subtag] sources: [raw/YYYY-MM/file.md] # 来源 raw 文件 --- ``` ### Raw 文件 ```yaml --- source_url: https://... ingested: 2026-07-13 status: inbox | absorbed | skipped | failed_fetch --- ``` ## Tag 系统 开放前缀制 — 新 tag 直接用,不审批: | 前缀 | 示例 | |------|------| | `tech/` | `infra`, `k3s`, `cf-workers`, `llm`, `agent`, `homelab` | | `inv/` | `semi`, `cloud`, `ai`, `thesis`, `earnings`, `tax`, `valuation` | | `life/` | `music`, `piano`, `health`, `family`, `melbourne` | ## 页面模板 ### 投资 Thesis ```markdown # [Company] Thesis - Conviction: high/medium/low - Thesis: 3-5 个核心理由 - Risks: 什么会打破 thesis - Catalysts: 近期催化剂 ``` ### 技术 Runbook ```markdown # [Component] Runbook - Purpose: 干什么的 - Location: repo/namespace - Common issues: 常见问题 + 修复 ``` ### 决策日志 ```markdown # [Decision] - Date: YYYY-MM-DD - Context: 背景 - Options: 考虑过哪些方案 - Decision: 选了哪个 + 为什么 ``` ## 搜索技巧 ```bash # 找所有 inbox 待处理 rg "status: inbox" raw/ # 找所有 NVIDIA 相关内容 rg -l "NVIDIA" wiki/ raw/ # 找所有投资 thesis rg "tags:.*inv/thesis" wiki/ # 统计 ./scripts/stats.sh ``` ## 自动化 | 时间 | 做什么 | |------|--------| | 每天 06:30 | Links App → `raw/links/YYYY-MM/` 同步 | | 每天 22:00 | Hermes 对话扫描 → `raw/YYYY-MM/` 提取知识 | | 每周日 | Review inbox → 决定 absorb 哪些 | ## 脚本参考 ```bash # 查看 inbox ./scripts/inbox.sh # 列出所有待处理 ./scripts/inbox.sh --count # 只看数量 ./scripts/inbox.sh --recent 10 # 最近 10 条 ./scripts/inbox.sh --month 2026-07 # 只看某月 # 搜索 ./scripts/search.sh "NVIDIA" # 全文搜索(固定字符串) ./scripts/search.sh "k3s" --wiki-only # 只搜 wiki ./scripts/search.sh "earnings" --raw-only # 只搜 raw ./scripts/search.sh "C\+\+" --regex # 使用正则 ./scripts/search.sh "NVIDIA" --files-only # 只列文件名 # 标记状态 ./scripts/status.sh absorb raw/2026-07/article.md # 标记为已吸收 ./scripts/status.sh skip raw/2026-07/old-news.md # 跳过 ./scripts/status.sh inbox raw/2026-07/file.md # 重置为待处理 # 统计 ./scripts/stats.sh # 健康检查(退出码非零 = 有问题) ./scripts/lint.sh ``` ## 前置依赖 - `bash` 4+ - `ripgrep` (`rg`) — `apt install ripgrep` 或 `brew install ripgrep` - `git` ## 不依赖 Hermes 的手动操作 ### 手动 Ingest(你自己加一篇文章) 1. 创建文件 `raw/YYYY-MM/YYYY-MM-DD-slug.md` 2. 写 frontmatter: ```yaml --- source_url: https://example.com/article ingested: 2026-07-13 status: inbox --- ``` 3. 正文放下面 4. `git add` + `git commit` ### 手动 Absorb(从 raw 编译到 wiki) 1. `./scripts/inbox.sh` 看看有哪些待处理 2. 读 raw 文件,理解内容 3. 搜 wiki 找相关页面:`./scripts/search.sh "关键词" --wiki-only` 4. 编辑或创建 wiki 页面 5. `./scripts/status.sh absorb raw/路径` 标记已完成 6. 更新页面 `[[wikilinks]]` 交叉引用 ### Status 生命周期 ``` inbox → absorbed (内容已编译到 wiki/) inbox → skipped (看过但不值得编译) inbox → failed_fetch (链接打不开/抓取失败) ``` raw 文件标记 absorbed/skipped 后不会再出现在 inbox,但文件保留在 raw/ 中可搜索。 ## 隐私 - GitHub repo = **private** - 不含具体持仓金额、家庭隐私 - 投资页面只记录 thesis/分析框架 ## 与旧 one-knowledge 的关系 `~/junv/one-knowledge` 是旧版知识库。2,815 篇 links-posts 和 19 篇 tech notes 已迁移到 KB。旧 repo 保留但不再主动更新。