Community研究與資料分析github.com

MinorBaek/wiki-ingest-book

當使用者要求將一本書或章節攝入科學維基時使用。觸發條件為:「/wiki-ingest-book [書名]」(書籍總覽)、「/wiki-ingest-book [書名] > 第N章」(章節攝入),或任何要求「將書籍加入維基」、「攝入這本教科書」、「新增[書名]的第N章」的請求。

wiki-ingest-book 是什麼?

這是一個針對LLM維基攝入模式(LLM-wiki ingest pattern)的延伸技巧,專門處理學術書籍。由於書籍上下文豐富,無法一次性攝入,因此採用兩階段方法:先建立書籍總覽,再按需攝入章節。此技巧支援建立書籍筆記、章節筆記,並將發現傳播至概念和方法筆記,同時更新索引和日誌。它不嘗試一次性閱讀整本書(避免上下文限制風險),也不發明元資料或章節標題。默認PDF庫目錄由「wiki.config.json」設定,並優先使用「pdftotext」或「docling」從本地PDF萃取全文。此技巧還包含嚴格的契約,確保攝入後的完整性:每個章節筆記必須包含指向父書籍筆記的「book:」前置內容,章節攝入後必須更新父筆記的「chapters_ingested:」列表,且初始狀態遵循「wiki-ingest」的狀態表。此外,它支援自動建立向前參照的存根章節,並透過「wiki-lint」進行後續檢查,以確保索引和章節清單的一致性。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MinorBaek/science-wiki-kit/tree/HEAD/skills/wiki-ingest-book

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

wiki-ingest-book 是做什麼的?

在首次攝入之前,請先閱讀工具包中的 docs/GOTCHAS.md(操作上的注意事項,包括書籍的頁碼偏移校正)。

將 LLM-wiki 攝入模式擴展至學術書籍。書籍上下文密集,無法一次性攝入,因此此技巧採用兩階段方法:先建立書籍總覽,再按需攝入章節。

角色與界限

會做:建立書籍筆記、建立章節筆記、將發現傳播至概念和方法筆記、更新索引和日誌。

不會做:一次性讀取整本書(有上下文限制風險)、發明元資料或章節標題、或複製論文攝入工作流程(章節遵循與論文相同的概念傳播規則)。

檔案儲存位置

路徑來自 wiki.config.json(請參閱 wiki-ingest)。書籍和章節存放在 <wiki_root>/books/。範本:templates/book.md 和 templates/chapter.md。存放PDF庫的資料夾是設定檔中的 pdf_library_dir。

相關技巧

  • wiki-ingest:共用初始狀態決定規則和用於索引路由的 field_titlecase_map。
  • wiki-lint:每次章節攝入後執行。檢查項目 8(chapters_ingested 同步)和檢查項目 9(章節 book: 前置內容)能捕捉最常見的書籍攝入漂移。

必需的契約(每次攝入後必須遵守)

  1. 每個章節筆記(位於 books/{book}_ChNN.md)的前置內容中必須有 book: "[[{book_basename}]]",且目標必須能解析到一個已存在的書籍筆記。寫入後請驗證;若缺少,wiki-lint 檢查項目 9 會標記。
  2. 每次章節攝入都必須將章節編號附加到父書籍筆記的 chapters_ingested: 列表中。附加後,列出 {book}_Ch*.md 並確認兩組相符;否則 wiki-lint 檢查項目 8 會標記漂移。
  3. 初始狀態遵循 wiki-ingest 狀態表:僅有定義的為 stub,進行中的為 draft,而有兩個或更多有來源發現的章節筆記為 final(章節本身就是一個來源)。衍生的概念和方法筆記遵循嚴格的提升規則:final 需要 N 個不同的來源作品(min_distinct_sources_for_final,預設為 2),因此僅從本書建立的概念會保持在 draft 狀態,直到第二個獨立來源確認它。
  4. 索引路由使用 field_titlecase_map 將新概念和方法放置在正確的 Title Case 領域子區段下,絕不放在帶有日期的通用區塊中。

前置步驟(必做,在模式A或模式B之前)

  1. 讀取 WIKI_SCHEMA.md。
  2. 讀取範本:模式A使用 templates/book.md;模式B使用 templates/chapter.md(並參考 templates/book.md)。

工具:使用主機的檔案工具(讀取/寫入/編輯)進行所有儲存庫寫入。


本地 PDF 解析(全文萃取的首選)

