nashsu/llm_wiki

GitHub: nashsu/llm_wiki

LLM Wiki 是一款基于 LLM 的跨平台桌面应用,能自动将文档转化为持久化、相互链接的知识库,并结合知识图谱和深度研究功能辅助信息整理。

Stars: 623 | Forks: 72

# LLM Wiki

LLM Wiki Logo

一个自我构建的个人知识库。
LLM 阅读您的文档,构建结构化的 Wiki,并保持其最新状态。

这是什么?功能技术栈安装致谢许可证

English | 中文

Overview

## 功能 - **两步式思维链摄取** — LLM 先进行分析,然后生成具有来源可追溯性和增量缓存的 Wiki 页面 - **4 信号知识图谱** — 包含直接链接、来源重叠、Adamic-Adar 和类型亲和度的相关性模型 - **Louvain 社区检测** — 自动发现知识集群并进行内聚度评分 - **图谱洞察** — 一键深度研究,发现令人惊讶的连接和知识缺口 - **4 阶段查询检索** — 分词搜索 → 图谱扩展 → 预算控制 → 引用上下文组装 - **深度研究** — LLM 优化的搜索主题,多查询网络搜索,自动将结果摄取到 Wiki - **异步审查系统** — LLM 标记需要人工判断的项目,预定义操作,预生成搜索查询 - **Chrome 网页剪藏** — 一键捕获网页并自动摄取到知识库 ## 这是什么? LLM Wiki 是一个跨平台桌面应用程序,可以将您的文档自动转化为一个有组织的、相互链接的知识库。不同于传统的 RAG(每次都从头检索并回答),LLM 从您的来源**增量构建并维护一个持久的 Wiki**。知识只需编译一次并保持最新,无需在每次查询时重新推导。 本项目基于 [Karpathy 的 LLM Wiki 模式](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) —— 一种使用 LLM 构建个人知识库的方法论。我们将核心思想实现为一个功能完整的桌面应用程序,并进行了重大增强。

LLM Wiki Architecture

## 我们保留了原版的哪些内容 核心架构忠实地遵循了 Karpathy 的设计: - **三层架构**:原始来源(不可变)→ Wiki(LLM 生成)→ Schema(规则与配置) - **三个核心操作**:摄取、查询、检查 - **index.md** 作为内容目录和 LLM 导航入口 - **log.md** 作为按时间顺序的操作记录,具有可解析的格式 - **[[wikilink]]** 语法用于交叉引用 - 每个 Wiki 页面上的 **YAML frontmatter** - **Obsidian 兼容性** — Wiki 目录可作为 Obsidian vault 使用 - **人工策展,LLM 维护** — 根本的角色分工

Obsidian Compatibility

