SSkilltecabyclaudinhocode
Enviar skill
← Voltar para o catálogo

llm-wiki-academic

Outros

学术工程文献知识库系统(基于 Karpathy llm-wiki 方法论)。专为电气、机械、船舶、振动等工科领域设计。 **只接收两类素材**:学术文献 Markdown 和研究笔记 Markdown。 自动提取核心概念、研究方法、关键发现,构建支持文献综述和方法对比的结构化 wiki。 触发条件:用户明确提到"知识库"、"wiki"、"消化文献"、"文献综述",或要求对已初始化的知识库执行 查询、健康检查等操作。

0estrelas
Ver no GitHub ↗Autor: CharlesZ-bit

llm-wiki-academic-engineering

学术文献 → 结构化知识库。你只需要提供文献,AI 自动整理、关联、生成综述。

这个 skill 做什么

llm-wiki 帮你构建一个持续增长的学术文献知识库。专为传统工科领域(电气、机械、船舶、振动等)设计:

  • 只接收学术文献 Markdown研究笔记 Markdown(其他格式会提示不支持)
  • AI 提取核心概念、研究方法、关键发现,整理成互相链接的 wiki 页面
  • 支持文献综述、方法对比、研究路线图(Mermaid)
  • 知识库随着每次使用变得越来越丰富,而不是每次重新开始
  • 所有内容都是本地 markdown 文件,用 Obsidian 或任何编辑器都能查看

重要限制

只接收以下两类素材进入知识库:

  1. 学术文献 Markdown - 放在 raw/literature/ 目录
  2. 研究笔记 Markdown - 放在 raw/notes/ 目录

不支持的素材类型(会拒绝处理):

  • 网页链接 / URL
  • 微信公众号文章
  • 社交媒体内容(Twitter/X、小红书等)
  • YouTube 视频
  • 其他非 Markdown 格式

如果用户提供了不支持的素材类型,明确告知并提供替代方案。

核心理念

传统方式(RAG/聊天记录)的问题:每次问问题,AI 都要从头阅读原始文件,没有积累。知识库的价值在于知识被编译一次,然后持续维护,而不是每次重新推导。

快速开始

告诉用户这两步就够了:

  1. 初始化:说"帮我初始化一个知识库"
  2. 添加素材:给一个链接或文件,说"帮我消化这篇"

Script Directory

Scripts located in scripts/ subdirectory.

Path Resolution:

  1. SKILL_DIR = this SKILL.md's directory
  2. Script path = ${SKILL_DIR}/scripts/<script-name>

工作流路由

根据用户的意图,路由到对应的工作流:

用户意图关键词工作流
"初始化知识库"、"新建 wiki"、"创建知识库"init
文件路径(.md)/ "消化"、"整理"ingest
"批量消化"、"把这些都整理" / 文件夹路径batch-ingest
"关于 XX"、"查询"、"XX 是什么"query
"综述 XX"、"对比一下 X 和 Y"、"文献综述"digest
"检查知识库"、"健康检查"、"lint"lint
"知识库状态"、"现在有什么"、"有多少文献"status
"删除文献"、"remove"、"删除"delete

重要

  • 如果用户直接给了一个 Markdown 文件路径,默认走 ingest
  • 如果知识库还不存在,先自动走 init 再走 ingest
  • 非 Markdown 文件会被拒绝,提示用户转换为 Markdown

通用前置检查

init 外,其他工作流默认先执行这段检查:

  1. 先检查当前工作目录是否包含 .wiki-schema.md
    • 如果包含 → 用当前目录作为知识库根路径
    • 如果不包含 → 回退到读取 ~/.llm-wiki-path
  2. 如果两者都没有:
    • ingest / batch-ingest → 先运行 init
    • query / lint / status / digest / delete → 提示用户先初始化知识库
  3. 读取知识库根目录下的 .wiki-schema.md

工作流 1:init(初始化知识库)

前置检查(含多知识库 CWD 检查)

  1. 先检查当前工作目录是否包含 .wiki-schema.md
    • 如果包含 → 当前目录已经是一个知识库,提示用户已存在并询问是否要重新初始化
  2. 如果当前目录没有 → 读取 ~/.llm-wiki-path 文件
    • 如果存在 → 提示用户已有一个知识库(显示路径),询问是要新建还是切换到那个
  3. 两个都没有 → 进入初始化流程

交互式问答引导

初始化时,必须通过对话引导用户完成以下信息收集(不能直接用模板占位内容):

问题 1:知识库主题

"你的知识库要围绕什么主题?比如'船舶振动控制研究'、'机械系统动力学'、'电机振动分析'"

  • 如果用户没想法,默认用"学术文献知识库"
  • 记录用户回答作为后续分析的指导方向

问题 2:研究领域