預設資料夾:設定檔中的 pdf_library_dir(您的參考管理工具 PDF 儲存位置)。 萃取工具:pdftotext(poppler)或為更好的表格保真度使用 docling。始終使用 -enc UTF-8 參數執行 pdftotext。

定位 PDF:透過列舉並使用作者名稱進行 grep,而不是使用 glob 工具或 find -iname "*<author>*";後兩者在某些檔案系統上對實際存在的檔案有已知的假陰性:find "<pdf_library_dir>" -iname "*.pdf" | grep -i <first_author_lastname>。如果第一次搜尋結果為空,則將根目錄擴大到整個庫(書籍也可能存放在主題子資料夾中)。恰好 1 個匹配:使用它。0 個或多於 1 個匹配:詢問使用者確切路徑。如果仍失敗:回退到參考管理工具的全文。

完整的解析演算法、本地優先全文萃取串聯和 MCP 決策表、掃描 PDF 偵測以及非 ASCII 檔案名稱風險均在 references/BOOK-INGEST-WORKFLOW.md(第 1 節和第 1bis 節)中。在首次萃取新書籍前請閱讀它。以下正文僅保留每個章節使用的指令。

萃取指令

  • 目錄/總覽(模式A):pdftotext -enc UTF-8 -f 1 -l 20 "<path>" -(前 20 頁,標準輸出)。
  • 章節範圍(模式B):pdftotext -enc UTF-8 -f <pdf_start> -l <pdf_end> "<path>" -。-f/-l 採用的是 PDF 頁碼,而不是書籍頁碼;使用偏移量從目錄轉換(下一節)。
  • 將萃取結果寫入檔案以便您使用「Read」工具:較長的章節片段寫入檔案可能比標準輸出更容易。請將它寫入專案內(例如 _temp/{book}_Ch{NN}.txt),而不是寫入作業系統特定的 /tmp(「Read」工具無法開啟,例如 Git Bash on Windows 將 /tmp 映射到 Windows 工具無法看見的位置)。

頁碼偏移校正(書籍頁面不等於 PDF 頁面)

書籍的目錄列出的是書籍頁碼;pdftotext -f/-l 指定的是 PDF 頁碼。兩者之間存在偏移量(由前言、插圖頁造成),且該偏移量在整本書中非線性增長(圖表、表格、部分分隔頁)。直接將目錄數字傳給 pdftotext 會萃取到錯誤的頁面,這是章節攝入中最常見的時間消耗點。每本書請校正一次,在萃取任何章節之前:

  1. 選擇一個已知書籍起始頁的章節。估算 pdf_start = book_page + offset_guess(前言部分通常為 20 到 60 頁)。
  2. 僅萃取其第一頁,確認章節標題出現。調整最多 5 頁,直到正確定位。
  3. 將校正後的偏移量記錄在書籍筆記中(例如在目錄附近寫上 > [!note] PDF 偏移量:book_pg + N = pdf_pg(區域:第X部分)),以便後續章節重複使用。
  4. 對於較長的書籍,請按區域或部分重新校正:單一固定偏移量會漂移(例如在一本教科書中,第 3 章偏移 +36,第 21 章偏移 +56)。對於文字層 PDF,根據換頁符分割文字可提供快速頁面對映,其中包含準確的起始頁。

模式A:書籍總覽

