用于构建或维护个人LLM驱动的知识库。触发条件:将来源摄入到wiki、查询wiki知识、检查wiki质量、'添加到wiki'、'关于...我知道什么',或任何提及'LLM wiki'或'Karpathy wiki'的内容。
Karpathy LLM Wiki
使用LLM构建和维护个人知识库。你管理两个目录:raw/(不可变的原始材料)和wiki/(编译的知识文章)。来源放入raw/,你将其编译为wiki文章,wiki随时间累积。
来自Karpathy的核心思想:
- "LLM编写和维护wiki;人类阅读和提问。"
- "wiki是一个持久的、不断累积的产物。"
架构
三层结构,全部位于用户的项目根目录下:
raw/ — 不可变的原始材料。你只读取,从不修改。按主题子目录组织(例如,raw/machine-learning/)。
wiki/ — 编译的知识文章。你拥有完全所有权。按主题子目录组织,仅一层:wiki/<topic>/<article>.md。包含两个特殊文件:
wiki/index.md— 全局索引。每篇文章一行,按主题分组,包含链接+摘要+更新日期。wiki/log.md— 仅追加的操作日志。
SKILL.md(本文件)— 模式层。定义结构和工作流规则。
模板位于相对于本文件的references/目录中。当你需要原始文件、文章、归档页面或索引的确切格式时,请阅读它们。
初始化
仅在首次摄入时触发。检查raw/和wiki/是否存在。仅创建缺失的部分;绝不覆盖现有文件:
raw/目录(包含.gitkeep)wiki/目录(包含.gitkeep)wiki/index.md— 标题# Knowledge Base Index,空正文wiki/log.md— 标题# Wiki Log,空正文
如果查询或检查找不到wiki结构,告诉用户:“请先执行摄入以初始化wiki。”不要自动创建。
摄入
将来源获取到raw/,然后编译到wiki/。始终执行两个步骤,无一例外。
获取(raw/)
-
使用你的环境提供的任何网络或文件工具获取来源内容。如果无法访问来源,请用户直接粘贴。
-
选择一个主题目录。首先检查现有的
raw/子目录;如果主题足够接近,则重用。仅对真正不同的主题创建新的子目录。 -
保存为
raw/<topic>/YYYY-MM-DD-descriptive-slug.md。- 从来源标题生成短横线命名(kebab-case),最多60个字符。
- 发布日期未知 → 从文件名中省略日期前缀(例如,
descriptive-slug.md)。元数据中的Published字段仍然存在;设置为Unknown。 - 如果同名文件已存在,追加数字后缀(例如,
descriptive-slug-2.md)。 - 包含元数据头:来源URL、收集日期、发布日期。
- 保留原始文本。清理格式噪音。不要重写观点。
参见
references/raw-template.md了解确切格式。
编译(wiki/)
确定新内容属于哪里:
- 与现有文章核心论点相同 → 合并到该文章。将新来源添加到Sources/Raw。更新受影响的章节。
- 新概念 → 在最相关的主题目录中创建新文章。以概念命名文件,而不是原始文件。
- 跨多个主题 → 放置在最相关的目录中。添加“参见”交叉引用到其他位置的相关文章。
这些情况并不互斥。单个来源可能既需要合并到一篇文章,又需要为其引入的不同概念创建单独的文章。在所有情况下,检查事实冲突:如果新来源与现有内容矛盾,用来源归属标注分歧。合并时,在合并的文章中注明冲突。当冲突内容位于不同文章中时,在两篇文章中都注明并交叉链接。
参见references/article-template.md了解文章格式。关键点:
- Sources字段:作者、组织或出版物名称+日期,分号分隔。
- Raw字段:指向raw/文件的Markdown链接,分号分隔。
- 从
wiki/<topic>/出发的相对路径使用../../raw/<topic>/<file>.md(向上两级到项目根目录)。
级联更新
在主文章之后,检查连锁影响:
- 扫描同一主题目录中受新来源影响内容的文章。
- 扫描其他主题中
wiki/index.md条目,查找涵盖相关概念的文章。 - 更新每篇内容受到实质性影响的文章。每个更新的文件刷新其Updated日期。
归档页面从不进行级联更新(它们是时间点快照)。
摄入后
更新wiki/index.md:为每篇涉及的文章添加或更新条目。添加新主题部分时,包含一行描述。Updated日期反映文章知识内容最后更改的时间,而不是文件系统时间戳。参见references/index-template.md了解格式。
追加到wiki/log.md:
## [YYYY-MM-DD] ingest | <primary article title>
- Updated: <cascade-updated article title>
- Updated: <another cascade-updated article title>
当没有级联更新时,省略- Updated:行。
查询
搜索wiki并回答问题。触发示例:
- "关于X我知道什么?"
- "总结所有与Y相关的内容"
- "根据我的wiki比较A和B"
步骤
- 读取
wiki/index.md以定位相关文章。 - 阅读这些文章并综合答案。
- 优先使用wiki内容而非你自己的训练知识。使用Markdown链接引用来源:
[Article Title](wiki/topic/article.md)(对话中的引用使用项目根目录相对路径;在wiki/文件中,使用相对于当前文件的路径)。 - 在对话中输出答案。除非被要求,否则不写入文件。
归档
当用户明确要求将答案归档或保存到wiki时:
- 将答案写为新的wiki页面。参见
references/archive-template.md。将对话中的引用转换为归档页面时,将项目根目录相对路径(例如,wiki/topic/article.md)重写为文件相对路径(例如,../topic/article.md或同目录下的article.md)。- Sources:答案中引用的wiki文章的Markdown链接。
- 无Raw字段(内容不来自raw/)。
- 文件名反映查询主题,例如,
transformer-architectures-overview.md。 - 放置在最相关的主题目录中。
- 始终创建新页面。绝不合并到现有文章中(归档内容是综合答案,而非原始材料)。
- 更新
wiki/index.md。在摘要前添加[Archived]前缀。 - 追加到
wiki/log.md:## [YYYY-MM-DD] query | Archived: <page title>
检查
对wiki进行质量检查。两个类别具有不同的权限级别。
确定性检查(自动修复)
自动修复以下内容:
索引一致性 — 比较wiki/index.md与实际wiki/文件(不包括index.md和log.md):
- 文件存在但索引中缺失 → 添加条目,摘要占位符为
(no summary)。对于Updated,如果文章元数据中有Updated日期则使用;否则回退到文件的最后修改日期。 - 索引条目指向不存在的文件 → 在索引中标记为
[MISSING]。不要删除条目;让用户决定。
内部链接 — 对于wiki/文章文件(正文和Sources元数据)中的每个Markdown链接,排除Raw字段链接(由下面的Raw引用验证)以及index.md/log.md(上面已处理):
- 目标不存在 → 在wiki/中搜索其他位置同名文件。
- 恰好一个匹配 → 修复路径。
- 零个或多个匹配 → 报告给用户。
Raw引用 — Raw字段中的每个链接必须指向一个现有的raw/文件:
- 目标不存在 → 在raw/中搜索其他位置同名文件。
- 恰好一个匹配 → 修复路径。
- 零个或多个匹配 → 报告给用户。
参见 — 在每个主题目录内:
- 添加相关文章之间明显缺失的交叉引用。
- 删除指向已删除文件的链接。
启发式检查(仅报告)
这些依赖你的判断。报告发现而不自动修复:
- 文章之间的事实矛盾
- 被新来源取代的过时声明
- 来源存在分歧时缺少冲突标注
- 没有来自其他wiki文章入站链接的孤立页面
- 缺少跨主题引用
- 频繁提及但缺少专门页面的概念
- 归档页面中引用的来源文章自归档以来已大幅更新
检查后
追加到wiki/log.md:
## [YYYY-MM-DD] lint | <N> issues found, <M> auto-fixed
约定
- 标准Markdown,全程使用相对链接。
- wiki/仅支持一层主题子目录。不允许更深嵌套。
- 日志条目、收集日期和归档日期使用今天日期。Updated日期反映文章知识内容最后更改的时间。发布日期来自来源(不可用时使用
Unknown)。 - 在wiki/文件内部,所有Markdown链接使用相对于当前文件的路径。在对话输出中,使用项目根目录相对路径(例如,
wiki/topic/article.md)。 - 摄入更新
wiki/index.md和wiki/log.md。归档(来自查询)更新两者。检查更新wiki/log.md(仅当自动修复索引条目时更新wiki/index.md)。普通查询不写入任何文件。