## 我们更改和添加了什么 ### 1. 从 CLI 到桌面应用程序 原版是一个抽象的模式文档,设计为复制粘贴给 LLM 代理使用。我们将其构建为一个**完整的跨平台桌面应用程序**,具有以下特性: - **三栏布局**:知识树 / 文件树(左侧)+ 聊天(中间)+ 预览(右侧) - **图标侧边栏** 用于在 Wiki、来源、搜索、图谱、检查、审查、深度研究和设置之间切换 - **自定义可调整大小的面板** — 拖动调整左右面板的大小,具有最小/最大约束 - **活动面板** — 显示逐文件摄取进度的实时处理状态 - **所有状态持久化** — 对话、设置、审查项目、项目配置在重启后依然保留 - **场景模板** — 研究、阅读、个人成长、商业、通用 — 每个模板预配置 purpose.md 和 schema.md ### 2. Purpose.md — Wiki 的灵魂 原版有 Schema(Wiki 如何工作),但没有正式的地方来定义 Wiki 存在的**原因**。我们添加了 `purpose.md`: - 定义目标、关键问题、研究范围、演进的论点 - LLM 在每次摄取和查询时都会阅读它以获取上下文 - LLM 可以根据使用模式建议更新 - 与 schema 不同 — schema 是结构规则,purpose 是方向性意图 ### 3. 两步式思维链摄取 原版描述了一个单步摄取,LLM 同时进行读取和写入。我们将其拆分为**两个连续的 LLM 调用**,以显著提高质量: ``` Step 1 (Analysis): LLM reads source → structured analysis - Key entities, concepts, arguments - Connections to existing wiki content - Contradictions & tensions with existing knowledge - Recommendations for wiki structure Step 2 (Generation): LLM takes analysis → generates wiki files - Source summary with frontmatter (type, title, sources[]) - Entity pages, concept pages with cross-references - Updated index.md, log.md, overview.md - Review items for human judgment - Search queries for Deep Research ``` 除了原版之外的额外摄取增强: - **SHA256 增量缓存** — 在摄取前对源文件内容进行哈希处理;未更改的文件将被自动跳过,从而节省 LLM token 和时间 - **来源可追溯性** — 每个生成的 Wiki 页面在 YAML frontmatter 中包含一个 `sources: []` 字段,链接回贡献该页面的原始源文件 - **overview.md 自动更新** — 每次摄取时重新生成的全局摘要页面,以反映 Wiki 的最新状态 - **保证的来源摘要** — 即使 LLM 省略了它,回退机制也能确保始终创建来源摘要页面 - **语言感知生成** — LLM 以用户配置的语言(英语或中文)进行响应 ### 4. 带有相关性模型的知识图谱

Knowledge Graph

原版提到了用于交叉引用的 `[[wikilinks]]`,但没有图谱分析。我们构建了一个**完整的知识图谱可视化和相关性引擎**: **4 信号相关性模型:** | 信号 | 权重 | 描述 | |--------|--------|-------------| | 直接链接 | ×3.0 | 通过 `[[wikilinks]]` 链接的页面 | | 来源重叠 | ×4.0 | 共享相同原始来源的页面(通过 frontmatter `sources[]`) | | Adamic-Adar | ×1.5 | 共享共同邻居的页面(按邻居度数加权) | | 类型亲和度 | ×1.0 | 相同页面类型的奖励(实体↔实体,概念↔概念) | **图谱可视化 (sigma.js + graphology + ForceAtlas2):** - 节点颜色按页面类型或社区显示,大小按链接数缩放(√ 缩放) - 边的粗细和颜色按相关性权重显示(绿色=强,灰色=弱) - 悬停交互:邻居保持可见,非邻居变暗,边高亮并显示相关性分数标签 - 缩放控件(放大、缩小、适应屏幕) - 位置缓存可防止数据更新时布局跳变 - 图例根据着色模式在类型计数和社区信息之间切换 ### 5. Louvain 社区检测 原版中没有。使用 **Louvain 算法** (graphology-communities-louvain) 自动发现知识集群: - **自动聚类** — 根据链接拓扑发现哪些页面自然地组合在一起,独立于预定义的页面类型 - **类型 / 社区切换** — 在按页面类型(实体、概念、来源...)或发现的知识集群为节点着色之间切换 - **内聚度评分** — 每个社区按内部边密度(实际边数 / 可能边数)评分;低内聚度集群(< 0.15)将被标记警告 - **12 色调色板** — 集群之间明显的视觉区分 - **社区图例** — 显示每个集群的顶部节点标签、成员数量和内聚度

Louvain Community Detection

### 6. 图谱洞察 — 令人惊讶的连接与知识缺口 原版中没有。系统**自动分析图谱结构**以揭示可操作的洞察: **令人惊讶的连接:** - 检测意想不到的关系:跨社区边、跨类型链接、外围↔中心耦合 - 复合惊喜分数对最值得注意的连接进行排名 - 可忽略 — 将连接标记为已审查,以免它们再次出现 **知识缺口:** - **孤立页面**(度数 ≤ 1)— 与 Wiki 其余部分连接很少或没有连接的页面 - **稀疏社区**(内聚度 < 0.15,≥ 3 个页面)— 内部交叉引用较弱的知识领域 - **桥接节点**(连接 3+ 个集群)— 将多个知识区域连接在一起的关键枢纽页面 **交互性:** - 点击任何洞察卡片以在图谱中**高亮**相应的节点和边;再次点击以取消选择 - 知识缺口和桥接节点有一个**深度研究按钮** — 触发具有领域感知主题的 LLM 优化研究(读取 overview.md + purpose.md 以获取上下文) - 研究主题在开始前显示在**可编辑的确认对话框**中 — 用户可以完善主题和搜索查询