觸發條件:/wiki-ingest-book [書名]

  1. 在參考管理工具中解析:依標題搜尋,然後擷取元資料(標題、作者、編輯、年份、出版社、ISBN、版本、DOI、引用鍵)。
    • 年份後綴引用鍵注意事項(多卷或部分系列):像 ...2019a / ...2019b 這樣的 Better BibTeX 引用鍵不能可靠地對應到同一作者、同年份系列的卷1與卷2(後綴是消歧順序,而非意義)。在命名筆記或確認您擁有的卷冊之前,始終先從元資料中確認實際的標題(和副標題或「第N部分」)。
  2. 為目錄解析全文(串聯;請參閱「本地 PDF 解析」):
    • 主要:pdftotext -enc UTF-8 -f 1 -l 20 "<local_path>" -(約 3 到 8k tokens)。
    • 備用1:參考管理工具全文,僅在本地 PDF 不可用且輸出少於 2,000 字時使用。
    • 備用2:要求使用者貼上目錄;將其標記為「來源:使用者提供」。
    • 備用3:對於知名教科書使用模型知識;每個條目標記為 [!note]。
  3. 決定檔案名稱:FirstAuthor_Year_Keyword.md(第一作者的姓氏,僅限 ASCII;關鍵字是關於書籍主要主題的 1 到 3 個單詞)。如果 books/{filename}.md 已存在,則就地更新。
  4. 建立或更新書籍筆記於 books/{filename}.md,使用 templates/book.md。將 last_verified 設定為今天的日期。
  5. 從步驟2填入目錄。如果不確定,將章節標記為 ? 並記錄限制。
  6. 萃取 3 到 5 個高階主題(僅書籍層級,不包含特定章節的主張)。輕量傳播:僅當主題是某研究線的核心且維基中已有 2 篇或更多論文觸及時,才更新 concepts/ 筆記;否則僅將其列出在書籍筆記中。達到筆記的主題遵循證據表規則:模式B步驟6b和8b。
  7. 治理檢查:應用 wiki-ingest 步驟5中的研究線匹配和概念與方法路由。在總覽層級,僅記錄哪些章節可能產生方法筆記與概念筆記;完整傳播在模式B中進行。
  8. index.md:如果索引嵌入了 Bases 視圖,請勿加入書籍條目;僅在完成新的父書籍攝入時更新 ## Quick Stats 中的「Books (ingested)」計數。在 manual 模式中,加入條目。絕不觸碰凍結的舊版索引。
  9. 附加到 log.md:## [YYYY-MM-DD] ingest-book | {Title}: overview。
  10. 報告:書籍筆記路徑、已識別的主題,以及可用於深度攝入的章節(/wiki-ingest-book [書名] > 第N章)。

模式B:章節攝入

