llm-wiki-academic

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

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
      • 这是 digest 追溯原始文献的关键字段,不可省略
    • 写入 literature 页面时,必须使用 create-source-page.sh(自动更新缓存):
      # 先把页面内容写到临时文件(确保 frontmatter 中 source_path 已填充)
      echo "<页面内容>" > /tmp/source-content.tmp
      # 调用脚本原子写入 + 缓存更新
      bash ${SKILL_DIR}/scripts/create-source-page.sh "<raw 文件路径>" "wiki/literature/{日期}-{短标题}.md" /tmp/source-content.tmp
      
    • 如果脚本返回 SUCCESS → 写入和缓存都已更新
    • 如果脚本返回 ERROR → 写入或缓存失败,检查报错信息后重试
  10. 更新或创建实体页wiki/entities/):

    • 对每个关键概念,检查 wiki/entities/ 下是否已有对应页面
    • 如果已有 → 追加新信息,更新"不同素材中的观点"部分
    • 如果没有 → 创建新实体页,参考 templates/entity-template.md
    • 使用 [[实体名]] 语法做双向链接
  11. 更新或创建主题页wiki/topics/):

  • 识别素材涉及的主要研究主题
  • 如果已有对应主题页 → 更新素材汇总表和核心观点
  • 如果没有 → 创建新主题页,参考 templates/topic-template.md
  1. 更新 index.md
  • 在对应分类下添加新条目
  • 更新概览统计数字
  1. 更新 log.md
  • log.md 追加格式:## {日期} ingest | {素材标题}
  • 记录新增和更新的页面列表
  • 注意:缓存更新已在 Step 8 通过 create-source-page.sh 自动完成,此处无需再调用 cache.sh update
  1. 向用户展示结果(按 WIKI_LANG 切换语言):

中文(zh)

已消化:{素材标题}

新增页面:
- {素材摘要页}
- {新实体页1}
- {新主题页1}

更新页面:
- {已有实体页2}(追加了新信息)

发现关联:
- 这篇素材和 [[已有素材]] 在 {某概念} 上有联系

学术文献专用摄取流程

当素材路由到 local_literature(即 raw/literature/ 下的 Markdown 文件)时,执行以下专用规则:

Step 1 分析增强: 针对 Markdown 格式学术文献,强制提取以下 JSON 字段(在原有 entitiestopicsconnections 基础上):

{
  "abstract": "文献摘要",
  "keywords": ["关键词1", "关键词2"],
  "methods": ["实验方法/建模方法/分析方法"],
  "results": ["核心结果1", "核心结果2"],
  "conclusions": "作者结论",
  "limitations": "研究局限性",
  "future_work": "未来研究方向",
  "citations": ["引用文献1", "引用文献2"],
  "reproducibility": "高/中/低/未说明",
  "entities": [{"name": "xxx", "type": "concept", "relevance": "high", "confidence": "EXTRACTED"}],
  "topics": [{"name": "xxx", "importance": "high"}],
  "connections": [...]
}

Step 2 生成增强: 同时创建/更新以下页面:

  1. wiki/literature/ 页面(文献摘要页,必含 DOI/年份/作者/期刊/置信度)
  2. wiki/entities/ 页面(概念、理论、设备)
  3. wiki/topics/ 页面(子领域综述)
  4. wiki/methods/ 页面(方法论复用页,标注可重复性)

强制双向链接规则

  • 每篇文献页必须链接到至少 3 个 entities/topics/methods
  • 文献中的 citations 尽量使用 [[文献标题]] 格式建立链接

方法可重复性标记

  • 所有提取到的方法必须在 wiki/methods/ 页面或文献页中标注可重复性(高/中/低/未说明)

简化处理流程(短素材 <= 1000 字)

适用于短推文、小红书笔记、简短评论等。

  1. 保存原始素材到对应 raw/ 目录

  2. 读取上下文并检查缓存

    • 仍然优先读取 purpose.md
    • 仍然先运行 bash ${SKILL_DIR}/scripts/cache.sh check "<raw 文件路径>"
    • 如果缓存命中(HITHIT(repaired)),直接复用已有结果
  3. 生成简化摘要页wiki/literature/):

    • 只包含基本信息和核心观点
    • 不写"原文精彩摘录"部分
    • 写入 literature 页面时同样使用 create-source-page.sh(自动更新缓存)
  4. 提取 1-3 个关键概念

    • 如果对应实体页已存在 → 追加一句话说明
    • 如果不存在 → 在摘要页中用 [待创建: [[概念名]]] 标记
  5. 更新 index.md 和 log.md(缓存已由 create-source-page.sh 自动更新)

  6. 跳过:主题页创建/更新、overview 更新

  7. 向用户展示简化结果(按 WIKI_LANG 切换语言):

    中文(zh)

    已消化:{素材标题}(短内容,简化处理)
    
    新增:
    - 素材摘要页
    
    待完善:
    - [待创建: [[概念名]]](积累更多素材后整理)
    