Graph Insights

### 7. 优化的查询检索管道 原版描述了一个简单的查询,LLM 读取相关页面。我们构建了一个带有预算控制的**4 阶段检索管道**: ``` Phase 1: Tokenized Search - English: word splitting + stop word removal - Chinese: CJK bigram tokenization (每个 → [每个, 个…]) - Title match bonus (+10 score) - Searches both wiki/ and raw/sources/ Phase 2: Graph Expansion - Top search results used as seed nodes - 4-signal relevance model finds related pages - Discovers connections the keyword search missed Phase 3: Budget Control - Configurable context window: 4K → 1M tokens - Proportional allocation: 60% wiki pages, 20% chat history, 5% index, 15% system - Pages prioritized by combined search + graph relevance score Phase 4: Context Assembly - Numbered pages with full content (not just summaries) - System prompt includes: purpose.md, language rules, citation format, index.md - LLM instructed to cite pages by number: [1], [2], etc. ``` ### 8. 带持久化的多对话聊天 原版有一个单一的查询界面。我们构建了**完整的多对话支持**: - **独立的聊天会话** — 创建、重命名、删除对话 - **对话侧边栏** — 在主题之间快速切换 - **每对话持久化** — 每个对话保存到 `.llm-wiki/chats/{id}.json` - **可配置的历史记录深度** — 限制发送多少条消息作为上下文(默认:10) - **引用参考面板** — 每个响应上的可折叠部分,显示使用了哪些 Wiki 页面,按类型分组并带有图标 - **参考持久化** — 引用的页面直接存储在消息数据中,在重启后保持稳定 - **重新生成** — 一键重新生成最后一个响应(删除最后一个助手 + 用户消息对,重新发送) - **保存到 Wiki** — 将有价值的答案归档到 `wiki/queries/`,然后自动摄取以将实体/概念提取到知识网络中 ### 9. 思考 / 推理显示 原版中没有。对于发出 `` 块的 LLM(DeepSeek, QwQ 等): - **流式思考** — 生成期间滚动显示 5 行,带有不透明度淡入淡出 - **默认折叠** — 思考块在完成后隐藏,点击可展开 - **视觉分离** — 思考内容以独特的样式显示,与主要响应分开 ### 10. KaTeX 数学渲染 原版中没有。在所有视图中提供完整的 LaTeX 数学支持: - **KaTeX 渲染** — 通过 remark-math + rehype-katex 渲染内联 `$...$` 和块级 `$$...$$` 公式 - **Milkdown 数学插件** — 预览编辑器通过 @milkdown/plugin-math 原生渲染数学 - **自动检测** — 裸露的 `\begin{aligned}` 和其他 LaTeX 环境自动用 `$$` 分隔符包裹 - **Unicode 回退** — 100 多个符号映射(α, ∑, →, ≤ 等),用于数学块之外的简单内联符号 ### 11. 审查系统(异步人工参与) 原版建议在摄取期间保持参与。我们添加了一个**异步审查队列**: - LLM 在摄取期间标记需要人工判断的项目 - **预定义的操作类型**:创建页面、深度研究、跳过 — 受到约束以防止 LLM 产生任意操作的幻觉 - **在摄取时生成搜索查询** — LLM 为每个审查项目预生成优化的网络搜索查询 - 用户在方便时处理审查 — 不会阻塞摄取 ### 12. 深度研究

Deep Research