觸發條件:/wiki-ingest-book [書名] > 第N章(或 > 章節:[章節標題])

  1. 讀取現有的書籍筆記於 books/FirstAuthor_Year_Keyword.md。

    • 如果不存在:停止。先執行模式A,然後重試。
    • 如果該章節未列在目錄中:新增一行 status: pending,在最終報告中註明,然後繼續。
    • 如果該章節已標記為 ingested:在使用者確認後再覆寫(預設:就地更新,保留現有的 [[wikilinks]])。
  2. 解析章節內容(串聯;請參閱「本地 PDF 解析」):

    • 從書籍筆記目錄中獲取章節頁面範圍,並使用記錄的偏移量將書籍頁面轉換為 PDF 頁面。僅在目錄頁碼本身未知時才詢問使用者。
    • 主要:pdftotext -enc UTF-8 -f <pdf_start> -l <pdf_end> "<local_path>" -(一個典型章節約 1k 到 8k tokens)。
    • 備用1:如果該章節是帶有自身庫條目的 bookSection 項目,則使用該項目的全文。
    • 備用2:從參考管理工具取得全書全文,僅在本地 PDF 不可用且書籍少於 5,000 字時使用。
    • 備用3:要求使用者貼上章節文字。
    • 備用4:模型知識,每個主張加上 [!warning]。它永遠不會達到概念或方法筆記,也不會獲得印章。
  3. 章節檔案名稱:FirstAuthor_Year_Keyword_ChNN.md(例如 Knuttgen_1987_Strength_Ch03.md)。

  4. 建立章節筆記於 books/{chapter_filename}.md,使用 templates/chapter.md。將 last_verified 設定為今天的日期。

    • 必需的契約:在前置內容中輸出 book: "[[{parent_book_basename}]]" 並驗證它能解析。如果不能,則父書籍尚未攝入:先執行模式A。
    • 初始狀態:應用 wiki-ingest 狀態表。僅填寫了目錄條目的骨架章節為 stub;至少有 2 個有來源發現的章節為 final。
    • 證據等級:預設為 evidence_level: textbook。僅當該章節本身是獨立的系統性回顧或後設分析時,才覆寫為 SR-MA 或 SR。測量品質保持在發現中的行內,永遠不在前置內容中。
  5. 萃取 3 到 8 個概念和 1 到 4 個方法:與 wiki-ingest 相同的萃取規則(請參閱 references/BOOK-INGEST-WORKFLOW.md)。

  6. 治理檢查:與 wiki-ingest 步驟5相同的研究線匹配和概念與方法路由。為此章節明確決定:概念筆記(經驗發現)、方法筆記(框架、協議)、或兩者。一般教學內容通常僅產生方法筆記;不要強迫為屬於 methods/ 的內容建立概念。 6b. 證據表與檢查,在傳播之前:將 wiki-ingest 步驟5b和5c應用於此章節,為該章節建立暫存表。針對書籍有三個補充:

    • 頁面欄給出PDF頁面和印刷頁面兩者,並且您落腳的頁面上確認了章節標題(錯誤的偏移量會引用另一個章節)。
    • 教科書採用嚴格解讀:檢查發現所命名的每個機制和標記。章節中列出的原因或標準清單,除非該項目就在頁面上,否則不能作為每個項目的證據。
    • 說明誰在發言:章節交給另一位作者的聲明應寫為「X,as reported by [[chapter]]」,而章節的臨床意見不應寫成試驗結果。 只有通過的列才能進入步驟7和8。從渲染的頁面中讀取跡象。
  7. 傳播至概念筆記,與論文攝入相同:將帶有 [[chapter_note]] 反向連結的發現附加到現有的 concepts/{Concept}.md,或根據與 wiki-ingest/references/CONCEPT-PROPAGATION.md 相同的建立規則從 templates/concept.md 建立一個新的。

  8. 如果適用,傳播至方法筆記。 8b. 為章節筆記蓋章:將 wiki-ingest 步驟8b應用於該章節(在 source_verification 中記錄驗證:庫金鑰、ISBN、已檢查的章節和頁面、日期)。

  9. 向前參照存根(自動):在章節主體寫入後,為尚不存在的同層級章節實例化任何向前參照:

    python skills/wiki-ingest-book/scripts/create_forward_ref_stubs.py \
      <wiki_root>/books/{book}_Ch{NN}.md  <wiki_root>/books/{book}.md   [--dry-run]
    

    該腳本掃描剛攝入的章節中的 [[{book}_ChNN]] 連結(別名感知),讀取書籍中心的 ## Table of Contents 表格以取得每個缺失章節的標題和頁面,從中心前置內容推導 DOI 和引用鍵({doi_base}_{N}、{citekey_base}_ch{N}),並寫入帶有 status: stub 的 UTF-8 存根。沒有目錄列的向前參照將被跳過並報告(需要手動攝入)。操作記錄到 _temp/wiki_ingest_book_stubs_created.md。wiki-lint 檢查項目 8 會識別 status: stub,因此這些存根不會導致 chapters_ingested 不同步,後者仍保留為實際已攝入章節的規範清單。

    ⚠️ 絕不要在章節的正文中寫入攝入狀態標記。 不要在 ## Related Papers、在 see also 清單或任何其他地方對同層級章節寫 *(pending ingest)* 或「尚未攝入」。攝入狀態是可變的,且只有一個家:書籍中心的 ## Table of Contents 列,步驟11會將其從 pending 切換為 ingested。複製到正文中的標記會將可變的事實複製到不可變的位置:同層級章節被攝入後,目錄更新,而正文卻永遠宣稱相反。在一次審計中,這在58個筆記中產生了68個陳舊標記,每個依賴項都已被攝入。沒有 lint 檢查能看到這一類問題,因為每個檔案自身是一致的,矛盾僅存在於檔案之間。只需連結同層級章節;如果作品在維基之外,請用純文字命名。

  10. 缺失概念報告(自動):在存根建立後,

python skills/wiki-ingest-book/scripts/missing_concept_report.py \
  <wiki_root>/books/{book}_Ch{NN}.md --inventory <wiki_root>/concepts/ \
  [--dry-run] >> _temp/missing_concepts_report.md

該腳本從定義了 concept: 前置內容的章節發現中收集概念金鑰,然後將其與 concepts/ 庫存進行比較。缺失的概念會被報告(不建立它們;建立由 wiki-ingest 步驟6處理)。用於審計追蹤。

  1. 最終的治理檢查(章節與書籍同步):
    • 更新 Table of Contents 中該章節的狀態列為 ingested。
    • 將章節編號附加到 chapters_ingested:。
    • 使用 ls books/{book}_Ch*.md | sort 列出事實上的章節筆記;如果它們與 chapters_ingested: 不同步,則重新附加。
    • 如果 chapters_ingested: 中有任何條目不是 books/{book}_Ch*.md 中的檔案,則將其標記為 ## Missing 並從清單中移除。
  2. index.md:遵循模式A步驟8。
  3. last_verified:將書籍筆記和章節筆記兩者中的 last_verified 更新為今天的日期。
  4. 附加到 log.md:## [YYYY-MM-DD] ingest-book | {Title}: Chapter N。
  5. 報告:章節筆記路徑、提取的概念/方法及其狀態、evidence_level(如果被覆寫)、建立的存根數量、以及 /wiki-ingest-book [title] > Chapter N 以獲取更多章節。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能