工作流 3:batch-ingest(批量消化)

当用户给了一个文件夹路径,或者说"把这些都整理一下"。

步骤

  1. 确认知识库路径

    • 执行通用前置检查(见上方定义)
  2. 列出所有可处理文件

    • 支持的格式:.md(只处理 Markdown 文献)
    • 忽略:隐藏文件、.git 目录、node_modules
  3. 展示文件列表,确认处理范围:

    发现 {N} 个文献待处理:
    1. 2024-shaft-vibration.md
    2. 2023-bearing-dynamics.md
    
    预计需要 {N} 轮处理。是否开始?
    
  4. 逐个处理:对每个文件执行 ingest 工作流

    • 每个文件先 cache check
    • 命中缓存的文件直接跳过,不再进入 LLM 处理
    • 只有 MISS 的文件才继续执行完整或简化处理
  5. 每 5 个文件后暂停,展示进度并询问是否继续:

    进度:5/{N} 已完成
    
    本批处理结果:
    - 新增文献摘要:5
    - 新增实体页:3
    - 更新已有页面:7
    
    继续处理剩余 {M} 个文件?
    
  6. 全部完成后

    • 运行一次 index.md 全量更新
    • 输出总结报告:
    批量消化完成!
    
    处理了 {N} 个文献:
    - 已跳过 N 个(无变化),处理 M 个(新增/更新)
    
    新增页面:{total_new}
    更新页面:{total_updated}
    

工作流 4:query(查询知识库)

步骤

  1. 确认知识库路径

    • 执行通用前置检查(见上方定义)
    • 如果没有可用知识库,提示用户先初始化
  2. 读取 index.md 了解知识库全貌

  3. 搜索相关页面

    • 先在 index.md 中定位相关分类和条目
    • 再用 Grep 在 wiki/ 目录下搜索关键词
    • 读取最相关的 3-5 个页面
  4. 综合回答

    • 用中文回答用户的问题
    • 标注信息来源(引用 wiki 页面,用 [[页面名]] 格式)
    • 如果多个文献有不同观点,分别列出并标注来源

工作流 5:lint(健康检查)

触发时机

  • 用户主动说"检查知识库"
  • 每次 ingest 后,如果素材总数是 10 的倍数,主动建议运行 lint

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

  1. 确定检查范围

    • 最近更新的 10 个页面(按文件修改时间排序)
    • 随机抽查的 10 个页面(避免遗漏旧页面的问题)
    • 如果页面总数 <= 20,检查全部
  2. Step 0:调用脚本做机械检查(必须先做,不要跳过):

    bash ${SKILL_DIR}/scripts/lint-runner.sh <wiki_root>
    

    脚本负责三项机械检查(只需要精确匹配,不需要判断):

    • 孤立页面(entities/methods/ 下没有被其他页面引用的页面)
    • 断链([[X]] 链接指向的 X.md 不存在,支持 [[X|别名]] 语法)
    • index 一致性(index.md 里有记录但文件缺失的条目)
    • 引用一致性wiki/literature/ 中被 [[文献标题]] 引用但对应文件不存在的断链)

    退出码:0 = 运行完成,1 = 脚本自身错误(路径不存在、index.md 缺失)。 如果 exit 1,向用户报告错误,不要继续。 如果 exit 0,把脚本 stdout 读进上下文,作为后续 AI 判断类检查的基础素材。

  3. 逐项检查(AI 判断类,脚本做不了):

    矛盾信息(阅读相关页面,检查是否有互相矛盾的说法):

    • 列出发现的矛盾
    • 标注每处矛盾的来源页面

    交叉引用缺失(检查相关主题的页面之间是否应该互相链接但没链):

    • 建议添加的交叉引用

    置信度报告(统计 EXTRACTED / INFERRED / AMBIGUOUS / UNVERIFIED):

    • 高亮 AMBIGUOUS 条目,提醒用户优先验证
    • 抽查标注为 EXTRACTED 的条目,检查是否能在原始素材里找到对应原文
    • 如果发现 EXTRACTED 无法回溯到原文,提示用户回退为更低置信度或重新整理

    方法可重复性标记(检查 wiki/methods/wiki/literature/ 中的方法是否有可重复性标注):

    • 对缺少可重复性标记的方法页面,建议补充(高/中/低/未说明)

    补充建议:基于 Step 0 脚本的孤立页/断链输出,给出修复建议(脚本只列问题,不给方案)

    • 孤立页面 → 建议从哪些相关页面添加 [[链接]]
    • 断链 → 建议为哪些概念创建新页面,或改写引用为已有页面
  4. 输出报告(整合 Step 0 脚本输出 + Step 3 AI 判断结果):

    知识库健康检查报告
    
    检查范围:最近更新 10 页 + 随机抽查 10 页(共 {N} 页)
    
    孤立页面(没有其他页面链接到它):
    - [[某页面]] → 建议从 [[相关页面]] 添加链接
    
    断链(被链接但不存在):
    - [[某概念]] → 建议创建新页面
    
    矛盾信息:
    - 关于"XX",[[页面A]] 说是 Y,但 [[页面B]] 说是 Z
    
    缺失索引:
    - {文件名} 存在但未记录在 index.md 中
    
    引用一致性:
    - {N} 处文献引用断链
    
    方法可重复性:
    - {N} 个方法缺少可重复性标注
    
    置信度报告:
    - EXTRACTED:{N}
    - INFERRED:{N}
    - AMBIGUOUS:{N}
    - UNVERIFIED:{N}
    
  5. 询问用户:要自动修复哪些问题?(按 WIKI_LANG 用对应语言提问)