原版中没有。当 LLM 识别出知识缺口时: - **网络搜索** (Tavily API) 查找相关来源并提取完整内容(无截断) - **多个搜索查询** 每个主题 — 在摄取时由 LLM 生成,针对搜索引擎进行了优化 - **LLM 优化的研究主题** — 当从图谱洞察触发时,LLM 读取 overview.md + purpose.md 以生成特定领域的主题和查询(不是通用关键词) - **用户确认对话框** — 在研究开始前显示可编辑的主题和搜索查询以供审查 - **LLM 综合** 将发现综合成带有对现有 Wiki 交叉引用的 Wiki 研究页面 - **思考显示** — `` 块在综合期间显示为可折叠部分,自动滚动到最新内容 - **自动摄取** — 研究结果自动处理以将实体/概念提取到 Wiki 中 - **任务队列**,包含 3 个并发任务 - **研究面板** — 专用侧边栏面板,具有动态高度,实时流式进度 ### 13. 浏览器扩展(网页剪藏)

Chrome Extension Web Clipper

原版提到了 Obsidian Web Clipper。我们构建了一个**专用的 Chrome 扩展**(Manifest V3): - **Mozilla Readability.js** 用于准确提取(去除广告、导航、侧边栏) - **Turndown.js** 用于 HTML → Markdown 转换,支持表格 - **项目选择器** — 选择要剪藏到哪个 Wiki(支持多项目) - **本地 HTTP API**(端口 19827,tiny_http)— 扩展 ↔ 应用程序通信 - **自动摄取** — 剪藏的内容自动触发两步摄取管道 - **剪藏监视器** — 每 3 秒轮询一次新剪藏,自动处理 - **离线预览** — 即使应用程序未运行也能显示提取的内容 ### 14. 多格式文档支持 原版专注于文本/markdown。我们支持保留文档语义的结构化提取: | 格式 | 方法 | |--------|--------| | PDF | pdf-extract (Rust) 带文件缓存 | | DOCX | docx-rs — 标题、粗体/斜体、列表、表格 → 结构化 Markdown | | PPTX | ZIP + XML — 逐页提取,带有标题/列表结构 | | XLSX/XLS/ODS | calamine — 正确的单元格类型,多工作表支持,Markdown 表格 | | 图片 | 原生预览 (png, jpg, gif, webp, svg 等) | | 视频/音频 | 内置播放器 | | 网页剪藏 | Readability.js + Turndown.js → 干净的 Markdown | ### 15. 带级联清理的文件删除 原版没有删除机制。我们添加了**智能级联删除**: - 删除源文件会删除其 Wiki 摘要页面 - **3 种方法匹配** 查找相关的 Wiki 页面:frontmatter `sources[]` 字段、源摘要页面名称、frontmatter 部分引用 - **共享实体保留** — 链接到多个来源的实体/概念页面仅从其 `sources[]` 数组中删除已删除的来源,而不会完全删除 - **索引清理** — 删除的页面从 index.md 中清除 - **Wikilink 清理** — 指向已删除页面的死链 `[[wikilinks]]` 将从剩余的 Wiki 页面中删除 ### 16. 可配置的上下文窗口 原版中没有。用户可以配置 LLM 接收多少上下文: - **从 4K 到 1M token 的滑块** — 适应不同的 LLM 能力 - **按比例预算分配** — 较大的窗口按比例获得更多的 Wiki 内容 - **60/20/5/15 分配** — Wiki 页面 / 聊天历史 / 索引 / 系统提示 ### 17. 跨平台兼容性 原版是平台无关的(抽象模式)。我们处理具体的跨平台问题: - **路径规范化** — 在 20 多个文件中统一使用 `normalizePath()`,反斜杠 → 正斜杠 - **Unicode 安全的字符串处理** — 基于字符的切片而不是基于字节(防止 CJK 文件名崩溃) - **Tauri v2** — macOS、Windows、Linux 上的原生桌面 - **GitHub Actions CI/CD** — macOS (ARM + Intel)、Windows (.msi)、Linux (.deb / .AppImage) 的自动构建 ### 18. 其他添加 - **i18n** — 英语 + 中文界面 (react-i18next) - **设置持久化** — LLM 提供商、API 密钥、模型、上下文大小、语言通过 Tauri Store 保存 - **Obsidian 配置** — 自动生成 `.obsidian/` 目录,包含推荐设置 - **Markdown 渲染** — 带边框的 GFM 表格、正确的代码块、聊天和预览中的 wikilink 处理 - **多提供商 LLM 支持** — OpenAI、Anthropic、Google、Ollama、Custom — 每个都有特定于提供商的流和标头 - **15 分钟超时** — 长时间摄取操作不会过早失败 - **dataVersion 信号** — 当 Wiki 内容更改时,图谱和 UI 自动刷新 ## 技术栈 | 层级 | 技术 | |-------|-----------| | 桌面 | Tauri v2 (Rust 后端) | | 前端 | React 19 + TypeScript + Vite | | UI | shadcn/ui + Tailwind CSS v4 | | 编辑器 | Milkdown (基于 ProseMirror 的 WYSIWYG) | | 图谱 | sigma.js + graphology + ForceAtlas2 | | 搜索 | 自定义分词搜索 + 图谱相关性 | | PDF | pdf-extract | | Office | docx-rs + calamine | | i18n | react-i18next | | 状态 | Zustand | | LLM | 流式 fetch (OpenAI, Anthropic, Google, Ollama, Custom) | | 网络搜索 | Tavily API | ## 安装 ### 预构建二进制文件 从 [Releases](https://github.com/nashsu/llm_wiki/releases) 下载: - **macOS**: `.dmg` (Apple Silicon + Intel) - **Windows**: `.msi` - **Linux**: `.deb` / `.AppImage` ### 从源代码构建 ``` # Prerequisites: Node.js 20+, Rust 1.70+ git clone https://github.com/nashsu/llm_wiki.git cd llm_wiki npm install npm run tauri dev # Development npm run tauri build # Production build ``` ### Chrome 扩展 1. 打开 `chrome://extensions` 2. 启用“开发者模式” 3. 点击“加载已解压的扩展程序” 4. 选择 `extension/` 目录 ## 快速开始 1. 启动应用程序 → 创建一个新项目(选择一个模板) 2. 转到 **设置** → 配置您的 LLM 提供商(API 密钥 + 模型) 3. 转到 **来源** → 导入文档(PDF、DOCX、MD 等) 4. 观察 **活动面板** — LLM 自动构建 Wiki 页面 5. 使用 **聊天** 查询您的知识库 6. 浏览 **知识图谱** 查看连接 7. 检查 **审查** 查看需要注意的项目 8. 定期运行 **检查** 以维护 Wiki 健康 ## 项目结构 ``` my-wiki/ ├── purpose.md # Goals, key questions, research scope ├── schema.md # Wiki structure rules, page types ├── raw/ │ ├── sources/ # Uploaded documents (immutable) │ └── assets/ # Local images ├── wiki/ │ ├── index.md # Content catalog │ ├── log.md # Operation history │ ├── overview.md # Global summary (auto-updated) │ ├── entities/ # People, organizations, products │ ├── concepts/ # Theories, methods, techniques │ ├── sources/ # Source summaries │ ├── queries/ # Saved chat answers + research │ ├── synthesis/ # Cross-source analysis │ └── comparisons/ # Side-by-side comparisons ├── .obsidian/ # Obsidian vault config (auto-generated) └── .llm-wiki/ # App config, chat history, review items ``` ## Star History Star History Chart ## 许可证 本项目在 **GNU General Public License v3.0** 下获得许可 — 详见 [LICENSE](LICENSE)。
标签:Adamic-Adar, AI笔记, AI风险缓解, Chrome插件, CoT, DLL 劫持, LLM Wiki, Louvain算法, Petitpotam, RAG, 个人知识库, 可视化界面, 图检索, 增量构建, 大语言模型, 异构信号, 异步审核, 思维链, 文档自动化, 智能问答, 本地知识库, 查询扩展, 检索增强生成, 深度研究, 源码可追溯, 知识管理, 知识聚类, 社区发现, 网页剪藏, 自动化攻击, 跨平台桌面应用, 非结构化数据