哲学书籍翻译 Skill v4(试验版 v0.4.0)
风格分析 → 直译 → 反思 → 雅化 → 风格审校 → 查验 → 交付 · 外文原词零损伤 · 哲学 register · 作者风格保真 · 词汇层红线 · 双栏对照
> 本 skill 的谱系:方法论内核继承自 academic-translation(三步法、Provenance、术语一致性、双栏导出),语言纪律继承自 academic-humanizer(AI-tell 目录、主张-证据纪律、保留清单),行文风格分析继承自 dhdna-profiler(Digital Human DNA 认知风格提取框架,MIT)。在两者之上做了 6 项哲学向适配:
>
> 1. 占位保护重映射:把「LaTeX 公式/引用」不变量换成哲学文本的「外文原文词(希腊/拉丁/德文)、人名、书名、页码」不变量 + 「引文」按 quote_bilingual 处理(默认译出)(见 refs/foreign-term-preservation.md);
> 2. 段落惯例重写:IMRaD 论文惯例 → 哲学论证散文的段落类型惯例(见 modules/prose-shaping.md);
> 3. 雅化目标重写:顶会风格 → 哲学 register(精确、克制、有节奏;长句处理哲学特例),见 refs/register-words.md;
> 4. 输出裁剪:去掉 LaTeX 投稿版,保留 风格分析 / 直译稿 / 反思稿 / 雅化终稿 / 双栏 MD / 双栏 HTML / 自检报告(见 modules/bilingual-export.md);
> 5. 【v3 新增】行文风格分析前置:把 dhdna-profiler 的 12 认知维度、推理拓扑、张力对与 v2 原有的行文风格规范(prose-shaping / register-words / ai-flavor / preserve-list)融合为「文本行文风格分析模块」(见 modules/style-profiling.md),翻译前先对原文做风格画像(S0),产出 Style Profile(文本风格 + 语言习惯 + 翻译适配指令),并贯穿 Step 1/2/3 作为风格约束——译文"像作者用中文写出来的",而非"AI 用哲学腔翻出来的";
> 6. 【v4 新增】词汇层红线 + 译文风格审校闭环:实战诊断发现 上一代版本存在"引文双语强制扭曲文风指纹(括号率+153%)"与"画像管句式不管词汇(连接词/情态词/译名失守)"两大缺陷,v4 以「词汇层红线」锁死 register 负面清单优先级(论证忠实 > 词汇层红线 > 风格匹配 > 流畅),以「S4 译文风格审校」把 dhdna 从"仅前置画像"升级为"画像→翻译→再审校"闭环(见 modules/style-profiling.md §S4 与 05-style-review.md)。
工作流概览
flowchart LR
A[用户输入<br/>text / markdown / pdf] --> P[Preflight<br/>P1 完整性 / P2 三选项 / P3 路由]
P --> R[输入路由 + 占位掩码<br/>外文原词 / 引文 / 人名 / 书名]
R --> S0[S0 行文风格分析 ★v3<br/>12 风格维度 + 拓扑 + 语言习惯<br/>+ 词汇层适配清单 ★v4<br/>→ Style Profile]
S0 --> S1[Step 1 直译<br/>保术语 · 逐句对应 · 不追求流畅<br/>+ 遵循 Style Profile 适配指令]
S1 --> S2[Step 2 反思<br/>术语一致 + 论证忠实 + 去 AI 味<br/>+ Style Profile 风格保真检查<br/>+ 词汇层红线检查 ★v4]
S2 --> CK{精翻模式?<br/>中途检查点}
CK -->|继续| S3[Step 3 雅化<br/>哲学 register + 段落级流动<br/>+ 作者风格个性化层]
CK -->|停在 Step 2| S4
S3 --> S4[S4 译文风格审校 ★v4<br/>12 维二次画像 → 对比 Style Profile<br/>→ 05-style-review.md 偏移报告<br/>→ 回改 Step 2/3(≤2 轮)]
S4 --> T[查验点 ★v0.2.1<br/>restore 还原 → 03-restored + 04 + 07<br/>询问用户:查验 / 提意见 / 交付?]
T -->|提修改意见| S3
T -->|查验通过·用户主动提出交付| D[最终交付<br/>合规扫描 + 剥离 + 合并/epub<br/>+ 交付最终成品]
D --> END
T -.->|先放着| HOLD[工作稿保留<br/>随时可续接查验]
输入参数(结构化契约)
| 参数 | 类型 | 必填 | 默认 | 取值 / 说明 |
|---|---|---|---|---|
input_kind |
enum | ✅ | 自动检测 | text / markdown / pdf(有文本层);P1 完整性检查决定 |
direction |
enum | 否 | 按输入语言推断 | en2zh 英→中(书籍翻译主场景)/ zh2en 中→英 / bilingual 双向对照 |
depth |
enum | 否 | standard |
quick(仅 Step 1,~1×)/ standard(Step 1+2,~2.5×,日常推荐)/ full(Step 1+2+3,~4×,成书级必选) |
glossary_mode |
enum | 否 | merged |
builtin 仅预置哲学库 / user 仅用户库 / merged 双方合并(默认推荐,见 config/user-glossary.template.yaml) |
style_profiling |
enum | 否 | auto |
auto(短文本/quick 做轻量版,standard/full 做完整版,自动判定)/ full(强制完整 12 维分析)/ off(跳过 S0,仅限用户明确要求快速粗译) |
quote_bilingual |
enum | 否 | off |
★v4 引文双语策略:off(默认,引文直接严格依据原文翻译为中文——翻译时把 <QUOTE_N> 直接译成中文(中文引号“ ”呈现),正文不保留英文原文,QUOTE 占位符不还原;引文后的出处括注原样保留)/ on(双语对照:引文译文 + 原文,每个引文后紧跟 ("原文") 或 ("译文"),可用 scripts/quote_translate.py 批处理)/ auto(先按 off 直接翻译为中文,查验点若用户提出"要原文对照/双语"再启用 on) |
output_dir |
path | 否 | philosophy-translation-output/{ISO-time}-{book-slug}/ |
用户可指定,但绝不写入用户原始文件路径 |
输出契约(详见 §输出):
> v0.2.1 两阶段概念:00-07 均为工作产物(供查验);最终交付物(终稿 md / 双栏 / 合并全书 / epub)只在用户主动提出交付后生成。
| 字段 | 类型 | 默认存在的模式 |
|---|---|---|
output_files |
list[str] | quick→{00,01,06} / standard→{00,01,02,04,05,06,07} / full→{00,01,02,03,04,05,06,07}(00 为 Style Profile,05 为 S4 审校报告;均为工作产物) |
review.req_pending |
bool | 全模式存在;翻译完成、查验询问发出后为 true,用户未答复前不进入最终交付 |
style_profile.completeness |
enum | 全模式存在;full 12 维完整 / lite 轻量版(quick 或短文本) |
provenance.coverage_pct |
float [0,1] | 全模式存在;理想 ≥ 0.95 |
placeholder.verify_passed |
bool | 含外文原词/引文时存在;false → 阻断输出 |
terms_hit_rate |
float [0,1] | 全模式存在;术语库命中率 |
⛔ Preflight(任何翻译前的开场白)
Step P1:输入完整性
| 输入类型 | 检查项 | 失败处理 |
|---|---|---|
| PDF 文件 | 路径存在 + 文本层可提取(非扫描件) | 扫描件先 OCR,或在用户接受 ocr_warning=true 后才继续 |
| Markdown / txt | 文件存在或粘贴 | 粘贴文本字符数 < 50 时询问是否真的要翻译这么短的内容 |
| 粘贴文本 | 字符数 ≥ 50 | — |
Step P2:方向 + 深度 + 术语库三选项澄清
成本差异很大,模型不能替用户决定投入。用户没说时给默认值并展示「⚙️ 已应用配置」回退机会。
✋ 翻译前请确认 3 个选项:
1. 翻译方向:
[a] 英 → 中(阅读 / 译书,默认)
[b] 中 → 英(逆向写作)
[c] 双向(生成中英对照版)
2. 输出深度:
[a] 快速(仅 Step 1 直译,约耗 1×时间,适合快速理解原意)
[b] 标准(Step 1+2 直译+反思,约耗 2.5×时间,日常推荐)
[c] 精翻(Step 1+2+3 直译+反思+雅化,约耗 4×时间,成书/出版级必选)
3. 术语库:
[a] 仅用预置哲学库(glossary/philosophy-builtin.md)
[b] 仅用你上传的自定义术语库(config/user-glossary.yaml)
[c] 预置 + 自定义合并(默认推荐;你上传的优先)
> 若用户选 2c 精翻,额外提示:"精翻会在 Step 2 → Step 3 之间暂停一次,让你确认术语和直译质量。"
> 若用户选 2a 快速,说明:"快速模式仍会做轻量版行文风格分析(只取风格画像 + 语言习惯清单),但只输出直译稿。"
> 若用户有哲学术语库文件或译名偏好(哪怕只是口头几条),引导其填写 config/user-glossary.template.yaml 的 mappings 段——这是本 skill 预留的人工术语输入接口,优先级高于预置库。
> 💡 v3 前置说明:无论选择何种深度,翻译开始前都会运行 S0 行文风格分析(对原文做文本风格与语言习惯画像,产出 Style Profile)。它不消耗额外选择项,自动随流程执行;style_profiling=off 仅在用户明确要求"不要风格分析、直接粗翻"时启用。
Step P3:路由
> ⚠️ 路由 = 加载触发器:进入对应分支前,必须通过 Read 工具读取标 📖 MANDATORY 的文件再开始执行。
| 用户意图 | 路由模块 + 加载触发器 |
|---|---|
| "翻译这段/这本书(文本粘贴)" | 📖 MANDATORY: modules/input-router.md text 分支 + 📖 MANDATORY: modules/style-profiling.md(S0 前置) |
| "翻译这个 Markdown / txt 文件" | 📖 MANDATORY: modules/input-router.md markdown 分支 + 📖 MANDATORY: modules/style-profiling.md(S0 前置) |
| "翻译这个 PDF" | 📖 MANDATORY: modules/input-router.md pdf 分支 + 📖 MANDATORY: modules/style-profiling.md(S0 前置) |
| "精翻 / 出版级翻译 / 雅化" | 三步全开 + 📖 MANDATORY: modules/prose-shaping.md |
| "快翻 / 快速翻译 / 粗翻" | 仅 Step 1 + S0 轻量版(不加载 prose-shaping 全量) |
| "用我的术语库" / "这几个词我习惯译成…" | 📖 MANDATORY: config/user-glossary.template.yaml |
| "校对译文 / review my translation" | 跳 Step 1,从 Step 2 进入 + 📖 MANDATORY: refs/ai-flavor-patterns.md(已有 Style Profile 则沿用,无则先补 S0 轻量版) |
S0 — 文本行文风格分析(v3 前置 · 所有翻译任务必经)
> 📖 MANDATORY:modules/style-profiling.md + refs/style-signals.md(取证细则)。
位置:输入路由(切片 + 掩码)完成后、Step 1 之前。输入:路由产出的 raw_text(掩码前文本——占位符会扭曲引文/原词密度等风格信号)。输出:00-style-profile.md(Style Profile)。
目的:在动手翻译前,先搞清楚这本特定文本的行文风格与语言习惯——作者句式是繁是简、修辞是密是疏、语气是克制的还是激越的、hedging 精细还是断言斩钉截铁、论证是线性推进还是辩证回环。Style Profile 将作为 Step 1/2/3 的风格约束贯穿全程。
五个结构件(详见 modules/style-profiling.md):
1. 12 风格维度评分(1-10,附文本证据 + 置信度)——由 dhdna-profiler 的 12 认知维度改造为「行文信号 → 翻译约束」映射;
2. 推理拓扑(Linear / Spiral / Web / Dialectic / Fractal)——决定段落组织的保持策略;
3. 语言习惯清单(作者特有写法 3-10 条 → 翻译必守项);
4. 翻译适配指令——把原文特征映射为「中文侧如何匹配」的可执行规则,Step 1/2/3 逐条遵守;
5. 词汇层适配清单 ★v4——把原文的微观用词指纹(连接词谱系 / 情态词映射 / 术语译名决策 / 括注密度策略)映射为中文侧必守项。这是 v4 的关键补强:v3 实战诊断表明,文风相似度计量(括号率/引号率/连接词/情态词)主要由词汇层决定,而 12 维画像与适配指令只覆盖句式/修辞层——词汇层清单直接锁死"所以 vs 因此""应该 vs 应当""判据 vs 判准"这类微观选择(详见 modules/style-profiling.md §二-Phase 3 与 §四模板「八、词汇层适配清单」)。
融合边界:哲学 register 基线(精确/克制/有节奏)、去 AI 味目录、论证强度守恒始终有效,Style Profile 只在基线之上叠加"作者个性层";冲突时优先序 论证忠实 > 词汇层红线(register-words 负面清单)> 风格匹配 > 流畅 ★v4。风格分析只用于匹配,绝不用于改造作者(refs/preserve-list.md 护栏)。
模式:quick/短文本 → 轻量版(风格画像 + 语言习惯 + 前 3 条适配指令 + 词汇层清单核心项);standard/full → 完整版(含全部 12 维 + 词汇层清单)。长书无人值守:第 1 轮产出完整版并落盘,后续每轮沿用 + 增量更新。
S4 — 译文风格审校(v4 新增 · 翻译完成后、查验点之前)
> 📖 MANDATORY:modules/style-profiling.md §S4 + 00-style-profile.md(对照基准)。
位置:Step 3(或 quick 的 Step 1 / standard 的 Step 2)产出完成后、查验点之前。输入:译文终稿(还原占位符后的文本——占位符会扭曲引文密度等信号)+ 00-style-profile.md。输出:05-style-review.md(S4 审校报告)。
目的:v3 实战诊断发现——"前置画像→翻译"的单向链路不够:画像分析的是原文,执行时模型注意力被规则挤占,译文可能悄悄偏离作者风格(如分析深度下降、口语连接词渗入、括注密度暴涨)而无人发现。S4 把 dhdna 审查能力后置到译文上,形成「画像→翻译→再审校」闭环:对译文做一次 12 维二次画像,与原文画像逐维对比,偏差 ≥ 2 分或命中词汇层红线即触发回改。
S4 执行流程:
1. 二次画像:对还原后的译文按 12 维评分(1-10,附证据),与 00-style-profile.md 的原文画像逐维对比;
2. 偏移判定:|译文分 − 原文分| ≥ 2 → 该维标 OFFSET;命中词汇层红线(register-words 负面清单 / 词汇层适配清单违反)→ 标 REDLINE;
3. 偏移归因:对每个 OFFSET/REDLINE 定位到具体段落与具体改写(如"原文论证深度 9,译文 7——三段长句被拆成短句堆叠,逻辑链断裂");
4. 回改:按归因回 Step 2/3 修订相关段落(保留术语与风格基线),重新 S4 核对;回改最多 2 轮,超出后把残留偏移写入 05 报告并标 manual_review 交用户查验时定夺;
5. 报告落盘:05-style-review.md 记录对比表 + 回改记录 + 残留偏移。
S4 与既有机制的关系:S4 是风格维度的自动校审(机器可查:维度分差、红线词密度、括注率),查验点是整体质量的人工校审(用户提意见);两者互补,S4 不替代查验点。quick 模式做轻量版 S4(只核对词汇层清单 + 4 个核心维度);standard/full 做完整版。
核心方法 — 三步翻译法(继承 academic-translation)
把「忠实」与「流畅」解耦:先逐句忠实直译(Step 1),再以全文视角校术语一致与论证忠实(Step 2),最后才追求文笔(Step 3)。v3 在三步之前由 S0 提供 Style Profile,使每一步都带"作者风格"意识,而非对着一套通用腔调。中间产物全部保留,便于 diff 和回退。
Step 1 — 直译(保术语 · 逐句对应 · 不追求流畅 · 遵循风格基线)
> 📖 进入 Step 1 前 MANDATORY 读取:glossary/philosophy-builtin.md(预置哲学库)+ 用户术语库(若 glossary_mode 含 user)+ refs/foreign-term-preservation.md(占位保护规则)+ 00-style-profile.md(S0 产出的风格基线,含词汇层适配清单)。
目标:忠实传达原意,保留所有外文原文词、人名、书名、数字,不追求流畅;引文按 quote_bilingual 处理(默认 off 直接译出为中文);同时不偏离 S0 判定的作者风格基线(如原文句式繁复,直译就不必人为简化)。
强制规则:
1. 外文原词 / 人名 / 书名 / 章节引用 / 数字是占位符不变量:<TERM_1> <NAME_1> <TITLE_1> <CITE_1> <NUM_1> 等掩码原样保留,翻译时绝不解读改动;引文 <QUOTE_N> 例外——按 quote_bilingual 处理(off 默认:直接译成中文替换占位符;on:保留 + 后跟译文),详见下一条与 refs/foreign-term-preservation.md
2. 引文双语策略(★v4 参数化 · 默认 off = 引文直接翻译为中文):按 quote_bilingual 参数执行——
- off(默认):引文直接严格依据原文翻译为中文。翻译时把每个 <QUOTE_N> 译成中文(中文引号“ ”呈现,作为正文有机部分),QUOTE 占位符被译文替换、不再还原英文原文;不得只留占位符不译也不还原(= 事故);引文后的出处括注(Op. cit. 等)原样保留在译文后。校验:placeholder_tool.py verify --quote-translate(引文翻译覆盖率必须 1.0)。
- on(双语对照):每个 <QUOTE_N> 后紧跟中文译文,格式 <QUOTE_1>("译文")(英文引文)/ <QUOTE_1>(译意)(外文原词引文),引文后的出处括注(Op. cit. 等)保留在译文后;可用 scripts/quote_translate.py 批处理。
- auto:先按 off(引文直接翻译为中文),查验点用户提出"要原文对照/双语"后再启用 on。
占位符规则:TERM / NAME / TITLE / CITE / NUM 在任何模式下都是不变量,100% 保留并还原;QUOTE 在 off/auto 模式被中文译文替换(不还原),在 on 模式保留还原 + 后跟译文。外文原词引文(拉丁/希腊/法语座右铭,属论证要素)无论模式都保留原词 + 括注译意(见 refs/foreign-term-preservation.md)
3. 占位符后括注禁令(v0.3.0):禁止添加与占位符还原值相同的括注(如 <NAME_1>(Wittgenstein)),译文/译意必须与原文不同(详见核心原则 3.6)
4. 专业术语优先用术语库标准译法;术语库未覆盖时保留原文 + 括号附译法,如 "Being(存在)",方便读者反向查阅
5. 哲学概念词绝不自行发明译法:宁可保留原文,也不造生僻词
6. 数字 / 页码 / 章节引用(§ / ch. / p.)原样保留;脚注编号 <NUM_N> 与原文逐一相同
7. 段落结构(句子边界)保持 1:1 对应——便于 Step 2 对齐
8. 不解释、不评论、不省略——尤其不替原作者补论证、不把暗含的意思说破
9. 词汇层红线 ★v4:连接词/情态词/译名按「词汇层适配清单」与 refs/register-words.md 执行——原文的 therefore/consequently → "因此/因而/由此"(不默认"所以");原文 should → "应当"(不默认"应该");术语译名沿用术语库决策,不自由发挥。词汇层红线优先级高于 Style Profile 个性层(论证忠实 > 词汇层红线 > 风格匹配 > 流畅)
输出格式:每段译文带 Provenance 标注:
- segment_id: §2-p3
source_page: 41 # PDF 页码;文本输入则为段落序号
source_section: "2. On the Concept of Being"
source_excerpt: "To be is to be perceived."
step1_literal: "存在即被感知。"
preserved:
terms_kept_en: ["Being"]
quotes: ["\"esse est percipi\""]
names: ["Berkeley"]
Step 2 — 反思(术语一致 + 论证忠实 + 去 AI 味 + 风格保真 + 词汇层红线)
> 📖 MANDATORY: refs/ai-flavor-patterns.md + refs/preserve-list.md + modules/prose-shaping.md(段落类型判断用)+ 00-style-profile.md(风格保真维度用,含词汇层适配清单)。
目标:检查直译产生的不自然表达,应用哲学学术规范,确保术语一致——并且不改变原作者的哲学主张,不磨平作者风格。
6 个反思维度(每段逐项检查,比 v3 多一个词汇层红线维度):
| 维度 | 规则来源 | 典型问题 → 修正 |
|---|---|---|
| 术语一致性 | glossary + 用户库 | 同一术语 §1 译"存在"、§3 译"存在者" → 全文统一(哲学概念译名不一致 = 致命伤) |
| 论证忠实(主张-论证纪律的哲学版) | refs/preserve-list.md | 原文明说"可能",译文不能升级为"必定";原文的限定从句(前提/例外/条件)一个都不能丢 |
| 去 AI 味 | refs/ai-flavor-patterns.md | 模板化开篇、空洞填充("在很大程度上")、被动滥用、机械排比、"首先…其次…最后…" |
| 中文自然度 | refs/register-words.md | 翻译腔:"被…所…"、"…性…化"堆砌、句子结构镜像 |
| 风格保真(v3 新增) | modules/style-profiling.md 五/六节 | 译文是否磨平了作者风格?原文短促断言被译成绵软长句?原文克制被译成煽情?原文的破折号插入语被削平?→ 按 Style Profile 适配指令回退 |
| 词汇层红线 ★v4 | refs/register-words.md + Style Profile「八、词汇层适配清单」 | 原文 therefore 被译成"所以"(应"因此/因而")?原文 should 被译成"应该"(应"应当")?原文 may 被升级?译名偏离术语库?括注密度远超原文?→ 按词汇层清单修正,此维度优先级高于风格保真(词汇层红线是硬底线,个性层不可推翻) |
两条硬约束:
- 术语一致性扫描必须全文级而非段内——读者跨章节查同一概念时,译法不一致会被误判为两个东西
- 任何修改保留 Step 1 → Step 2 的 diff 可见
Step 3 — 雅化(哲学 register + 段落级流动 + 作者风格个性化层)
> 📖 MANDATORY(精翻模式):modules/prose-shaping.md + refs/register-words.md + 00-style-profile.md(作者风格个性化层)。
目标:在 Step 2 已规范的基础上,提升流畅度、节奏感、可读性,达到成书级——但不牺牲哲学论证的精确性,不磨平作者风格。
3 个雅化维度(v3 在 v2 基础上把第三维升级为"register + 作者个性"双轨):
| 维度 | 规则来源 | 例 |
|---|---|---|
| 信达雅 | 忠实(信)、通顺(达)、得体(雅) | "本研究展示了…" → "本研究表明…" |
| 哲学 register | refs/register-words.md | 精确、克制、有节奏;避免过度白话,也避免文绉绉的伪古雅 |
| 段落级流动 + 作者风格 | modules/prose-shaping.md + Style Profile「六、翻译适配指令」 | 主题句一致、逻辑连接词(然而/因此/与之相对);并按 Style Profile 复现作者节奏:原文短句收束则译文短句收束,原文排比则译文保留排比,原文克制则译文不煽情 |
⚠️ 长句哲学特例:哲学论证的长句往往承载多层限定,不要为了"可读性"机械拆句。拆句的前提是每个子句仍能独立成立且限定关系不丢失;否则宁可在译文中保留长句,用分号/顿号理顺层次。这与 general humanizer 的"拆分长句"规则刻意不同。
Step 3 收尾自检:
- ✅ Provenance 仍可追溯到 Step 1 的源段落
- ✅ 外文原词 / 引文 / 人名 / 书名 / 数字 一字未改
- ✅ 用户术语库的强制术语 100% 命中
- ✅ 原作者的论证强度未被改变(may ↔ must、probably ↔ certainly 不可互相升级)
- ✅ Style Profile 适配指令逐条核对(06-self-check.md 记录:句式/修辞/语气/hedging/引文原词密度是否按适配指令执行)——v3 新增
- ✅ 词汇层红线核对 ★v4(06-self-check.md 记录:连接词/情态词/译名是否按词汇层清单执行;"所以""应该"等口语化词密度、括注密度对比)
- ✅ S4 审校通过 ★v4(05-style-review.md 存在且无未归因的 OFFSET/REDLINE;有残留偏移则标 manual_review)
- ✅ 07-bilingual.html 必须存在(缺失 = 输出失败,见异常表)
🛑 中途检查点(精翻模式必经)
触发:Preflight P2 选了 2c 精翻。位置:Step 2 完成后、Step 3 开始前。
- 阻断流程,不自动进入 Step 3
- 展示三件物:
- 📊 Step 1 → Step 2 diff 摘要(改写段落数 / 术语统一替换数 / 去 AI 味命中条数 / 论证强度校准数)
- 📋 抽样段对照(2-3 段step1_literalvsstep2_academic)
- 📚 术语命中表(本文出现的术语 × 选用译法 × 来源:预置库 / 用户库 / 模型推断) - 三选项询问:
✋ Step 2 完成。是否进入 Step 3 雅化? [a] 继续雅化(采用当前术语和直译) [b] 修订后再雅化(你给术语/段落级修改意见,我应用后再问一次) [c] 就停在 Step 2(不雅化,只输出 01 + 02) - 选项 b 回环最多 3 轮,超出后让用户在 a/c 之间二选一。
🛑 查验点(翻译完成后必经 · v0.2.1 新增)
触发:S0 + 三步(或 quick 的仅 Step 1)产出完成后、最终交付前。所有模式必经,quick 也不例外。
目的:翻译产物先交用户查验,用户可提出修改意见并回环修订;最终交付必须由用户主动提出——没有用户的明确指令,不得自动生成最终交付物。
查验流程
- 产出可查验文本:执行占位符还原(restore)→ 生成
03-restored(可读终稿)+04-bilingual.md(双栏)+07-bilingual.html(双栏 HTML,浏览器查验最直观)。还原后的文本才是给用户看的东西——工作稿里的<TAG_N>用户读不懂。 - 阻断流程,询问用户(不自动进入交付):
✋ 翻译已完成。是否查验译文? [a] 查验并提修改意见(你指出段落/问题,我修订后重新给你查验) [b] 没问题,我要交付最终成品(你主动提出后,我才执行最终交付) [c] 先放着,我稍后再查验(工作稿与还原稿保留,随时可继续) - 选项 a 回环:定位意见所指段落 → 回 Step 2/3 重译该段(保留术语与风格基线)→ 重新 restore → 重新给出查验文本 → 再次询问。回环最多 3 轮,超出后请用户在 b/c 间选择。
- 选项 b:进入「最终交付」(见下节)——执行全部交付红线 → 生成最终交付物 → 交付并记录。
- 选项 c:工作产物与查验文本全部保留在输出目录;用户后续说"继续查验 / 我提意见 / 我要交付"即可无缝续接。
无人值守模式的处理(重要)
自动化续接场景无法询问用户:每章翻译完成后跳过询问、直接落盘「工作产物 + 还原稿(03-restored)」并存,并在 06-self-check.md 与 memory 日志标注 awaiting_review(待查验)。用户随时可人工查验已落盘章节;最终交付仍需用户主动提出,自动化不代为交付。
与既有检查点的区别
| 检查点 | 位置 | 谁触发 |
|---|---|---|
| 中途检查点(精翻模式) | Step 2 → Step 3 之间 | 仅 full 模式;确认术语与直译质量 |
| 查验点(v0.2.1) | 三步完成后 → 交付前 | 所有模式必经;确认整篇译文 + 收集修改意见 + 决定是否交付 |
输出 — 工作产物 → 查验 → 最终交付(三阶段,无 LaTeX)
> ⚠️ 强约束:standard / full 模式下 07-bilingual.html 必须生成——它是双栏对照的默认查验主载体。缺失 = 视为生成失败,不允许静默跳过。
阶段 A:工作产物(S0 + 三步 + S4 产出,供查验与内部对照)
| 文件 | 用途 | 必出模式 |
|---|---|---|
00-style-profile.md |
S0 行文风格分析报告(文本风格 + 语言习惯 + 翻译适配指令 + 词汇层适配清单 ★v4)——v3 新增,也是内部工作稿 | quick(轻量版)/ standard / full |
01-step1-literal.md |
Step 1 直译初稿 | quick / standard / full |
02-step2-academic.md |
Step 2 反思规范版 | standard / full |
03-step3-polished.md |
Step 3 哲学雅化终稿(含占位符) | full |
05-style-review.md |
S4 译文风格审校报告 ★v4(译文 12 维二次画像 vs 原文画像对比表 + 偏移归因 + 回改记录) | quick(轻量)/ standard / full |
06-self-check.md |
自检报告(术语命中率 / 占位保留率 / Provenance 完整性 / HTML 状态 / 风格适配核对 / 词汇层红线核对 ★v4 / S4 审校状态 ★v4) | quick / standard / full |
生成顺序:00(S0 风格分析)→ 01→02→03 三档 → 05(S4 审校,Step 3 后、查验点前) → 06 自检报告。
收尾断言:应出文件未出齐时,显式报错「输出不完整:缺少 X」并给补救方案,不沉默交付。
阶段 B:查验文本(查验点产出,给用户看的可读版本)
| 文件 | 用途 |
|---|---|
03-chN-restored.md |
还原占位符后的可读终稿(用户查验主载体) |
04-bilingual.md |
双栏对照(左原文 / 右终稿,基于还原后文本) |
07-bilingual.html |
双栏 HTML(浏览器即开 + 视图切换 + 段落复制) |
> 这三份在查验点生成;用户提意见修订后,重新生成再给查验。04/07 必须基于还原后文本——这是 v2 既有的强制契约,v0.2.1 将其明确归入查验阶段。
阶段 C:最终交付物(仅用户主动提出交付后生成)
| 交付物 | 说明 |
|---|---|
| 终稿 md | 还原后 + 剥离全部元信息/段号/批注 + 人名英文化,纯译文正文 |
| 双栏 / HTML | 交付级双栏(同上剥离规则) |
| 合并全书 / epub | 全书级交付(以还原后文本为准,目录锚点校验) |
⛔ 最终交付红线(全部执行后才可交付):
红线 1:占位符 0 残留(还原在查验阶段已完成,交付前复扫):
- 还原后扫描译文,不得残留任何 <[A-Z]+_\d+> 形式的占位符(正则 r'<[A-Z]+_\d+>',出现即失败);
- 合并全书/生成 epub 时,必须以还原后的文本为准;桌面/交付文件同样不得含占位符;
- 若交付物中发现占位符残留 = 输出不完整,须立即修复后重新交付。
红线 2:元信息剥离(合并/交付时必须执行):
- 各章终稿文件(03-chN-polished.md)头部允许保留维护性元信息(**原著** / **章节** / **术语决策** / **批次** / **译法约定**),仅供译者内部对照;
- 但合并全书、生成 epub/双栏等一切交付物时,必须剥离这些元信息块:交付正文只含章节标题(## 第X章 …)与译文段落,不得出现"原著/章节/术语决策"等字样;
- 术语决策等元信息只写入 06-self-check.md 或 memory 日志,不进入交付正文。
红线 3:段落标记剥离(交付正文不得带 pN 段号):
- 译文正文一律不出现 **p1** / **p2** / **pN** 这类段落编号标记(也不得用 p1: / p2: 等其他段号形式);
- 段落编号只允许出现在内部工作稿(Step 1/2 直译反思稿、与原文对齐的中间产物、双栏对照的原文侧定位信息)中,用于译者对齐与回溯;
- 一切交付物(03 终稿、合并全书、epub、桌面文件、双栏 MD/HTML 的译文侧)中段落标记必须剥离:段落以自然段呈现,段与段之间空一行,不带头标、不带头号;
- 若交付物中发现 **p\d+** / ^p\d+[::.] 等段号残留 = 输出不完整,须剥离后重新交付。
红线 4:翻译批注禁止(交付正文不得含"(DOI 元数据,保留原样)"等说明性括注):
- 交付正文不得出现任何翻译过程性的说明性括注,如 (DOI 元数据,保留原样)、(原文如此)、(译注:…)、(保留拉丁/希腊/法语原词)、(此处为元数据) 等;
- 这类说明只允许出现在内部工作稿(01/02/03 的维护性元信息区)或 06-self-check.md 中,供译者对照;合并/交付时必须整体剥离,包括 DOI: 10.xxxx/... 独立行;
- 交付前扫描:正则 ([^()]*(元数据|原文如此|译注|保留原样|保留拉丁|保留希腊|保留法语|保留德语)[^()]*) 与 ^DOI: 命中即视为输出不完整,须删除后重新交付。
红线 5:人名保留英文原文(不译成中文):
- 所有人名一律保留英文原名(Descartes、Hume、Wittgenstein…),不翻译成中文,也不写成"中文(英文)"括注形式;
- 中文译文正文中引用人名时直接写英文原名(如"Descartes 认为……"),首次出现如需括注只括注全名(如"Descartes(René Descartes)"仅在确有需要时);禁止写"笛卡尔(Descartes)""休谟(Hume)"这类"中文译名+英文括注"形式;
- 人名以原文(source 中实际出现的拼写)为准——若源文本人名拼写有误(如电子版错印),以原著通行的正确拼写为准,并在自检报告注明;
- 交付前扫描:正文中不得出现常见人名中文译名(笛卡尔/休谟/洛克/亚里士多德/维特根斯坦/罗素/柏拉图/苏格拉底/阿奎那/康德/安斯康姆/吉奇/赖尔/布伦塔诺/奇泽姆/普赖尔/黑尔/胡塞尔/弗雷格/詹姆斯/华生 等),出现即视为输出不完整,须修正为英文后重新交付(复合术语如"笛卡尔主义/Cartesianism""詹姆斯—朗格理论/James–Lange theory"属术语译名,可保留)。
HTML 渲染契约:modules/bilingual-export.md。
核心原则
1. 不修改用户原文件
读取原文 + 写到独立目录 philosophy-translation-output/。即使用户说"在原文上改",也先产出独立目录再告知。
2. Provenance 三维度(防幻觉护城河)
每段译文必须可追溯到:页码/段落序号 + 章节标题 + 原文 excerpt(≥ 30 字)。三维度组合让 hallucination 无处遁形。
3. 外文原词 / 人名 / 书名 / 页码 / 数字是不变量(IDEMPOTENT)
希腊/拉丁/德文原词、人名、书名、页码、数字——这些是哲学文本中"不存在译法"的元素(原词本身即是论据的一部分),全程占位保护、零损伤。引文不在其列:引文按 quote_bilingual 处理(默认 off 直接翻译为中文;on 双语对照),见 3.5。Step 3 输出前用 scripts/placeholder_tool.py verify(off/auto 模式加 --quote-translate)校验;失败 → 阻断输出,回退 Step 2 重跑。
3.5 引文双语策略(★v4 参数化 · 默认 off = 引文直接翻译为中文)
背景(参数化的原因):上一代曾有两种极端——v3 强制"所有引文必须译出(原文(译文))",实战《Action, Emotion and Will》全书对比发现括号率 7.8→19.8/千字(+153%)、引号率 35→51/千字(+46%)、反向双语 43→57 处;v4 初版又退化为"默认保留原文不译",用户查验时发现上千条引文未翻译。v0.4.1 定稿:默认 off = 引文直接严格依据原文翻译为中文(翻译是必须的;原文是否保留是可选呈现),并把引文双语从"强制"改为"策略参数"(quote_bilingual,见 §输入参数):
| 参数值 | 行为 | 适用场景 |
|---|---|---|
off(默认) |
引文直接严格依据原文翻译为中文:翻译时把 <QUOTE_N> 译成中文(中文引号“ ”呈现,作正文有机部分),QUOTE 占位符被译文替换、不还原英文原文;引文后的出处括注原样保留 |
默认策略:读者读到的引文即中文,出处可查证;文风干净、无冗余括注 |
on |
双语对照:引文译文 + 原文——每个引文后紧跟 ("原文") 或 ("译文"),格式 <QUOTE_1>("译文")(英文引文)/ <QUOTE_1>(译意)(外文原词引文);出处括注保留在译文后 |
用户明确要求引文原文对照(如学术比对、面向一般读者的译本);可用 scripts/quote_translate.py 批处理 |
auto |
先按 off(引文直接翻译为中文);查验点用户提出"要原文对照/双语"时,再按 on 补原文 | 不确定读者需求时 |
off 模式细则(默认):
- 英文引文(作者引用的英文原句/短语/词):整段译成中文,作为译文正文的有机部分(保留中文引号“ ”),严格依据原文——完整译出、不省略、不意译、不增删;
- QUOTE 占位符被中文译文替换:restore 阶段 QUOTE 不还原英文原文(译文已就位);verify 用 --quote-translate 校验(引文翻译覆盖率 1.0:译文不得残留 <QUOTE_N> 占位符,也不得残留未翻译的英文引文原文);
- 引文后的出处括注((Op. cit., 28)、(Treatise II, 1, 2) 等)是学术引注不变量,必须原样保留在引文译文之后;
- 外文原词引文(拉丁/希腊/法语座右铭、断片,如 pensées、Sensus in actu、Angst):保留原词 + 紧跟译意((译意)),禁止双重括注(pensées(思想))——原词是论证要素,按 keep_original 处理;
- 嵌套引文:内外层各自译成中文,保留嵌套结构(“外层译文内含『内层译文』”)。
on 模式细则(双语对照):英文引文译成完整中文句子/短语/词,原文与译文并列(<QUOTE_1>("译文") 还原后 = "原文"("译文"));外文原词引文只给译意,不得双重括注;嵌套引文内外层各自译出,格式 <QUOTE_1>(外层译文)(<QUOTE_2>(内层译文));出处括注必须原样保留在译文括注之后;长书用 scripts/quote_translate.py 批处理(提取 → 翻译映射 → 自动插入 → 校验)。
占位符规则:TERM / NAME / TITLE / CITE / NUM 在任何模式下都是不变量,100% 保留并还原;QUOTE 在 off/auto 模式被中文译文替换(不还原),在 on 模式保留还原 + 后跟译文。引文是否呈现双语只是呈现策略,不影响占位保护与出处查证。
3.6 占位符后括注禁令(v0.3.0 新增 · 防止还原后出现重复文本)
禁止在占位符后添加与占位符还原值重复的括注:
- ❌
<NAME_1>(Wittgenstein)→ 还原后Wittgenstein(Wittgenstein)(重复,事故) - ❌
<QUOTE_3>("right")→ 还原后"right"("right")(重复,事故) - ✅ 人名/引文占位符还原后即为原文,无需再加括注;需要加的是译文/译意(on 模式,见 3.5),且译文不得与还原值相同。
- 例外:外文原词首现时允许"原文 + 译意"括注(如
<NAME_67>(Unding,非物)),这是 keep_original 的既定策略,但译意与原文必须不同。
3.7 脚注编号不变量(v0.3.0 新增)
脚注编号(<NUM_N>)必须严格对照原文,不得自创、不得错位、不得漏抄。实战教训:翻译时把 (<NUM_61> b <NUM_62>–<NUM_63>) 错写成 (<NUM_62> b <NUM_63>–<NUM_64>) 会导致 verify 报缺失、且正文引用错位。规则:
- 每段译文中的 <NUM_N> 序列必须与原文该段的 <NUM_N> 序列逐一相同(可用脚本比对两序列);
- 发现 verify 缺失时,优先怀疑脚注编号错位,对照原文逐段核对,不可直接改编号"凑数"。
4. 渐进式披露(按需加载)
本文件只做路由 + 原则 + 三步法概述。详细工作流在 modules/*.md,术语库/规则库在 glossary/ refs/,脚本在 scripts/。
5. 术语库优先级
用户术语库(config/user-glossary.yaml)> 预置哲学库(glossary/philosophy-builtin.md)> 模型推断
用户库是预留的人工输入接口,用户随时可以补充/覆盖;预置库仅为起步基础,不视为权威。
🚧 异常与边界条件
| 场景 | 触发条件 | 处理动作 |
|---|---|---|
| PDF 扫描件 | 文本层字符数 < 200 或图像比 > 80% | 阻断翻译,给三选项:[a] 用户提供文本层 PDF [b] 接受 OCR 风险(标 ocr_warning=true)[c] 终止 |
| PDF 加密 | 抛 PdfReadError |
询问密码并临时解密到内存,不写回原文件 |
placeholder_tool --verify 失败 |
译文中占位符未还原 / 数字被改写 / 原词被翻译 | 阻断输出。展示具体失败 token,回退 Step 2 重跑(最多 2 次);仍失败 → 标 manual_review |
| 引文未翻译(★v4 默认触发) | off(默认)模式下译文残留英文引文原文或 <QUOTE_N> 占位符未译(引文翻译覆盖率 < 1.0) |
按 3.5 off 细则:引文必须直接译成中文(替换占位符);残留未译的用 scripts/quote_translate.py 提取 → 补译 → 重新插入 → verify --quote-translate + restore。全部引文必须覆盖,不允许"看起来不重要就不译"。on/auto 模式缺译文或缺原文同样视为事故 |
| 占位符后重复括注(v0.3.0 新增) | restore 后出现 Wittgenstein(Wittgenstein) 式重复 |
违反 3.6 禁令。清理译文括注,只保留译意/译文(且与还原值不同),重新 verify + restore |
| 脚注编号错位(v0.3.0 新增) | verify 报 <NUM_N> 缺失,且该编号在原文属脚注区 |
违反 3.7。对照原文逐段核对编号序列,修正错位;不可改编号凑数或删除编号 |
| 段落 1:1 对应失败 | 译文段落数 ≠ 输入段落数 | 该段单独重跑 Step 1;连续 2 次失败 → 标 manual_review 等用户处理 |
| 术语库加载失败 | YAML 解析错误 / 文件不存在 | 明确提示;冲突时列冲突术语让用户选 keep [预置] / [自定义] / [双语并列];解析错误 → 退化为不带术语库运行并在 06 标注 |
| 目录重名 | 同 ISO-time 重复触发 | 追加 -r2 / -r3 后缀新建,并在 00-history.md 写明上次产物路径 |
| 上下文超限 | 单段超 token 上限 | 按句号切分该段为子段,分别翻译后拼接;仍超限 → 标 manual_review |
07-bilingual.html 未生成 |
standard/full 模式下缺失 | 视为输出失败。先基于 04 重新渲染一次;仍失败 → 06 顶部红字标注,并提示用户"请明确说『生成 HTML』后我可重试" |
| S0 风格分析置信度低 | 样本 < 800 字 / 文本混杂多种文体 | 降级为轻量版(仅风格画像 + 语言习惯 + 前 3 条指令 + 词汇层核心项),报告标注 LOW 置信,适配指令用"建议"语气而非"必须";禁止调取作者其他作品补充画像 |
| Style Profile 与 register 冲突 | 适配指令要求(如华丽修辞)违反哲学 register 基线(克制) | 按优先序裁决:论证忠实 > 词汇层红线(register-words 负面清单)> 风格匹配 > 流畅 ★v4;基线红线(去 AI 味、克制、连接词/情态词/译名纪律)不可被适配指令推翻 |
| S4 审校发现偏移(★v4 新增) | 译文二次画像与原文画像偏差 ≥ 2 分,或命中词汇层红线 | 按 S4 流程归因 → 回改 Step 2/3(≤2 轮);仍残留 → 05 报告标 manual_review,交用户查验时定夺 |
| 输入是诗词/纯韵文 | 押韵诗体 | 本 skill 面向论证散文,风格分析与韵律诗均建议用文学翻译专用工具(scope 外) |
模块与参考索引
| 类别 | 文件 | 职责 |
|---|---|---|
| 输入路由 | modules/input-router.md | text / markdown / pdf 分流 + 章节切片 + 占位掩码 |
| 引文批处理(v0.3.0) | scripts/quote_translate.py | 长书引文批量翻译:提取全部 <QUOTE_N> → 人工/LLM 翻译映射 → 自动插入译文括注 → verify+restore,保证引文 100% 译出 |
| 断点存档(v0.3.1) | scripts/savepoint.py | 长书无人值守断点存档:save / show / clear 三子命令,上下文不足时落盘 savepoint.json,下一轮从断点接力 |
| 行文风格分析(v3) | modules/style-profiling.md | S0 前置:12 风格维度 + 推理拓扑 + 语言习惯 + 翻译适配指令 → Style Profile(融合 dhdna-profiler 与 v2 行文规范) |
| 风格信号细则(v3) | refs/style-signals.md | S0 取证手册:12 维度信号词典、拓扑识别、语言习惯清单模板 |
| 三步翻译 | modules/three-step-translation.md | 直译→反思→雅化算法实现(各步注入 Style Profile) |
| 散文塑形 | modules/prose-shaping.md | 哲学段落类型惯例 + 雅化 register 细则(中文侧基线) |
| 双栏导出 | modules/bilingual-export.md | 00 风格报告 / 三档对照 / 双栏 MD / 双栏 HTML |
| 预置术语库 | glossary/philosophy-builtin.md | 分域哲学概念译名(起步基础,可被用户库覆盖) |
| 用户术语接口 | config/user-glossary.template.yaml | 人工术语库输入入口(优先级最高) |
| 占位保护 | refs/foreign-term-preservation.md | 外文原词/人名/书名不变量 + 引文策略规则 |
| 去 AI 味 | refs/ai-flavor-patterns.md | 哲学向 AI 味目录(整合 academic-humanizer) |
| 保留清单 | refs/preserve-list.md | 不要过度修正的清单(哲学特有项;风格分析的边界护栏) |
| register 用词 | refs/register-words.md | 哲学中文 register、高频误译、AI 味词汇表 |
| 脚本 | scripts/placeholder_tool.py | mask / restore / verify 参考实现 |
> ⛔ Do NOT pre-load all refs/ files —— 按路由触发器逐条加载即可。本文件 + 当前分支所需 2-3 个文件即覆盖任何输入类型。
🤖 无人值守续接(长书翻译机制)
> 长书(如整本哲学著作)翻译必然超过单回合输出上限、需要分多轮。本机制让翻译无需用户反复说"继续":持续翻译直到全书完成,仅当上下文空间不足时才存档并结束本轮,下一轮从断点无缝接力。已在《Action, Emotion and Will》全书翻译(11 章 + 前言)中实战验证。
前提:状态必须全部落盘(本 skill 已满足)
每轮结束时,以下状态必须写入工作区(自动化据此无痛续接):
| 状态 | 落盘位置 | 内容 |
|---|---|---|
| 风格基线 | 00-style-profile.md |
v3 新增:全书 Style Profile(S0 首轮产出,后续每章增量更新) |
| 章节译文 | 03-chN-polished.md |
每章雅化终稿(占位符 100% 保留) |
| 查验待定稿 | 03-chN-restored.md |
v0.2.1 新增:每章还原稿(供用户随时查验);未交付前状态标注 awaiting_review |
| 全书累积 | kenny-fullbook.md |
已完成章节合并(仅用户主动提出交付后更新为交付版) |
| 电子书 | 桌面/输出目录 epub | tools_fullbook_epub.py 生成(仅用户主动提出交付后生成) |
> ⚠️ epub 目录锚点规则(易错点):正文标题 id 用段落累计数生成(不连续,如 c4/c35/c38…),目录 nav 必须引用正文实际生成的 id(生成时记录 (标题, hid) 对),不可用章节序号(c{i+2})硬编码——两者会对不上导致目录点击无效。生成后必须校验:nav 中每个 href="text.xhtml#X" 的 X 都真实存在于 text.xhtml 的 id= 中(实战踩坑:14 条目录 13 条失效)。
| 进度与术语 | .workbuddy/memory/YYYY-MM-DD.md | 已完成章节、术语决策、章节行号 |
| 原文文本 | 工作区 *.md(epub 提取产物) | 分章切片输入 |
自动化配置模板(按需创建/修改 · v0.3.1 更新)
> v0.3.1 核心变更:不再"每轮一章、按小时触发"。改为持续翻译直到全书完成——每轮连续翻译尽可能多的章节,仅在上下文空间不足时执行存档并结束本轮;下一轮(按调度触发)从断点继续。调度频率只决定"检查点"密度(建议 FREQ=MINUTELY;INTERVAL=10 或更密),翻译本身不受频率限制。
名称:哲学书籍翻译·无人值守续接(持续翻译模式)
类型:recurring · FREQ=MINUTELY;INTERVAL=10(频率只定检查点密度,翻译持续到上下文耗尽)
工作目录(cwds):{工作区绝对路径}
Prompt:
【无人值守哲学书籍翻译·续接任务 · 持续翻译模式】
1. 检查状态:读取 {工作区}/kenny-action-emotion-will.md 确认章节范围;列出 philosophy-translation-output/ 下已有的 03-chN-polished.md;读取 00-style-profile.md(风格基线)与 .workbuddy/memory/ 最新日志获取术语决策与进度;若有 savepoint.json 读取断点信息。
2. 判定:找出原书中尚未翻译的章节(未生成对应 03-chN-polished.md 者)。若全部已译 → 仅向今日 memory 日志追加一行"自动化检查:全书已译完,无待译章节",不做翻译。
3. 若有未译章节:**持续翻译,直到上下文空间不足**:
a. **上下文预算检查(每章开始前与每章结束后)**:评估剩余上下文空间——若剩余空间不足以完成下一章的三步翻译(预估:下一章原文长度 × 4 作为译文+校验的 token 需求),**立即执行步骤 4 存档并结束本轮**,不要强行开始下一章。
b. 翻译流程(对每个未译章节,按最小未译编号):从原文按行号切章 → 运行 philosophy-book-translator - v4/scripts/placeholder_tool.py 掩码 → **若无 00-style-profile.md 则先按 S0 做完整风格分析并落盘(首轮),已有则沿用 + 按本章原文增量更新** → 按本 skill 三步法产出雅化终稿(03-chN-polished.md,**三步全程遵循 Style Profile 翻译适配指令与词汇层适配清单**)→ 校验占位符 100% 保留(缺失必须修复)→ **引文翻译自检(按 quote_bilingual:off/auto 默认模式——扫描 03-chN-polished.md 是否残留 `<QUOTE_N>` 占位符或英文引文原文未译,引文翻译覆盖率必须 1.0,残留即事故并补译(长书累计后用 scripts/quote_translate.py 批处理);on 模式——扫描每个 <QUOTE_N> 后是否紧跟(译文)/(原文)括注)** → **S4 译文风格审校(对还原后译文做 12 维二次画像对比 00-style-profile.md,偏差 ≥2 分或命中词汇层红线则回改 ≤2 轮,产出 05-style-review.md)** → **执行 restore 还原占位符生成 03-chN-restored.md(供查验)并扫描无 `<[A-Z]+_\d+>` 残留、无 `X(X)` 重复括注** → **在 06-self-check.md 与 memory 日志标注该章 `awaiting_review`(待查验)** → 将术语决策、风格增量与进度追加到 memory 日志。
c. **每完成一章立即落盘**(见下方「断点存档清单」)——完成即存档,不等待整轮结束。
d. 回到步骤 a 继续下一章,直到全书译完或上下文不足。
4. **上下文不足时:存档并结束本轮(断点接力)**:
a. 运行 `scripts/savepoint.py save --dir philosophy-translation-output/{book}/`(或按下方「断点存档清单」手工落盘);
b. 在 memory 日志追加一行:`[存档] 本轮完成至 chN,上下文预算不足,已存档待续`;
c. 结束本轮。下一轮触发时从 savepoint.json / memory 日志读取断点,从下一个未译章节继续。
**⚠️ 无人值守只落盘工作稿与还原稿,不执行最终交付**——合并全书 / 生成 epub / 交付桌面文件,必须等用户主动提出"交付"后才做。
5. 纪律:术语沿用 memory 已记录决策;人名/引文/书名/页码/希腊拉丁原词以占位符保护且 100% 保留;**引文双语按 quote_bilingual 参数执行(默认 off = 引文直接严格依据原文翻译为中文,译文替换占位符、不还原英文原文;on/auto 双语对照才补(原文/译文)括注)**;**占位符后不得添加与还原值重复的括注(如 <NAME_N>(Wittgenstein))**;**脚注编号 <NUM_N> 必须与原文逐一相同**;哲学 register(精确、克制、无 AI 味);**词汇层红线(连接词/情态词/译名按 register-words 与词汇层适配清单,优先级高于风格匹配)**;**风格保真(按 Style Profile 复现作者句式/修辞/语气/hedging,只匹配不改造)**;**S4 审校每章执行(05 落盘,偏移回改 ≤2 轮)**;不询问用户;每轮处理尽可能多的章节(不是一章)。
断点存档清单(v0.3.1 新增 · 上下文不足时必须全部落盘)
| 状态 | 落盘位置 | 时机 |
|---|---|---|
| 风格基线 | 00-style-profile.md |
每章增量更新后立即 |
| 章节译文 | 03-chN-polished.md |
每章完成后立即(不等轮末) |
| 审校报告 | 05-style-review.md |
每章 S4 审校后立即 |
| 查验待定稿 | 03-chN-restored.md |
每章完成后立即 |
| 断点信息 | savepoint.json(含:已完成章节列表、下一待译章节、当前轮次、时间戳) |
轮末存档时;scripts/savepoint.py save 生成 |
| 进度与术语 | .workbuddy/memory/YYYY-MM-DD.md |
每章完成后立即 |
| 自检状态 | 06-self-check.md |
每章完成后立即(标注 awaiting_review) |
> 断点接力规则:下一轮开始(步骤 1)若发现 savepoint.json 存在 → 读取其中 next_chapter 与已完成列表,直接从该章节继续;续接后删除或更新 savepoint.json(scripts/savepoint.py clear)。不得重新翻译已完成章节。
>
> 上下文预算估算:每章预估需求 ≈ 原文字符数 × 4(含掩码/三步/校验/还原的往返 token)。当"剩余上下文 < 下一章预估 × 1.2"时即存档收手;宁可多一轮,不可中途截断丢占位符(截断 = 章节损坏,需重译,代价更大)。
使用流程
- 用户提供待译长书 → 提取为文本(epub 用
tools_epub_extract.py思路)→ 按本 skill 流程完成第一章(建立术语基线)。 - 创建上述自动化(把
<占位>换成实际路径/书名/行号)。 - 自动化持续翻译(每轮尽可能多章,上下文不足时存档收手),直至全书完成;完成后自动空转(只记日志)。
注意事项(v0.3.1 更新)
- 持续翻译而非每轮一章:每轮连续翻译多章直到上下文耗尽;调度频率(建议 10 分钟)只决定检查点密度,不限制每轮章数。
- 每章完成即落盘:polished / restored / memory / 06 四件套每章结束后立即写盘,不等轮末——即使本轮中断也不会丢失已完成章节。
- 上下文预算纪律:开始新一章前先评估剩余空间(下一章原文 × 4 × 1.2);不足则存档收手,绝不强行开章导致中途截断(截断丢占位符 = 整章损坏需重译,代价远大于多跑一轮)。
- 断点接力:轮末
scripts/savepoint.py save写断点;下一轮读 savepoint 直接从下一章续接,不重复已译章节。 - 术语一致性靠 memory:每章结束必须把本章新增术语决策写入 memory,下一轮先读。
- 可管理:用户可随时查看/暂停/删除/调整频率;项目结束后建议删除自动化。
- 替代方案(未采用,供参考):子代理并行(快但术语一致性风险高)、续接文件
CONTINUE.md(可配合本机制增强断点可读性)。