工作流 6:status(查看状态)

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

步骤

  1. 获取知识库路径(按上面的 CWD 检查逻辑)

  2. 统计:

    • raw/literature/ 下的文献数
    • wiki/entities/ 下的页面数
    • wiki/topics/ 下的页面数
    • wiki/methods/ 下的页面数
    • wiki/literature/ 下的页面数
    • wiki/comparisons/wiki/synthesis/ 下的页面数
    • purpose.md 是否存在
  3. 读取 log.md 最后 5 条记录

  4. 读取 index.md 获取主题概览

  5. 输出报告

    知识库状态:{主题}
    
    文献分布:
    - raw/literature/:{N} 篇
    
    Wiki 页面:{总数} 页
      - 实体页:{N}
      - 主题页:{N}
      - 方法论页:{N}
      - 文献摘要:{N}
      - 对比分析:{N}
      - 综合分析:{N}
    
    研究方向:
    - purpose.md 是否存在:{是/否}
    
    最近活动:
    - {日期} ingest | {文献标题}
    - {日期} digest | {综述标题}
    
    建议:
    - 你可能想深入了解 {某主题},已有 {N} 篇相关文献
    - {某方法} 被 {N} 篇文献使用,值得整理成方法论页
    

工作流 7:digest(深度综合报告)

区别于 query:query 是快速问答,不生成新页面;digest 是跨文献深度综合,生成持久化报告。