"你主要研究哪个具体领域?"

  • 可选方向示例:
    • 船舶推进系统振动与控制
    • 电磁-结构耦合动力学
    • 有限元模态分析与实验验证
    • 机械系统动力学建模
    • 电气设备振动与噪声
    • 其他(用户自定义)
  • 记录用户选择,作为 topic 分类的基准

问题 3:是否有确定的研究内容/方案

"你目前是否有确定的研究问题或方案?"

  • 如果有:
    • "请描述一下你的研究问题和目标"
    • "你打算用什么方法/技术路线?"
    • "有没有初步的假设或预期结论?"
  • 如果没有:
    • "你是想先积累文献,了解领域现状?"
    • "有没有特别想探索的方向或空白领域?"
  • 记录用户回答,用于后续文献取舍的优先级判断

问题 4:整理原则(可选)

"你希望知识库在整理时遵循什么原则?"(可多选)

  • 优先提取可重复的实验方法和验证数据
  • 关注理论与方法的演进历史
  • 重视工程应用和实践案例
  • 追踪最新研究进展
  • 其他(用户自定义)
  • 这些原则会影响后续 ingest 时实体和关联的取舍

步骤

  1. 收集用户信息(通过上述问答)

  2. 询问保存位置(先向用户提问):

    • 默认:~/Documents/我的学术知识库/
    • 用户可以自定义路径
  3. 生成个性化 purpose.md

    根据问答结果,用模板 templates/purpose-template.md 生成文件,但必须

    • 将"核心目标"替换为用户的实际研究方向
    • 将"关键问题"替换为用户的具体研究问题(或"探索领域现状")
    • 将"研究范围"限制在用户选择的领域
    • 将"整理原则"替换为用户选择的优先级

    生成后的 purpose.md 示例结构:

    # 研究目的与方向
    
    ## 核心目标
    [用户的具体研究目标]
    
    ## 关键问题
    1. [用户的具体研究问题]
    2. [如果无确定问题:领域现状探索]
    
    ## 研究范围
    **涵盖:**
    - [用户选择的领域]
    
    **不涵盖:**
    - [根据用户选择排除的领域]
    
    ## 整理原则
    - [用户选择的优先级]
    
  4. 运行初始化脚本

    bash ${SKILL_DIR}/scripts/init-wiki.sh "<路径>" "<主题>"
    

    注意:init-wiki.sh 生成的是基础结构,个性化 purpose.md 由 AI 在此步骤后生成并覆盖

  5. 生成并写入个性化 purpose.md

    • 将问答结果编译成完整的 purpose.md
    • 写入 <知识库路径>/purpose.md
  6. 记录路径~/.llm-wiki-path

    echo "<路径>" > ~/.llm-wiki-path
    
  7. 输出引导

    知识库已创建!路径:<路径>
    
    研究方向:<用户选择的研究领域>
    核心问题:<用户的研究问题或探索目标>
    
    接下来你可以:
    - 给我一个本地 Markdown 文献路径,我会消化并整理
    - 批量消化:给我一个文件夹路径,我会逐个处理
    - 查询知识库:问我关于已有文献的问题
    - 生成综述:让我综合多篇文献写综述报告
    
    推荐:用 Obsidian 打开这个文件夹,可以实时看到知识库的构建效果。
    

工作流 2:ingest(消化文献)

这是最核心的工作流。用户给一个 Markdown 文献进来,AI 做所有的整理工作。

前置检查

执行通用前置检查(见上方定义)。

素材类型验证(必须执行)

  1. 检查文件扩展名:

    • .md → 继续
    • 其他扩展名 → 拒绝处理,提示用户转换为 Markdown
  2. 检查文件内容类型:

    • 优先路由到 local_literature(学术文献)
    • 次路由到 local_notes(研究笔记)
    • 其他内容 → 拒绝处理,提示"知识库只接收学术文献 Markdown 和研究笔记 Markdown"
  3. 检查 source-registry.tsv 确认文件类型:

    bash ${SKILL_DIR}/scripts/source-registry.sh match-file "<文件路径>"
    

