生活与工具
#ai
llm-wiki
个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。 触发条件:用户明确提到"知识库"、"wiki"、"llm-wiki",或要求对已初始化的知识库执行 消化、查询、健康检查等操作。不要在用户只是要求"总结这篇文章"时触发——必须是明确的 知识库相关意图。
DeepseekModel
官方收录技能
质量 优秀 · 90
v1.0.0
获取
https://deepseekmodel.com/api/download.php?id=sdyckjq-lab-llm-wiki-skill-skill-md&format=skill
下载 .skill
标准格式,含 system_prompt 与 model_config,导入任意 Agent 框架即可使用
.skill 文件中 system_prompt 字段的实际内容。
name llm-wiki version 3.6.4 author sdyckjq-lab license MIT description 个人知识库构建系统(基于 Karpathy llm-wiki 方法论)。让 AI 持续构建和维护你的知识库, 支持多种素材源(网页、推特、公众号、小红书、知乎、YouTube、PDF、本地文件), 自动整理为结构化的 wiki。 触发条件:用户明确提到"知识库"、"wiki"、"llm-wiki",或要求对已初始化的知识库执行 消化、查询、健康检查等操作。不要在用户只是要求"总结这篇文章"时触发——必须是明确的 知识库相关意图。 metadata {"hermes":{"tags":["knowledge-base","wiki","research","note-taking"]}} llm-wiki — 个人知识库构建系统 把碎片化的信息变成持续积累、互相链接的知识库。你只需要提供素材,AI 做所有的整理工作。 这个 skill 做什么 llm-wiki 帮你构建一个 持续增长的个人知识库 。它不是传统的笔记软件,而是一个让 AI 帮你维护的 wiki 系统: 你给素材(链接、文件、文本),AI 提取核心知识并整理成互相链接的 wiki 页面 知识库随着每次使用变得越来越丰富,而不是每次重新开始 所有内容都是本地 markdown 文件,用 Obsidian 或任何编辑器都能查看 核心理念 传统方式(RAG/聊天记录)的问题:每次问问题,AI 都要从头阅读原始文件,没有积累。知识库的价值在于 知识被编译一次,然后持续维护 ,而不是每次重新推导。 快速开始 告诉用户这两步就够了: 初始化 :说"帮我初始化一个知识库" 添加素材 :给一个链接或文件,说"帮我消化这篇" Script Directory Scripts located in scripts/ subdirectory. Path Resolution : SKILL_DIR = this SKILL.md's directory Script path = ${SKILL_DIR}/scripts/<script-name> 依赖检查 核心主线(本地文件、纯文本、已有知识库操作)默认不需要这些提取依赖。 只有当用户给的是 URL 类来源,并且明确要自动提取网页 / X / 微信公众号 / YouTube / 知乎内容时,才检查以下可选依赖。 如果缺失,提示用户运行: bash ${SKILL_DIR} /install.sh --platform <当前平台> --with-optional-adapters 可选依赖 skill / 工具: baoyu-url-to-markdown — 普通网页、X/Twitter、部分知乎提取 wechat-article-to-markdown — 微信公众号提取 youtube-transcript — YouTube 字幕提取 即使这些依赖缺失,skill 仍可工作(用户可以直接提供本地文件、粘贴文本,或改走手动入口)。 外挂状态模型 外挂失败统一分成 not_installed / env_unavailable / runtime_failed / unsupported / empty_result 五类。 所有需要枚举来源、读取 source_label 、 raw_dir 、 adapter_name 、 fallback_hint 的地方,都先读来源总表: bash ${SKILL_DIR} /scripts/source-registry.sh list 需要拿单个来源的定义时,用: bash ${SKILL_DIR} /scripts/source-registry.sh get <source_id> 对 URL 类来源,先运行: bash ${SKILL_DIR} /scripts/adapter-state.sh check <source_id> adapter-state.sh check 返回 8 列: source_id source_label state state_label detail recovery_action install_hint fallback_hint not_installed :提示用户可补安装,同时允许改走手动入口 env_unavailable :说明缺少的环境条件,同时允许改走手动入口 runtime_failed :说明本次提取执行失败,允许重试一次,再改走手动入口 unsupported :直接给出手动入口,不尝试自动提取 empty_result :说明自动提取没拿到有效内容,请用户手动补全文本 当自动提取实际执行后,再运行: bash ${SKILL_DIR} /scripts/adapter-state.sh classify-run <source_id> <exit_code> <output_path> 用返回的 detail 、 recovery_action 、 install_hint 、 fallback_hint 生成提示。核心主线不因外挂失败而中断。 工作流路由 根据用户的意图,路由到对应的工作流: 用户意图关键词 工作流 "初始化知识库"、"新建 wiki"、"创建知识库" → init URL / 文件路径 / "添加素材"、"消化"、"整理" / 直接给链接 → ingest "批量消化"、"把这些都整理" / 给了文件夹路径 → batch-ingest "关于 XX"、"查询"、"XX 是什么"、"总结一下" → query "给我讲讲 XX"、"深度分析 XX"、"综述 XX"、"digest XX" → digest "对比一下 X 和 Y"、"比较 X 和 Y"、"整理一下时间线"、"按时间排列" → digest (指定格式) "检查知识库"、"健康检查"、"lint" → lint "知识库状态"、"现在有什么"、"有多少素材" → status "画个知识图谱"、"看看关联图"、"graph"、"知识库地图" → graph "删除素材"、"remove"、"delete source"、"移除" → delete "结晶化"、"crystallize"、"把这个记进知识库"、"总结这段对话" → crystallize 重要 :如果用户直接给了一个 URL 或文件,但没有明确说要做什么,默认走 ingest 工作流。如果知识库还不存在,先自动走 init 再走 ingest 。 通用前置检查 除 init 外,其他工作流默认先执行这段检查: 先检查 当前工作目录 是否包含 .wiki-schema.md 如果包含 → 用当前目录作为知识库根路径 如果不包含 → 回退到读取 ~/.llm-wiki-path 如果两者都没有: ingest / batch-ingest → 先运行 init query / lint / status / digest / graph / delete → 提示用户先初始化知识库 读取知识库根目录下的 .wiki-schema.md 从 .wiki-schema.md 的"语言"字段判断 WIKI_LANG 语言:中文 → WIKI_LANG=zh 语言:English → WIKI_LANG=en 字段缺失 → 默认 WIKI_LANG=zh 输出语言规则 所有面向用户的输出和新写入的 wiki 内容,都按 WIKI_LANG 生成: WIKI_LANG=zh → 使用下文中文示例 WIKI_LANG=en → 保持与中文示例相同的结构、信息量和顺序,仅改为自然英文措辞 文件路径、wiki 链接、目录名保持现有约定,不因为语言切换而改动 术语对照 : 素材 → Source 实体 → Entity 主题 → Topic 摘要 → Summary 综合 → Synthesis 消化 → Ingest 对比 → Comparison 深度报告 → Deep Dive Report 知识图谱 → Knowledge Graph 工作流 1:init(初始化知识库) 前置检查(含多知识库 CWD 检查) 先检查 当前工作目录 是否包含 .wiki-schema.md 如果包含 → 当前目录已经是一个知识库,提示用户已存在并询问是否要重新初始化 如果当前目录没有 → 读取 ~/.llm-wiki-path 文件 如果存在 → 提示用户已有一个知识库(显示路径),询问是要新建还是切换到那个 两个都没有 → 进入初始化流程 步骤 询问知识库主题 (先向用户提问): "你的知识库要围绕什么主题?比如'AI 学习笔记'、'产品竞品分析'、'读书笔记'" 如果用户没想法,默认用"我的知识库" 询问知识库语言 (先向用户提问): "知识库内容用什么语言?中文 / English(默认中文)" 选项: zh (中文)或 en (English) 如果用户没有明确说,默认 zh 将选择记录为 WIKI_LANG ( zh 或 en ) 询问保存位置 (先向用户提问): 默认: ~/Documents/我的知识库/ (zh)或 ~/Documents/my-wiki/ (en) 用户可以自定义路径 运行初始化脚本 : bash ${SKILL_DIR} /scripts/init-wiki.sh "<路径>" "<主题>" 补充初始化结果说明 : init-wiki.sh 会同时生成 purpose.md 和 .wiki-cache.json purpose.md 和 .wiki-schema.md 同级存放,用来记录研究目标、关键问题和研究范围 提醒用户优先填写核心目标和关键问题;这些内容写在 purpose.md 里,后续 ingest 会优先参考这里的方向 写入语言配置并本地化种子文件 : 将 .wiki-schema.md 中的 语言:{{LANGUAGE}} 替换为: zh → 语言:中文 (种子文件保持中文,无需额外处理) en → 语言:English , 同时 覆写以下种子文件为英文版: 如果 WIKI_LANG=en ,读取 ${SKILL_DIR}/templates/index-en-template.md 、 ${SKILL_DIR}/templates/overview-en-template.md 、 ${SKILL_DIR}/templates/log-en-template.md ,将 {{DATE}} 和 {{TOPIC}} 替换为实际值后,分别写入 index.md 、 wiki/overview.md 、 log.md 记录路径 到 ~/.llm-wiki-path : echo "<路径>" > ~/.llm-wiki-path 输出引导 (根据 WIKI_LANG 切换语言): 中文(zh) : 知识库已创建!路径:<路径> 接下来你可以: - 给我一个链接,我会自动提取并整理(网页、X/Twitter、公众号、知乎等) - 小红书内容请直接粘贴文本给我(暂不支持自动提取) - 给我一个本地文件路径(PDF、Markdown 等) - 直接粘贴文本内容 - 批量消化:给我一个文件夹路径 推荐:用 Obsidian 打开这个文件夹,可以实时看到知识库的构建效果。 (英文版按「输出语言规则」生成,结构相同。) 工作流 2:ingest(消化素材) 这是最核心的工作流。用户给一个素材进来,AI 做所有的整理工作。 前置检查 执行 通用前置检查 (见上方定义)。 隐私自查提示(首次进入 ingest 必须执行) 在开始提取或分析任何内容之前,AI 必须 先对用户说下面这句话,然后等待确认: 在开始分析这份素材前,请先快速确认里面 不 包含这些敏感内容: 手机号码(如 138xxxxxxxx) 身份证号(18 位数字) API 密钥( sk-... 、 AIzaSy... 、 OPENAI_API_KEY= 、 ANTHROPIC_API_KEY= 、 Bearer ... ) 明文密码( password= 、 passwd= ) 其他你不希望进入知识库的个人信息 如果素材里有上面任何一项,请先用文本编辑器删除或脱敏后再继续。 llm-wiki 不会 自动过滤这些内容,处理后的内容会进入你的知识库。 确认无上述内容请回复 y ,要中止请回复 n 。 流程规则 : 用户回复 y (或"可以"、"继续"、"没有"等明确肯定)→ 继续执行后续步骤 用户回复 n (或"停"、"取消"等明确否定)→ 终止本次 ingest,提示用户清理后再来 其他不明确的回复 → 再问一次,最多两次;两次都不是明确 y/n 则终止 绕过规则 :如果用户在当前对话里已经明确说过"素材里没有敏感信息,直接开始", 或者用户是在 batch-ingest 流程中(已经在顶层确认过一次),AI 可以跳过这一步 为什么是自查清单而不是脚本 : 正则在非结构化文本(聊天记录、笔记)里误报率很高,错过真的敏感词,误报无害的普通词 把判断权还给用户,比让脚本决定更可靠 对新手更友好,不会遇到看不懂的脚本报错 素材提取路由 根据素材类型自动路由到最佳提取方式: 外挂前置判断 : URL 先调用 bash ${SKILL_DIR}/scripts/source-registry.sh match-url "<url>" 本地文件先调用 bash ${SKILL_DIR}/scripts/source-registry.sh match-file "<path>" 纯文本粘贴直接调用 bash ${SKILL_DIR}/scripts/source-registry.sh get plain_text source-registry.sh 返回 10 列: source_id 、 source_label 、 source_category 、 input_mode 、 match_rule 、 raw_dir 、 adapter_name 、 dependency_name 、 dependency_type 、 fallback_hint 调用 bash ${SKILL_DIR}/scripts/adapter-state.sh check <source_id> 从 adapter-state.sh check 的 8 列结果里读取 state 、 detail 、 recovery_action 、 install_hint 、 fallback_hint 如果 state=not_installed / env_unavailable / unsupported → 不调用外挂,直接按 detail 、 recovery_action 、 install_hint 、 fallback_hint 告诉用户下一步 只有返回 available 时,才继续自动提取 URL 类素材 (统一走来源总表,不手写域名表): Chrome 提示 (仅当 adapter_name=baoyu-url-to-markdown 时): adapter-state.sh check 会把“提取器可用”与“是否存在 9222 可复用会话”分开表达。 如果 check 返回 available ,正常调用外挂;即使 detail 提示未检测到 9222,也继续执行。baoyu-url-to-markdown 会自己处理 Chrome 启动, 继续执行,不要等待用户确认 。 只有在你想复用当前已登录的 Chrome 会话时,才需要手动开启 9222。 如果提取仍然失败(通常是页面需要登录态,如 X/Twitter、知乎等),可提示用户开启调试端口复用已登录会话: open -na "Google Chrome" --args --remote-debugging-port=9222 如果 source_category=manual_only → 不调用外挂,直接使用 fallback_hint 如果 adapter_name=wechat-article-to-markdown → 执行 wechat-article-to-markdown "<URL>" 如果 adapter_name=youtube-transcript → 调用 youtube-transcript 如果 adapter_name=baoyu-url-to-markdown → 调用 baoyu-url-to-markdown 本地文件 : 统一走 bash ${SKILL_DIR}/scripts/source-registry.sh match-file "<path>" 命中后直接读取,不调用外挂 纯文本粘贴 : 统一视为 plain_text 直接使用用户提供的文本 统一回退规则 : 对自动提取结果,统一运行 bash ${SKILL_DIR}/scripts/adapter-state.sh classify-run <source_id> <exit_code> <output_path> 从 classify-run 返回的 8 列结果里读取 state 、 detail 、 recovery_action 、 fallback_hint 如果返回 runtime_failed → 按 detail 、 recovery_action 、 fallback_hint 告诉用户“这次自动提取失败,可以先重试一次;如果还不行,就改走手动入口” 如果返回 empty_result → 按 detail 、 recovery_action 、 fallback_hint 告诉用户“自动提取没有拿到有效正文,请手动补全文本后继续” 其他状态也使用同一份返回结果,不再手写第二套回退文案 内容分级处理 根据素材长度和信息密度自动选择处理级别: 判断标准 : 素材内容 > 1000 字 → 完整处理 素材内容 <= 1000 字(短推文、小红书笔记等)→ 简化处理 完整处理流程(长素材 > 1000 字) 提取素材内容 :按上面的路由获取素材文本 保存原始素材 到 raw/ 对应目录: 根据素材类型保存到对应目录(articles/、tweets/、wechat/、xiaohongshu/、zhihu/ 等) 文件名格式: {日期}-{短标题}.md 如果是 URL 类素材,在文件头部记录原始 URL 图片检测与追踪 :保存素材后,扫描内容中是否包含图片引用( ![ 或 <img 或 .png / .jpg / .gif / .svg URL)。如果检测到图片: 告诉用户:"素材包含 {N} 张图片引用。图片链接可能失效,建议手动下载到 raw/assets/ (Obsidian 用户可在设置中绑定快捷键一键下载附件)" 在后续 source 页面的 frontmatter 中: images :记录检测到的图片引用数量 image_paths :如果用户已将图片下载到 raw/assets/ ,用 YAML block list 格式记录路径;如果尚未下载,保持为空数组 [] 。示例: image_paths: - raw/assets/2026-01-15-fig1.png - raw/assets/2026-01-15-fig2.jpg 不阻塞 ingest 流程,仅做提醒 用户后续下载图片后,可以手动更新 source 页面的 image_paths ,或在下次 lint 时由 AI 辅助补全 读取上下文 : 优先顺序: purpose.md > .wiki-schema.md > index.md 如果 purpose.md 存在,先读取其中的核心目标、关键问题和研究范围 用 purpose.md 指导后续实体、主题、关联的取舍和权重 缓存检查 : 在进入 LLM 处理前,先运行: bash ${SKILL_DIR} /scripts/cache.sh check “<raw 文件路径>” 如果返回 HIT 或 HIT(repaired) → 跳过本次 LLM 调用,直接读取已有 wiki 页面,并告诉用户这是”无变化,直接复用已有结果” HIT(repaired) 表示缓存自愈修复成功(上次 update 被跳过但 source 页面存在且 source_path 匹配) 如果返回 MISS:<reason> → 继续执行下面的两步流程 MISS:no_entry — 首次处理此素材(正常情况) MISS:hash_changed — 素材内容有变化,需要重新处理 MISS:no_source — 有缓存记录但 source 页面被删除了 MISS:repaired_needs_verify — 找到同名 source 页面但 source_path 不匹配,需要重新处理以确认关联正确 Step 1:结构化分析 : 输入:原始内容 + purpose.md + 现有 wiki 结构(至少读取 index.md 概要) 输出:JSON 格式的分析结果,不持久化,只在当前 ingest 流程里临时传递 JSON 至少包含 entities 、 topics 、 connections confidence 是必需字段,缺失就视为格式异常并触发单步回退 { "source_summary" : "一句话概括" , "entities" : [ { "name" : "xxx" , "type" : "concept" , "relevance" : "high" , "confidence" : "EXTRACTED" , "evidence" : "原文摘录或推理依据" } ] , "topics" : [ { "name" : "xxx" , "importance" : "high" } ] ,
Agent 识别该技能的关键词,点击任意一个即可复制。
该技能未提供触发词。
下载的 .skill 包内含以下字段。
| 字段 | 说明 |
|---|---|
| format | 格式标识(skill/v1) |
| skill_id | 技能唯一 ID |
| name | 技能名称 |
| version | 版本号 |
| description | 技能描述 |
| category | 所属分类(数组) |
| trigger_words | 触发词列表 |
| tags | 标签列表 |
| source | 来源标识 |
| source_url | 来源链接(本页地址) |
| exported_at | 导出时间(每次下载生成) |
| system_prompt | 系统提示词正文 |
| model_config | 模型参数:provider / model / temperature / max_tokens / top_p |
| examples | 示例 |
| install_guide | 各平台导入说明(Coze / Dify / Claude / 自定义框架) |