基于 Karpathy 的 LLM Wiki 模式构建的个人知识管理系统,拥有美观的前端展示、强大的搜索功能、天然的 Obsidian 集成,支持一键部署到 Vercel。
- 📚 LLM Wiki 架构 - 原始源 + AI 整理的知识库 + 规则定义三层结构
- 🎨 Soft 风格 UI - 柔和奢华的设计风格,优质的排版体验
- 📊 知识图谱 - 可视化展示知识之间的关联
- 📈 Mermaid 图表 - 支持流程图、时序图、思维导图等多种图表
- 🗂️ 灵活分类体系 - 支持自定义分类,任意层级嵌套
- 🔍 智能搜索 - 快速搜索所有内容
- 🏷️ 标签系统 - 灵活的内容分类
- 🔗 双向链接 - 支持 Obsidian 风格的 [[Page Name]] 链接
- 📝 Obsidian 集成 - 直接用 Obsidian 打开 wiki 目录进行编辑
- 🚀 Vercel 部署 - 一键部署,持续集成
个人知识库网站/
├── raw/ # 原始源文件(不可变)
│ ├── articles/ # 文章
│ ├── papers/ # 论文
│ ├── images/ # 图片
│ ├── pdfs/ # PDF
│ ├── audio/ # 音频
│ └── video/ # 视频
├── wiki/ # AI 生成的知识库
│ ├── [自定义分类]/ # 灵活的分类体系(如:关于本站/)
│ │ ├── _category.md # 分类介绍页面
│ │ └── 文章.md
│ ├── 人物与工具/ # 实体页面(人物、项目、工具等)
│ ├── 核心概念/ # 概念页面
│ ├── 资料存档/ # 摘要页面(保留旧版)
│ ├── index.md # 内容索引
│ └── log.md # 操作日志
├── src/ # Next.js 前端
│ ├── app/ # App Router
│ ├── components/ # 组件
│ └── lib/ # 工具库
├── AGENTS.md # AI 规则文件(核心!)
└── README.md # 本文件
npm installnpm run dev打开 http://localhost:3000 查看效果。
npm run build
npm start- 将代码推送到 GitHub 仓库
- 在 Vercel 中导入仓库
- 一键部署!
详细部署步骤请参考 部署指南.md
- 将原始文件放入
raw/对应目录 - 使用
/ingest <文件路径>命令让 AI 处理 - AI 会自动创建高质量百科全书级内容、更新实体/概念页面、建立交叉引用
- 使用
/classify命令整理未分类或需要重新分类的内容 - AI 会分析内容并建议创建新分类或归入现有分类
- 确认分类方案后,AI 会自动组织文章结构
使用 /query <你的问题> 命令向知识库提问。
使用 /lint 命令检查知识库的一致性和完整性。
使用 /optimize-wiki [可选文件路径] 命令全面优化 wiki 文章,提升内容质量、易读性和结构完整性。
使用 /diagramize [可选文件路径] 命令为文章智能添加 Mermaid 图表,增强文章可读性。
- 打开 Obsidian
- 选择 "打开文件夹作为 vault"
- 选择本项目的
wiki/目录 - 开始编辑!
| 命令 | 功能 |
|---|---|
/fetch <URL> [类型] |
从网络获取内容并保存到 raw/ 目录 |
/ingest <源文件路径> |
处理新源文件,智能分类并整理到知识库(百科全书级质量) |
/ingest-all |
批量处理所有未处理的新内容 |
/ingest-status |
查看哪些文件已处理,哪些还没处理 |
/classify |
整理未分类文章,创建或更新分类体系 |
/optimize-wiki [可选文件路径] |
全面优化 wiki 文章,提升内容质量 |
/diagramize [可选文件路径] |
为文章添加 Mermaid 图表 |
/query <问题> |
基于知识库智能回答问题 |
/lint |
健康检查和维护知识库 |
功能:抓取网页、视频等内容,保存到 raw/ 目录
工作流程:
- 识别内容类型:根据 URL 或用户指定的类型确定处理方式
- 获取内容:
- 网页/文章:使用 WebFetch 抓取
- 自动识别并提取文章中的所有图片链接
- 将图片下载到
raw/images/文章标题/目录(按文章分组) - 使用 AI 视觉分析图片内容,生成详细描述
- 将图片描述自然地融入文章内容中
- 使用 Obsidian wiki 图片链接格式:
![[图片文件名]]
- 视频(优先级 Fallback 机制):
- 第一阶段(快速抓取):首先调用 video-fetcher (yt-dlp-mcp) 的
ytdlp_download_transcript工具获取字幕(优先尝试中文 'zh-Hans',失败尝试英文 'en')。如果成功获取到有效文字内容,直接跳转至"保存步骤"。同时调用ytdlp_get_video_metadata获取视频元数据(标题、UP主等)。 - 第二阶段(本地转录切换):若第一阶段返回空内容、报错或提示"未找到字幕",禁止报错,立即自动切换并调用 video-transcriber (video-transcriber-mcp) 的
transcribe_video工具进行本地转录。- 调用参数:
url: 视频链接model: "medium"language: "auto"- 环境变量:
USE_GPU: true、WHISPER_MODEL: medium、WHISPER_CACHE_DIR: D:/AI_Models/whisper
- 调用参数:
- 视频视觉理解:对视频进行关键帧分析(不保存截图),使用 AI 视觉理解视频内容,将视觉理解结果与字幕/转录内容合并
- 第一阶段(快速抓取):首先调用 video-fetcher (yt-dlp-mcp) 的
- 网页/文章:使用 WebFetch 抓取
- 生成文件名:
- 视频文件:使用
[UP主] - [视频标题].txt格式,清理非法字符(\ / : * ? " < > |) - 其他文件:根据内容标题生成
- 图片文件:保持原始扩展名,清理非法字符,确保文件名唯一
- 视频文件:使用
- 保存文件:按以下格式组织内容并保存到对应目录:
标题: {title} UP主: {uploader} 链接: {url} 提取方式: {yt-dlp-mcp 或 video-transcriber} 内容: {transcript} - 保存到对应目录:
- 网页文章 →
raw/articles/ - 论文 →
raw/papers/ - 视频 →
raw/video/ - 播客/音频 →
raw/audio/ - 图片 →
raw/images/文章标题/(按文章分组)
- 网页文章 →
- 询问用户:保存成功后,询问"内容已存至 D 盘模型驱动的本地库,是否立即执行 /ingest 处理?"
参数说明:
<URL>:要获取的链接(必填)[类型]:可选,指定内容类型(article/paper/video/audio)
示例:
/fetch https://example.com/article
/fetch https://youtube.com/watch?v=xxx video
视频处理说明:
- 采用"先云端检索、后本地转录"的复合逻辑
- 第一阶段优先尝试使用 yt-dlp 快速获取已有字幕
- 若云端无字幕,自动降级到使用 video-transcriber + Whisper 本地转录
- 使用 medium 模型 + GPU 加速,确保转录质量和速度
- 对视频进行关键帧视觉理解(不保存截图)
图片处理说明:
- 网页中的图片会自动下载到
raw/images/文章标题/目录 - 使用 AI 视觉分析图片内容并生成描述
- 图片描述会融入文章内容,帮助 AI 更好地理解
- 使用 Obsidian wiki 图片链接格式:
![[图片文件名]] - /ingest 时会将图片信息作为内容的一部分一起分析
功能:读取 raw/ 目录中的源文件,智能分类并整理到知识库
核心目标:生成百科全书级别的高质量内容——既详实全面,又浅显易懂,易于阅读和理解。
内容质量标准:
- 全面覆盖:不遗漏任何重要知识点,确保内容的完整性和系统性
- 由浅入深:从入门概念开始,逐步深入到高级主题
- 简短段落:避免长段落,每段 2-4 句话,易于阅读
- 浅显易懂:用大白话解释专业概念,避免过度技术化
- 先定义后展开:每个主题先给出清晰定义,再详细展开
支持灵活的自定义分类体系,可以创建任意深度的嵌套分类:
wiki/
├── 知识管理/ # 示例分类
│ ├── _category.md # 分类介绍页面
│ ├── 文章1.md
│ └── 子分类/
│ └── 文章2.md
├── 编程/
│ └── ...
└── ...
人物与工具/- 实体页面(人物、项目、工具等)核心概念/- 概念解释页面资料存档/- 源文件摘要(保留旧版结构)
每个分类可以有一个 _category.md 介绍页面:
---
title: 分类名称
description: 分类的简短描述
created: 2026-05-12
---
关于这个分类的详细介绍...所有 wiki 页面必须包含 YAML frontmatter:
---
title: 页面标题
created: 2026-05-12
updated: 2026-05-12
categories: [分类1, 分类2]
categoryPath: "分类路径/子分类"
tags: [标签1, 标签2]
sources: [raw/articles/source.md]
confidence: high
---
页面内容...- 框架: Next.js 14.2 (App Router)
- UI: React 18.3, Tailwind CSS 3.4, Framer Motion 11
- Markdown: react-markdown 9, remark-gfm, rehype-raw
- 代码高亮: react-syntax-highlighter, highlight.js
- 图表: mermaid 11, rehype-mermaid
- 知识图谱: d3, react-force-graph-2d, three
- 工具库: gray-matter, date-fns, lucide-react
- 语言: TypeScript 5
- 部署: Vercel
- 永远不要手动修改
raw/目录(原始源文件只读,仅标记 ingest 状态时可添加 frontmatter) wiki/目录由 AI 维护,但你也可以手动编辑- 所有内容都在 Git 版本控制中,可随时回滚
- Obsidian vault 路径设为
wiki/目录 - 优先使用自定义分类体系,entities/concepts/summaries 作为保留分类
- 简体中文优先:Wiki 中的知识、分类、标题等能用简体中文的都要用简体中文
MIT