前言¶
在 DSH(DeepSeek Harness)裏處理整本 PDF 技術書時,常見做法是抽純文本丟給模型再粘回 Word 或 Markdown。這條路會丟掉原版的欄寬、字號、圖片位置和矢量圖,章節結構也要自己猜。掃描版還要上 OCR,成本和誤差都更高。
dsh-pdf-book-translate 面向有文本層的 PDF:先按章/節拆解並生成章節紀要,再在你明確指定的頁、章或節範圍內併發翻譯,儘量保持段落位置與版式,並支持斷點續譯、術語表與左右對照 PDF。下面按安裝、工具鏈與注意點說明用法。
這是什麼¶
- 名稱:dsh-pdf-book-translate(DSH bundle 插件 id:
pdf-book-translate) - 維護者:MikuDayo-IoI
- 分類:工作流(社區目錄歸類)
- 版本:0.1.1(README 與 package.json 一致)
- 許可證:MIT
插件在 Host 側註冊三個工具:pdf_book_outline、pdf_book_translate、pdf_book_status;PDF 解析與重排由 Python PyMuPDF worker 完成。不支持 OCR,掃描版 PDF 不在支持範圍內。
核心功能¶
章節掃描與紀要¶
pdf_book_outline 會檢查 PDF 是否有文本層,無則直接拒絕。結構識別順序:自帶目錄(TOC)→ 按標題字號/位置的啓發式章/節 → 回退爲單章全書。AI 爲每章生成約 180–350 字摘要,結果寫入輸出目錄的 zhan_jie.md 與 .pdf-book-state.json。
範圍門禁與合併¶
pdf_book_translate 必須收到 pages、chapters、sections 之一,或用戶明確要求全書時的 all=true。什麼都不傳時返回 status=scope_required 和可用章節列表,由 Agent 先問用戶,不會默認整本翻譯。
同一本書多次翻譯不同範圍會合併到同一份譯文 PDF;狀態中保留每次範圍與已完成頁的並集。
版式與排版(0.1.1)¶
- 段落級重排:提取時把視覺硬換行還原爲連續語義段落(代碼段保留換行);翻譯後按原欄寬、字號、對齊重新折行,而不是原文一行對應譯文一行。
- 版式避讓:重排參考同欄寬度,避開右側圖片、矢量圖與相鄰欄。
- 矢量圖保留:僅對文本層 redact;圖片、背景、表格線與矢量圖仍爲 PDF 原生對象,不柵格化。
翻譯、緩存與術語表¶
- 按約 8 段 / 3000 字符組批,默認併發 6(可在設置中調整 1–16)。
- 每段譯完即以
sha256(langPair + 原文)爲鍵寫入.translate-cache.jsonljournal,再原子合併到.translate-cache.json;進程被強殺後重跑可跳過已譯段落。 - 術語表支持 JSON 數組/對象與 TXT(製表符或逗號分隔),條目可設
locked;未指定路徑時會自動發現輸出目錄下的termbase.json、glossary.json、術語表.json等。 - API Key 留空時使用當前會話 Host 模型;填寫則走 OpenAI 兼容
/chat/completions(默認https://api.deepseek.com)。
輸出¶
默認輸出目錄爲 PDF 同目錄下的 <文件名>-translation,主要包括:
| 文件 | 作用 |
|---|---|
<書名>.<目標語言>.pdf |
譯文 PDF |
<書名>.<目標語言>.compare.pdf |
原版/譯文左右對照 |
zhan_jie.md |
章節紀要 + 內嵌斷點狀態 |
.pdf-book-state.json |
機器可讀斷點狀態 |
.translate-cache.json / .translate-cache.jsonl |
段落緩存與崩潰恢復 journal |
安裝與啓用¶
運行依賴¶
- Python 3.10+,且能
import pymupdf:python -m pip install pymupdf - Node.js 22+,pnpm 或 npm(用於從源碼構建)
從源碼構建時,在倉庫根目錄執行:
npm install
npm run build
npm test
構建產物包括 lib/index.js(Host 入口)、lib/client.js(Web 設置卡)與 worker/*.py。
裝入 DSH¶
README 說明:將包含 lib/、worker/、cordis.patch.yml 和 package.json 的包目錄,通過 DSH 插件管理器以 bundle 形式安裝。配置命名空間爲 pdf-book-translate;設置卡掛在 bundle 配置頁(plugins.bundle.config,key 爲包名 dsh-pdf-book-translate)。新安裝後刷新一次 Web GUI 即可看到設置項。
運行時不要把該項目的 devDependencies 一併裝進 DSH 宿主;發佈包僅保留 @deepseek-ai/schemastery 爲 dependency。
主要設置項¶
| 設置 | 默認 | 說明 |
|---|---|---|
apiKey |
空 | 留空用 Host 模型 |
baseUrl |
https://api.deepseek.com |
OpenAI 兼容端點 |
model |
deepseek-chat |
API 模式模型名 |
langPair |
en→zh |
默認語言對 |
concurrency |
6 |
併發批次 |
termbasePath |
空 | 默認術語表路徑 |
pythonBin |
python |
需能 import pymupdf |
Host 模式要求對應 provider 已在 DSH Models 頁配置憑據,或環境中有如 DEEPSEEK_API_KEY 等變量;否則工具會返回可操作的錯誤信息。
典型用法¶
整體流程如下(與 README 一致):
pdf_book_outline
├─ 檢查文本層
├─ 識別章/節並生成摘要
└─ 寫 zhan_jie.md + .pdf-book-state.json
↓
詢問用戶翻譯範圍(頁 / 章 / 節 / 全書)
↓
pdf_book_translate(必須顯式範圍)
├─ 提取段落 → 查緩存 → 併發翻譯 → 重建 PDF → 生成對照 PDF
└─ 寫回 state / zhan_jie.md,返回統計
↓
pdf_book_status(中斷後查看進度)
pdf_book_outline¶
| 參數 | 必填 | 說明 |
|---|---|---|
input |
✅ | PDF 路徑(絕對或工作區相對) |
outputDir |
可選 | 默認 <PDF 同目錄>/<文件名>-translation |
langPair |
可選 | 如 en→zh |
rescan |
可選 | true 重新識別結構 |
pdf_book_translate¶
| 參數 | 必填 | 說明 |
|---|---|---|
input |
✅ | PDF 路徑 |
pages |
範圍之一 | 如 1-20,35,40-45(1-based) |
chapters |
範圍之一 | 如 ch-1,ch-3 |
sections |
範圍之一 | 節 id 或標題 |
all |
範圍之一 | 僅當用戶明確要求整本時傳 true |
termbase |
可選 | 術語表路徑 |
pdf_book_status¶
用於中斷後查看章節紀要、已翻譯頁並集、緩存條目數、輸出文件是否存在及上次統計。
術語表示例(JSON 數組):
[
{ "src": "transformer", "dst": "Transformer", "locked": false },
{ "src": "DeepSeek", "dst": "DeepSeek", "locked": true }
]
適用場景與注意¶
適合:有文本層的技術書、教材 PDF,需要在 Agent 工作流裏分段翻譯、斷點續跑,並保留接近原版的版式與對照閱讀。
不適合:掃描版或無文本層 PDF(插件明確無 OCR)。
已知限制(README):
- 同一段落內混合字體樣式會按首 span 樣式統一寫回。
- 極長譯文可能觸發縮字號或排版警告,記錄在返回的
warnings中。 - 表格按文本行/單元格幾何處理,不重建表格結構。
- 緩存鍵不含術語表;改術語表後若要重譯,需刪對應緩存或換輸出目錄。
安全與權限:插件以當前 DSH 進程權限讀寫你指定的 PDF 與輸出目錄,並可能調用你配置的 LLM API。安裝前請閱讀 GitHub 源碼 與 MIT 許可證,確認環境與憑據策略符合你的要求。
DSH 社區插件目錄(SkillHub 條目)由社區維護,與 DeepSeek / 幻方無官方從屬關係;選型時以倉庫 README 與本地構建結果爲準。
結尾¶
dsh-pdf-book-translate 把「章節約束 + 術語表 + 版式保留 + 可恢復緩存」綁成一條 DSH 工作流,適合在智能體對話裏先 outline、再按範圍 translate、用 status 查進度。若你手頭是可複製文本的 PDF 而非掃描件,這條路徑比純文本抽取再手工排版更貼近原書閱讀體驗。