隐私自查提示(首次进入 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 可以跳过这一步

为什么是自查清单而不是脚本

  • 正则在非结构化文本(聊天记录、笔记)里误报率很高,错过真的敏感词,误报无害的普通词
  • 把判断权还给用户,比让脚本决定更可靠
  • 对新手更友好,不会遇到看不懂的脚本报错

素材提取

直接读取本地 Markdown 文件:

  • 检查 source-registry.sh 确认文件类型
  • 直接读取文件内容

内容分级处理

根据素材长度和信息密度自动选择处理级别:

判断标准

  • 素材内容 > 1000 字 → 完整处理
  • 素材内容 <= 1000 字(短推文、小红书笔记等)→ 简化处理

完整处理流程(长素材 > 1000 字)

  1. 提取素材内容:直接读取本地 Markdown 文件

  2. 保存原始素材raw/literature/ 目录:

    • 文件名格式:{日期}-{短标题}.md
    • 在文件头部记录文献基本信息(标题、作者、年份等)
  3. 读取上下文

    • 优先顺序:purpose.md > .wiki-schema.md > index.md
    • 如果 purpose.md 存在,先读取其中的核心目标、关键问题和研究范围
    • purpose.md 指导后续实体、主题、关联的取舍和权重
  4. 缓存检查

    • 在进入 LLM 处理前,先运行:
      bash ${SKILL_DIR}/scripts/cache.sh check “<raw 文件路径>”
      
    • 如果返回 HITHIT(repaired) → 跳过本次 LLM 调用,直接读取已有 wiki 页面,并告诉用户这是”无变化,直接复用已有结果”
      • HIT(repaired) 表示缓存自愈修复成功(上次 update 被跳过但 source 页面存在)
    • 如果返回 MISS:<reason> → 继续执行下面的两步流程
      • MISS:no_entry — 首次处理此素材(正常情况)
      • MISS:hash_changed — 素材内容有变化,需要重新处理
      • MISS:no_source — 有缓存记录但 source 页面被删除了
  5. Step 1:结构化分析

    • 输入:原始内容 + purpose.md + 现有 wiki 结构(至少读取 index.md 概要)
    • 输出:JSON 格式的分析结果,不持久化,只在当前 ingest 流程里临时传递
    • JSON 至少包含 entitiestopicsconnections
    • confidence 是必需字段,缺失就视为格式异常并触发单步回退
    {
      "source_summary": "一句话概括",
      "entities": [{"name": "xxx", "type": "concept", "relevance": "high", "confidence": "EXTRACTED"}],
      "topics": [{"name": "xxx", "importance": "high"}],
      "connections": [{"from": "A", "to": "B", "type": "因果", "confidence": "INFERRED"}],
      "contradictions": [{"claim_a": "...", "claim_b": "...", "context": "..."}],
      "new_vs_existing": {"new_entities": [], "updates": []}
    }
    

    置信度赋值规则(Claude 必须遵守):

    • EXTRACTED:信息直接出现在原文里,字面可以找到
    • INFERRED:信息是从多处原文推断出来的,原文没有直接说
    • AMBIGUOUS:原文说法不清楚,或者有歧义
    • UNVERIFIED:信息来自 Claude 的背景知识,原文没有证据

    Step 1 完成后,必须执行验证:

    1. mkdir -p {wiki_root}/.wiki-tmp
    2. 将 Step 1 JSON 写入 {wiki_root}/.wiki-tmp/step1-latest.json
    3. 调用 bash ${SKILL_DIR}/scripts/validate-step1.sh {wiki_root}/.wiki-tmp/step1-latest.json
    4. 验证完成后删除 {wiki_root}/.wiki-tmp/step1-latest.json

    如果脚本返回非 0,自动回退到单步 ingest(不进行 Step 2)。

  6. Step 2:页面生成

    • 输入:原始内容 + purpose.md + Step 1 的分析结果 + 现有相关 wiki 页面
    • 输出:所有需要创建或更新的 wiki 页面内容
    • Step 2 负责完成原流程中的素材摘要、实体页、主题页、index、log 更新
  7. 容错回退

    • 如果 Step 1 不是有效 JSON,或者缺少 entitiestopicsconfidence 等必需字段,自动回退到原来的单步流程
    • 回退时,所有本次新生成内容统一加上:
      <!-- confidence: UNVERIFIED -->
      
    • 同时在页面顶部加注释说明本次处理因格式问题降级,避免出现“部分标注、部分没标注”的状态
  8. 生成分类路由

    • 如果素材类型是 local_literature(学术文献 Markdown)→ 走学术文献专用摄取流程(见下文)
    • 其他素材类型继续走标准流程
  9. 生成素材摘要页wiki/literature/{日期}-{短标题}.md):

    • 参考 templates/literature-template.md 的格式
    • 包含:基本信息、核心观点、关键概念、与其他素材的关联、原文精彩摘录
    • 对 Step 1 中标记为 INFERREDAMBIGUOUS 的关系,用 HTML 注释保留置信度:
      <!-- confidence: INFERRED -->
      <!-- confidence: AMBIGUOUS -->
      
    • frontmatter 必须包含 source_path
      • 值为原始素材文件的相对路径(相对于知识库根目录),如 raw/literature/2026-04-17-shaft-vibration.md

Como adicionar

/plugin marketplace add CharlesZ-bit/llm-wiki-academic-engineering

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Comentários · Nenhum comentário

Entre para comentar. Entrar

  • Ainda não há comentários. Seja o primeiro.