Book-to-Skill Converter
將書面知識轉化為可操作的代理技能,萃取結構——而非產生摘要。
哲學
書籍蘊含著結晶化的專業知識:框架、原則與技巧,這些都是耗費多年發展出的成果。此技能擷取這些知識,轉化為 GitHub Copilot CLI、Amp、Claude Code、Hermes Agent 或其他相容代理可以重複使用的格式。
萃取結構,而非摘要。 技能不是書籍報告。它是一套工具箱,包含:
- 具名框架(具有明確應用場景的心智模型)
- 可操作的原則(引導決策的規則)
- 技巧(逐步方法)
- 反模式(應避免事項及原因)
- 語調校準(作者思考與溝通的方式)
保留作者的精確性。 框架通常有特定名稱,背後有其道理。「5 個為什麼」不能與「多問幾次為什麼」混用。捕捉精確的表述方式。
適當地分層深度。 簡單的書籍 → 簡單的技能。含有 10 個以上框架的複雜書籍 → 含有參考檔案與隨需章節的技能。
運作模式
四種路徑可供使用。根據使用者的提問來選擇路線:
1. 完整轉換(預設)
觸發條件: 使用者提供一個或多個文件/目錄/glob 路徑,無特殊指示 動作: 執行以下所有步驟(步驟 0–9) 輸出: 完整的技能,包含 SKILL.md、chapters/、詞彙表、模式、速查表
2. 僅分析
觸發條件: 使用者說「分析」、「僅萃取」或「我想檢閱後再產生」 動作: 執行步驟 0–3,然後產出結構化的萃取報告(找到的框架、原則、技巧)。停止——不產生技能檔案。 輸出: 供使用者檢閱的分析報告
3. 從先前的分析產生
觸發條件: 使用者已有現有的分析筆記,或先前執行過「僅分析」 動作: 跳過步驟 0–3,使用提供的分析作為輸入,執行步驟 4–9 輸出: 根據提供的分析產生的技能檔案
4. 更新 / 摺入(現有技能)
觸發條件: 使用者提供一個或多個新的來源路徑,並表示想要更新現有技能(透過指向現有的技能資料夾、提供一個已存在於 SKILLS_HOME 的技能 slug,或明確要求更新)。
動作: 執行步驟 0(超出範圍檢查)、步驟 1(驗證輸入)、步驟 1.5(識別書籍類型),以及步驟 2(萃取新檔案)。然後跳到步驟 5(識別/偵測現有技能路徑)並執行 更新 / 摺入工作流程,將新內容合併到現有的技能檔案中。
輸出: 更新後的現有技能,包含新的/修訂的章節摘要以及合併的索引/詞彙表。
技能位置
此轉換器可以從多個技能系統執行。在尋找此轉換器的輔助腳本或寫入產生的書籍技能時,請優先使用以下位置:
- GitHub Copilot CLI 個人技能:
~/.copilot/skills/ - 跨代理個人技能(Copilot、Amp、Codex):
~/.agents/skills/ - Claude Code 個人技能:
~/.claude/skills/ - 專案本地 Copilot 技能:
.github/skills/ - 專案本地 Claude 技能:
.claude/skills/ - 專案本地 Amp / Copilot 技能:
.agents/skills/ - Amp 全域技能:
~/.config/agents/skills/ - Amp 舊版全域技能:
~/.config/amp/skills/ - Hermes Agent 個人技能:
$HERMES_HOME/skills/(預設為~/.hermes/skills/) - Hermes Agent 專案技能:
.hermes/skills/或.agents/skills/
對於產生的書籍技能,請優先使用使用者層級的跨代理根目錄 ~/.agents/skills/——一個實體副本即可服務所有支援的主機。Copilot CLI 和 Amp 原生即可發現它;Claude Code 需要從 ~/.claude/skills/<skill_name> 建立符號連結(在步驟 10 中建立,請參閱步驟 5 的規則)。僅在使用者要求時,才選擇主機私有或專案本地的根目錄。
步驟 0 — 超出範圍檢查
如果未提供任何參數,請停止並回應:
「book-to-skill 需要一個支援的文件路徑、資料夾或 glob 模式。用法:`book-to-skill ... [skill-name-slug]」
在整個工作流程中:
- 識別輸入路徑以及可選的技能 slug。
- 如果最後一個參數不是檔案、資料夾或存在/匹配任何檔案的 glob,且看起來像是技能 slug(例如小寫連字號、字母數字),則將其視為
SKILL_NAME。 - 將所有其他參數視為
INPUT_PATHS列表。 - 如果任何輸入路徑是現有的技能目錄(包含
SKILL.md和chapters/子資料夾),或者SKILL_NAME匹配SKILLS_HOME中現有的技能 slug,則將此執行標記為 更新/摺入 操作(模式 4)。
步驟 1 — 驗證輸入
驗證 INPUT_PATHS 中至少包含一個支援的檔案、目錄或 glob 模式。
對於目錄和 glob,展開它們以找到匹配的支援檔案(.pdf、.epub、.docx、.txt、.md、.markdown、.rst、.adoc、.html、.htm、.rtf、.mobi、.azw、.azw3)。
如果未找到任何支援的檔案,請以明確的錯誤訊息停止。
步驟 1.5 — 識別內容類型
在萃取之前,詢問使用者:
「這些來源有什麼類型的內容?這有助於我選擇最佳的萃取方法。
- 技術型 — 包含程式碼區塊、表格、公式、圖表(例如程式設計書籍、學術論文、架構指南)
- 文字為主 — 主要是散文,很少或沒有表格/程式碼(例如管理、生產力、敘事性非小說)
- 不確定 — 我將使用快速方法,並在品質看起來有限時警告你」
將答案儲存為 BOOK_TYPE:
- 選項 1 →
BOOK_TYPE=technical - 選項 2 →
BOOK_TYPE=text - 選項 3 →
BOOK_TYPE=text
如果 BOOK_TYPE=technical,在繼續之前通知使用者:
「📐 技術模式已選取——使用 Docling 進行結構感知萃取(表格、程式碼區塊、公式保留為 markdown)。這大約需要每頁 1.5 秒,因此較長的來源可能需要幾分鐘。現在開始……」
如果 BOOK_TYPE=text,通知:
「📄 文字模式已選取——對每種檔案類型使用最快的合適萃取器。純文字/Markdown/HTML 通常幾秒鐘內準備就緒;PDF 在可用時使用 pdftotext。」
步驟 2 — 從來源文件中萃取文字
執行萃取腳本,傳遞輸入路徑:
SCRIPT_PATH=""
HERMES_HOME_RESOLVED="${HERMES_HOME:-$HOME/.hermes}"
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || true)"
HERMES_PROJECT_TRUSTED=false
if [ -n "$PROJECT_ROOT" ] && [ "${HERMES_AGENT:-}" = true ] && \
command -v hermes >/dev/null 2>&1 && \
command -v python3 >/dev/null 2>&1 && \
hermes config get skills.trusted_project_dirs --json 2>/dev/null | PROJECT_ROOT="$PROJECT_ROOT" python3 -c 'import json, os, pathlib, sys; root=pathlib.Path(os.environ["PROJECT_ROOT"]).resolve(); sys.exit(not any(pathlib.Path(p).expanduser().resolve() == root for p in json.load(sys.stdin)))' 2>/dev/null
then
HERMES_PROJECT_TRUSTED=true
fi
CANDIDATES=(
"$HOME/.copilot/skills/book-to-skill/scripts/extract.py"
"$HOME/.agents/skills/book-to-skill/scripts/extract.py"
"$HOME/.claude/skills/book-to-skill/scripts/extract.py"
"$HERMES_HOME_RESOLVED/skills/book-to-skill/scripts/extract.py"
"$HERMES_HOME_RESOLVED"/skills/*/book-to-skill/scripts/extract.py
)
if [ "${HERMES_AGENT:-}" != true ]; then
CANDIDATES+=(
".github/skills/book-to-skill/scripts/extract.py"
".claude/skills/book-to-skill/scripts/extract.py"
".agents/skills/book-to-skill/scripts/extract.py"
)
fi
CANDIDATES+=(
"$HOME/.config/agents/skills/book-to-skill/scripts/extract.py"
"$HOME/.config/amp/skills/book-to-skill/scripts/extract.py"
)
if [ "$HERMES_PROJECT_TRUSTED" = true ]; then
CANDIDATES=(
"$PROJECT_ROOT/.hermes/skills/book-to-skill/scripts/extract.py"
"$PROJECT_ROOT/.hermes/skills"/*/book-to-skill/scripts/extract.py
"$PROJECT_ROOT/.agents/skills/book-to-skill/scripts/extract.py"
"$PROJECT_ROOT/.agents/skills"/*/book-to-skill/scripts/extract.py
"${CANDIDATES[@]}"
)
fi
for candidate in "${CANDIDATES[@]}"
do
if [ -f "$candidate" ]; then
SCRIPT_PATH="$candidate"
break
fi
done
if [ -z "$SCRIPT_PATH" ]; then
echo "Could not find scripts/extract.py for book-to-skill" >&2
exit 1
fi
PYTHON_BIN="${PYTHON_BIN:-python3}"
if ! command -v "$PYTHON_BIN" >/dev/null 2>&1; then
PYTHON_BIN="python"
fi
"$PYTHON_BIN" "$SCRIPT_PATH" $INPUT_PATHS --mode <BOOK_TYPE> --install-missing ask
在萃取之前,腳本會檢查偵測到的格式所需的選用 Python 套件。如果缺少更好的萃取器,它會提示使用者可用的後備方案。非互動式會話預設使用後備方案,除非安裝模式明確設為 yes。
提示——預先檢查環境: 執行 "$PYTHON_BIN" "$SCRIPT_PATH" --check 以輸出每種格式的已安裝萃取器報告,以及安裝缺少項目的確切命令,而不處理任何檔案。當使用者報告設定或品質問題時很有用。
這會建立一個每次執行的工作目錄——預設為 <tempdir>/book_skill_work-<pid>/,或者正是你在 BOOK_SKILL_WORKDIR 中設定的路徑——包含:
full_text.txt——所有來源的合併萃取文字,帶有清晰的視覺邊界標記。metadata.json——總覽合併大小、字數、頁數、token 計數、丟棄的 EPUB 圖片數量、解析出的workdir,以及已處理的個別sources詳細列表。
執行完成時會列印所有三個路徑(Workdir ->、Text ->、Meta ->)。從該輸出(或從 metadata.json 自己的 workdir 欄位)取得路徑,而不是假定固定位置——目錄名稱每次執行都不同,因此同一台機器上的並行萃取不會互相覆蓋結果。
讀取該次執行的 metadata.json 以檢查結果。
在產生任何內容之前,務必確認萃取的文件是你要的:檢查 metadata.json 中的 filename / source_file,或 full_text.txt 第一行的 SOURCE: 標頭。如果你正在等待背景執行,請等待其特定的 workdir——輪詢共用路徑可能會找到不同執行的輸出。
步驟 2.5 — 事前成本估算
讀取此次執行的 metadata.json(從萃取輸出的 Meta -> 路徑),並在進行任何產生之前向使用者呈現估算:
📖 偵測到來源:<total_sources> 個來源
<從來源中繼資料列表列出每個來源檔名與格式>
<如果 images_dropped > 5:警告有 N 個來源圖片未被讀取>
📄 合併頁數/章節:~<N> | 字數:~<N> | 總 token 數:~<N>K
💰 估計 token 成本(完整轉換 / 更新):
輸入(讀取 + 提示):~<N>K tokens
輸出(產生的/更新的技能檔案):~<N>K tokens
總計:~<N>K tokens
成本:將上述 token 計數乘以你目前模型的每 1M token
輸入/輸出費率(價格和模型名稱經常變動——請勿
硬編碼;引用今天的費率並標記為估計值)。
⏱ 估計時間:~<N> 分鐘
📁 將要產生/更新的檔案:
SKILL.md + 章節檔案 + 詞彙表 + 模式 + 速查表
➡ 繼續進行完整轉換 / 更新?(或輸入「analyze only」以預覽)
如何估算:
- 輸入 token ≈
estimated_tokens(來自 metadata)× 1.3(每次章節通過的提示開銷) - 輸出 token ≈ 章節數 × 每章節預算 + 4,000(SKILL.md)+ 4,500(詞彙表 + 模式 + 速查表)
- 根據
BOOK_TYPE的每章節預算中點(DEPTH 在步驟 4 中決定,並可能提高它):text≈ 1,000,technical≈ 1,800。如果使用者已經指出僅供參考或深度研究,請使用步驟 7 矩陣的對應列。
- 根據
- 成本:回報 token 計數,並乘以使用者目前的每 1M token 輸入/輸出費率。請勿硬編碼美元數字——模型名稱和價格會變動;如果你顯示一個,請標記為估計值並標註日期。
等待使用者確認後再繼續。如果他們說「analyze only」,則切換到模式 2。
步驟 2.6 — 大型書籍(> 50k tokens)的 REPL 風格存取
靈感來自遞迴語言模型(RLM)範例:將 full_text.txt 視為可查詢的語料庫,而不是一次性讀取。將整個檔案載入上下文會消耗稍後用於產生的預算。
對於超過約 50k tokens 的書籍,建議使用程式化探測而非無界限的 Read(full_text.txt):
# 在讀取之前進行大小檢查
wc -w "$FULL_TEXT_PATH"
# 在不載入整個檔案的情況下尋找章節偏移量
grep -n -E "^\s*(Chapter|CHAPTER)\s+[0-9]+" "$FULL_TEXT_PATH" | head -40
# 只提取你需要的章節(行數 start..end 包含)
sed -n '<start>,<end>p' "$FULL_TEXT_PATH"
# 在 SKILL.md 中聲明之前,確認某個框架確實被提及
grep -c -i "westrum\|dora" "$FULL_TEXT_PATH"
# 使用偏移量/限制的有針對性讀取可以避免傾印整個檔案
# Read(file_path=full_text.txt, offset=<line>, limit=<lines>)
對步驟 3(結構分析)、步驟 7(每個章節的摘要)和步驟 8(詞彙表/模式提取)使用此方法。對於低於 50k tokens 的書籍,一次性 Read 即可。
為什麼這很重要:一本 200 頁的書約為 75k tokens。為每個章節重新讀取一次(28 次通過)會消耗大量成本。使用 Shell + sed/grep 進行查詢可以將成本降低幾個數量級。
步驟 3 — 結構分析
讀取萃取文件的前 30%,以識別整體架構、作者的聲音以及主要的框架語言。
呼叫腳本:
"$PYTHON_BIN" "$SCRIPT_PATH" --analyze "$FULL_TEXT_PATH" --book-type <BOOK_TYPE>
如果 --analyze 尚未實作,請自行執行此分析:
- 識別 TOC / 章節結構——使用
grep -n取得章節標題。wc -l取得章節大小。建構大綱。 - 分類內容類型——技術(程式碼區塊、方程式、API 參考)vs 文字(散文、故事、練習)vs 圖表豐富。
- 識別重複的參考框架——作者是否反覆使用特定模型?(例如 DORA、Westrum、Cynefin、技術債務…)。這決定
SKILL_NAME的範圍。 - 決定深度:
- 如果書是寬的(許多框架,淺層)→ 參考技能(索引)。
DEPTH=reference - 如果書是深的(~3–5 個框架,穿插)→ 深度技能,每個框架有一章。
DEPTH=deep - 如果兩者混雜 →
DEPTH=mixed,預設為參考,但每個框架都有詳細的章節。
- 如果書是寬的(許多框架,淺層)→ 參考技能(索引)。
- 輸出結構分析:
- 列出找到的章節和子章節
- 建議
SKILL_NAME(如果之前未提供) - 推斷的
DEPTH和BOOK_TYPE
將此結構儲存為 <workdir>/structure.json。
步驟 4 — 定義技能範圍
設定技能範圍變數:
SKILL_NAME="<slug>" # 從結構分析或使用者輸入
DEPTH="<reference|deep|mixed>"
BOOK_TYPE="<technical|text>"
從步驟 1.5 和 3 提取的見解。
產生輸出: 要求模型列出此技能將產生的預期輸出檔案以及練習/環境(如果有的話)。
如果 DEPTH=reference,預期:
SKILL.md+ 每章 200–500 字的摘要- 詞彙表
- 沒有詳細的模式
如果 DEPTH=deep,預期:
SKILL.md+ 每章 800–1500 字的深度摘要- 已提取的模式和反模式
- 速查表
- 練習(如果適用,請參閱步驟 7.5)
如果 DEPTH=mixed,預期:
SKILL.md+ 每章 500–1000 字- 參考文件(除非使用者另有指定,否則回退到參考但提供詳細的章節)
步驟 5 — 決定目標路徑
根據上述技能位置中列出的優先順序決定輸出目標。
- 從
SKILLS_HOME環境變數開始(如果已設定)。 - 否則,檢查常見根目錄的存在情況:如果有
~/.agents/skills/則優先使用, 然後是~/.copilot/skills/,然後是~/.claude/skills/等。 - 對於現有技能(模式 4):如果使用者在要求更新時提供了特定路徑,精確地使用該路徑。如果使用 slug 且存在,則使用它在已發現目錄中的位置。
- 對於新技能:將
<SKILL_NAME>寫入~/.agents/skills/下的新目錄, 然後從~/.claude/skills/建立符號連結(請參閱步驟 10)。
設定 TARGET_DIR。
注意: 此步驟需要優先使用技能位置中定義的優先順序,同時保持對使用者自身代理設定的敏感度。
步驟 6 — 初始化目標目錄
如果目標目錄尚不存在,則建立它:
mkdir -p "$TARGET_DIR"
mkdir -p "$TARGET_DIR/chapters"
mkdir -p "$TARGET_DIR/patterns"
mkdir -p "$TARGET_DIR/exercises" # 如果 DEPTH=deep 或 mixed
步驟 7 — 撰寫章節檔案
對於來源文件中找到的每個章節/主要部分,撰寫一個對應的摘要檔案到 chapters/。
7a — 計算每個章節的預算
讀取 structure.json 以取得章節列表。對於每個章節,根據 BOOK_TYPE 和 DEPTH 分配 token 預算:
| DEPTH \ BOOK_TYPE | technical | text |
|---|---|---|
| reference | 600 | 400 |
| deep | 1800 | 1000 |
| mixed | 1000 | 700 |
7b — 提取章節內容
對於小書(< 50k tokens):使用 Read 取得整個 full_text.txt。
對於大書(> 50k tokens):使用 shell 來針對性提取:
# 從結構分析取得章節的開始行
CHAPTER_START=$(grep -n -F "$CHAPTER_TITLE" "$FULL_TEXT_PATH" | head -1 | cut -d: -f1)
# 將下一個章節邊界或檔案結尾作為結束
CHAPTER_END=$(tail -n +$((CHAPTER_START + 1)) "$FULL_TEXT_PATH" | grep -n -E "^\s*(Chapter|CHAPTER)\s+[0-9]+\s*$" | head -1 | cut -d: -f1)
if [ -z "$CHAPTER_END" ]; then
CHAPTER_END=$(wc -l < "$FULL_TEXT_PATH")
else
CHAPTER_END=$((CHAPTER_START + CHAPTER_END - 1))
fi
# 提取章節文字
sed -n "${CHAPTER_START},${CHAPTER_END}p" "$FULL_TEXT_PATH" > /tmp/chapter_content.txt
然後處理 /tmp/chapter_content.txt 以產生摘要。
7c — 架構化摘要
對於每個章節,產生包含以下內容的 markdown 檔案:
# Chapter <N>: <Title>
## Summary
[2–3 sentences capturing the core argument or framework]
## Key Takeaways
- <3–5 point-form insights from this chapter>
## Frameworks Introduced
- **<Name>**: <1-sentence description of the framework, how to use it, when to apply it>
## Anti-Patterns / Misconceptions Addressed
- **<Name>**: <What to avoid doing and why the author warns against it>
## Principles & Techniques
- **<Name>**: <Step-by-step if technique, heuristic if principle>
## Cross-References
- Links related chapters, glossary entries, patterns
對來源文件中的每個主要章節重複此過程。
步驟 7.5 — 設計練習(僅限 DEPTH=deep 或 mixed)
對於 deep 或 mixed 深度的書籍,建立練習,將書本概念實際應用於軟體工程場景:
# Exercise: <Name>
## Context
<1–2 sentences describing when a developer would encounter this situation>
## Problem
<Concrete scenario the user needs to analyze or solve>
## Hints
- <optional hint to nudge without giving away the answer>
## Model Answer
<Expected reasoning path using the author's framework(s)>
將每個練習寫入 <TARGET_DIR>/exercises/<kebab-case-name>.md。
步驟 8 — 萃取詞彙表、模式與反模式
8a — 詞彙表
掃描章節摘要和書本草稿以找到重複出現的專有名詞。對於每個術語:
- 定義
- 出處章節
- 作者使用的原始語言(引述)
## Glossary
### <Term>
**Source:** Chapter <N>
**Definition:** <extracted definition from text>
**Author's phrasing:** > "..."
**Usage:** <how a developer might apply this concept in conversation or code review>
寫入 <TARGET_DIR>/patterns/glossary.md。
8b — 模式與反模式
對於每個識別出的模式或反模式:
## Pattern: <Name>
**Category:** Framework | Principle | Technique | Anti-pattern
**Source:** Chapter <N>
**Why it matters:** <impact on engineering outcomes>
**How to apply it:** <actionable steps>
**When to use it / avoid it:** <context>
**Related concepts:** <cross-refs to glossary, other patterns>
寫入 <TARGET_DIR>/patterns/patterns.md。合併到統一的索引中。
步驟 9 — 產生 SKILL.md
在 $TARGET_DIR 中寫入 SKILL.md,結構如下:
# <SKILL_NAME>
## Overview
<1 paragraph: what this skill provides—frameworks, mental models, vocabulary, and curated practices from <Book Title> and related documents>
## Key Frameworks & Mental Models
- **<Name>** — <1-line definition>
- **<Name>** — <1-line definition>
_(see chapters/ for detailed walkthroughs and examples)_
## Principles & Heuristics
- **<Principle>** — <1-line when/how to apply>
## Core Techniques
- **<Technique>** — <when to use it, what it achieves>
## Anti-Patterns & Pitfalls
- **<Anti-pattern>** — <why it fails>
## Vocabulary & Glossary
See [patterns/glossary.md](patterns/glossary.md) for all defined terms. Key terms:
- **<Term>** — <brief definition>
## Usage Guide
When working on code or design decisions:
1. **Identify the problem type** — is this a <framework domain> problem?
2. **Apply the relevant framework** — use <Framework> to structure your thinking…
3. **Check against anti-patterns** — am I falling into <Anti-pattern>?
4. **Use the vocabulary** — frame discussions using the author's terms for precision
## Related Chapters
- [Chapter 1 — <Title>](chapters/chapter-01.md)
- [Chapter 2 — <Title>](chapters/chapter-02.md)
…
## Exercises
_(if DEPTH=deep or mixed)_
- [Exercise: <Name>](exercises/<name>.md)
## Source References
- Original document(s): <paths>
- Extracted: <timestamp>
步驟 9.5 — 品質審查(可選但建議)
在聲明完成之前,審查產生的技能:
- 所有章節摘要是否存在且大小匹配
DEPTH預算? - 詞彙表是否包含在「原始語言」中引用的引述?
- 是否有錯誤引用或幻覺的風險?(框架:它是否實際存在?)
- 反模式是否明確說明為什麼它不好?
- SKILL.md 中的使用指南是否是可操作的——而不是泛泛而談?
- 交叉引用是否解析(不存在中斷的連結)?
- 如果模式 4(更新),新內容是否已整合而非重疊?
向使用者報告審查結果。
步驟 10 — 符號連結(僅限 Claude Code)
如果目標是 ~/.agents/skills 且 Claude Code 已安裝:
mkdir -p ~/.claude/skills
ln -sf "$TARGET_DIR" ~/.claude/skills/"$SKILL_NAME"
確認 Claude Code 可以發現此技能:
ls -la ~/.claude/skills/ | grep "$SKILL_NAME"
如果 Claude Code 未安裝,或目標是專案本地目錄,請跳過此步驟。
腳本位置參考
extract.py 腳本應位於上述任何技能根目錄下的 scripts/extract.py。
使用 --help 取得腳本選項:
"$PYTHON_BIN" "$SCRIPT_PATH" --help
疑難排解
| 問題 | 檢查 |
|---|---|
| 找不到腳本 | 腳本是否安裝了?在技能根目錄中執行 find . -name extract.py。 |
| 錯誤語言 | 文件是否包含非目標語言?腳本不翻譯——它萃取結構。 |
| 幻覺框架 | 章節摘要是否包含 Sketch 框架?一個章節可能沒有——檢查原始文字。 |
| 缺少格式支援 | 執行 extract.py --check 查看缺少什麼。先安裝最佳萃取器。 |
| 慢速萃取 | 技術模式使用 pydocling。一張投影片可能需要 1–3 秒。較小的文件使用文字模式。 |
無代理模式
如果你希望在不使用 AI 代理的情況下執行萃取,可以在終端機中手動執行:
# 檢查已安裝的萃取器
python3 /path/to/extract.py --check
# 以文字模式萃取 PDF
python3 /path/to/extract.py document.pdf --mode text
# 以技術模式萃取 EPUB
python3 /path/to/extract.py book.epub --mode technical
這對於在讓代理處理之前預先處理文件很有用,或者如果你想要比代理可以提供的手動控制更多。萃取輸出(full_text.txt、metadata.json)可以稍後使用 BOOK_SKILL_WORKDIR=<path> 環境變數由代理讀取。