触发关键词

  • 文献综述:"给我写 XX 的综述"、"综述 XX"、"文献综述"
  • 方法对比:"对比 X 和 Y"、"比较 X 和 Y"
  • 研究路线:"整理一下时间线"、"按时间排列"

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

  1. 搜索相关页面

    • 用 Grep 在 wiki/ 下搜索主题关键词
    • 列出将要综合的页面(让用户了解报告覆盖范围)
  2. 深度阅读所有相关页面 + 选择输出格式

    • 读取找到的所有相关 wiki 页面(literature/、entities/、topics/、methods/)
    • 归纳每个页面的核心观点和来源信息
    • 根据触发关键词决定输出格式
      • 用户说"综述"/"文献综述" → 使用学术综述格式
      • 用户说"对比"/"比较"类 → 使用方法对比表格式
      • 其他默认 → 使用学术综述格式
  3. 生成结构化深度报告,保存到 wiki/synthesis/{主题}-{格式}.md

    学术综述格式(默认):

    # {主题} 文献综述
    
    > 综合 {N} 篇文献 | 生成日期:{日期}
    
    ## 研究背景
    
    ## 方法对比表
    
    | 方法/文献 | 核心思想 | 优点 | 缺点 | 适用场景 | 可重复性 | 来源 |
    |-----------|----------|------|------|----------|----------|------|
    | 方法A     | ...      | ...  | ...  | ...      | 高       | [[文献1]] |
    | 方法B     | ...      | ...  | ...  | ...      | 中       | [[文献2]] |
    
    ## 研究路线图
    
    ```mermaid
    gantt
        title {主题} 研究发展路线
        dateFormat  YYYY-MM
        section 早期研究
        基础理论建立       :a1, 2000-01, 60M
        section 方法发展
        主流方法提出       :a2, 2010-01, 60M
    

    关键发现

    争议与开放问题

    未来工作建议

    1. ...
    2. ...
    3. ...

    参考文献

    <!-- 所有被引用的文献,按文中出现顺序排列 --> <!-- 格式:作者. 年份. 标题. 期刊/会议. --> <!-- 使用 [[文献标题]] 链接到 wiki/literature/ 对应页面 -->
    1. {作者}. {年份}. {标题}. {期刊}. [[{文献标题}]]
    2. {作者}. {年份}. {标题}. {期刊}. [[{文献标题}]]

    相关页面

    
    **方法对比表格式**(触发词:对比 / 比较):
    
    ```markdown
    # {对比主题} 方法对比
    
    > 对比 {N} 个方法 | 生成日期:{日期}
    
    ## 对比方法
    - [[方法 A]]
    - [[方法 B]]
    
    ## 对比表
    
    | 维度       | [[方法 A]] | [[方法 B]] |
    |-----------|-----------|-----------|
    | 核心思想   | ...       | ...       |
    | 适用场景   | ...       | ...       |
    | 优点       | ...       | ...       |
    | 缺点       | ...       | ...       |
    | 可重复性   | 高       | 中       |
    | 来源       | [[文献1]] | [[文献2]] |
    
    ## 关键差异
    
    ## 参考文献
    
    1. {作者}. {年份}. {标题}. *{期刊}*. [[{文献标题}]]
    2. {作者}. {年份}. {标题}. *{期刊}*. [[{文献标题}]]
    
    ## 相关页面
    
    # {主题} 时间线
    
    > 时间跨度:{起始年} ~ {结束年} | 生成日期:{日期}
    
    ```mermaid
    gantt
      title {主题} 时间线
      dateFormat YYYY-MM-DD
      section 主要事件
        事件 A : 2023-01-01, 1d
        事件 B : 2024-03-15, 1d
        事件 C : 2025-06-20, 1d
    

    事件说明

    • 2023-01-01 — 事件 A:简要说明(来源:[[素材A]])
    • 2024-03-15 — 事件 B:简要说明(来源:[[素材B]])
    • 2025-06-20 — 事件 C:简要说明(来源:[[素材C]])

    参考文献

    1. {作者}. {年份}. {标题}. {期刊}. [[{文献标题}]]

    相关页面

    
    > **时间线格式注意事项**:
    > - `gantt` 要求 `YYYY-MM-DD` 精度
    > - 如果素材只有年份(如 "2023 年"),把日期补为该年第一天(`2023-01-01`)
    > - 如果连年份都不确定,改用**纯文字时间线**(无序列表按时间排序),不用 Mermaid gantt
    > - 如果事件超过 15 个,建议按 section 分组,避免图太长
    
    **模板 D:学术文献综述格式**(适用于工程学术领域 digest)
    
    ```markdown
    # {主题} 文献综述
    
    > 综合 {N} 篇文献 | 生成日期:{日期}
    
    ## 研究背景
    
    ## 方法对比表
    
    | 方法/文献 | 核心思想 | 优点 | 缺点 | 适用场景 | 可重复性 | 来源 |
    |-----------|----------|------|------|----------|----------|------|
    | 方法A     | ...      | ...  | ...  | ...      | 高       | [[文献1]] |
    | 方法B     | ...      | ...  | ...  | ...      | 中       | [[文献2]] |
    
    ## 研究路线图
    
    ```mermaid
    gantt
        title {主题} 研究发展路线
        dateFormat  YYYY-MM
        section 早期研究
        基础理论建立       :a1, 2000-01, 60M
        section 方法发展
        主流方法提出       :a2, 2010-01, 60M
        section 最新进展
        前沿技术探索       :a3, 2020-01, 60M
    

    关键发现

    争议与开放问题

    未来工作建议

    参考文献

    1. {作者}. {年份}. {标题}. {期刊}. [[{文献标题}]]
    2. {作者}. {年份}. {标题}. {期刊}. [[{文献标题}]]

    相关页面

  4. 正文引用格式(digest 生成正文时必须遵循):

    • 采用顺序编码制(与中文工科论文规范一致):
      • 首次引用:[^1]
      • 文中再次引用同一篇:[^1](不重复编号)
      • 连续引用:[^1][^2][^3][^1-3]
    • 引用位置:紧跟被引用内容之后,在句号之前
      • ✅ 正确:Shaft vibration is a critical issue [^1].
      • ❌ 错误:[^1] Shaft vibration is a critical issue.
    • 每篇被引用的文献必须在文末对应编号的参考文献列表中有完整条目
  5. 生成参考文献列表(digest 必须执行):

    • 收集所有在正文中引用的文献(来自 wiki/literature/ 的文献页)
    • 从各 literature 页面的 frontmatter 中提取作者、年份、标题、期刊信息
    • 按正文引用顺序排列,使用 [[文献标题]] 链接到对应 literature 页面
    • 元数据来源优先级
      1. literature 页面的 frontmatter(authorsyearjournal 字段)
      2. literature 页面正文中的基本信息区域
      3. 如果缺少某字段,用 "佚名"/"未知" 占位,不做推测
  6. RAW 追溯机制(digest 中回溯原始文献):

    触发条件(只有明确触发条件满足时,才请求用户确认):

    • 用户明确要求:用户提示中包含"看原文" / "查原始文献" / "原始数据" / "看原始文件" / "追溯来源"或类似明确意图
    • 其余情况不自动触发:以下情况仅作提示,不会自动执行:
      • 摘要页信息不足 → 提示"摘要缺详细信息,建议回溯原文查看"
      • 摘要页有 AMBIGUOUS/UNVERIFIED 标记 → 提示"此处标记不确定,建议回溯原文验证"

    执行步骤(必须严格执行):

    Step 1:提示用户
    - 如果触发"用户明确要求" → 继续 Step 2,直接执行
    - 如果触发"信息不足"或"标记不完整" → 显示提示语但不执行,结束
    
    Step 2:确认后定位 raw 文件
    - 读取该文献的 `wiki/literature/` 页面
    - 从 frontmatter 中提取 `source_path: raw/literature/xxx.md`
    
    Step 3:读取原始文献
    - 用 `source_path` 找到 `raw/literature/xxx.md`
    - 只读取与当前研究问题相关的段落,不需要全文通读
    
    Step 4:补充到综述
    - 将原始文件中的详细信息补充到 digest 正文中
    - 补充内容也需要遵守正文引用格式 [^N]
    
  7. 更新 index.md 和 log.md

    • index.md 的"综合分析"分类下添加新报告条目
    • log.md 追加:## {日期} digest | {主题}
  8. 向用户展示结果(按 WIKI_LANG 切换语言):

    zh

    已生成深度报告:{主题}
    
    综合了 {N} 篇素材:
    - [[素材1]]、[[素材2]]...
    
    报告已保存:wiki/synthesis/{主题}-深度报告.md
    
    发现这些待解决问题,可以继续搜集素材:
    - {问题1}
    - {问题2}
    


工作流 8:delete(删除文献)

触发关键词

“删除文献”、”删除”、”remove”

前置检查

执行通用前置检查(见上方定义)。如果没有可用知识库,提示用户先初始化。

步骤

  1. 识别目标文献

    • raw/literature/ 下搜索用户提到的文献名
    • 如果匹配到多个候选,先列出候选文件让用户确认
  2. 扫描影响范围

    • 扫描所有 wiki 页面中被删除文献的引用
    • 逐页判断是”删除整页”还是”保留页面但移除该文献引用”
  3. 安全确认

    • 如果影响超过 5 个页面时,先把受影响页面完整列给用户,再做二次确认
    • 如果某个实体或主题只被这篇文献引用,提示用户是否连同页面一起删除
  4. 执行级联清理

    • 删除 raw/literature/ 下对应文献文件
    • 删除 wiki/literature/ 下对应文献摘要页
    • wiki/entities/wiki/topics/wiki/methods/ 中仍需保留的页面,只移除该文献相关的引用段落
    • 更新 index.md
    • log.md 追加删除记录
  5. 清理缓存

    • 删除完成后,对对应 raw 文件运行:
      bash ${SKILL_DIR}/scripts/cache.sh invalidate “<raw 文件路径>”
      
  6. 断链检查

    • 用 grep 扫一遍指向已删除页面的链接
    • 清理明确可判定的断链;如果归属不清,保留原文并提示用户后续人工确认
  7. 向用户报告结果

    已删除:
      - raw/literature/2024-shaft-vibration.md
      - wiki/literature/2024-shaft-vibration.md
    已更新(移除引用):
      - wiki/entities/有限元模态分析.md
      - wiki/topics/船舶振动控制.md