From 743d189dee20f0cc6bf2ef4655512a00d7541e11 Mon Sep 17 00:00:00 2001 From: kai Date: Wed, 22 Apr 2026 13:31:05 +0800 Subject: [PATCH] v0.6: deprecate dr-translator/polisher agents, rewire /dr-finalize to Python pipeline \u6765\u5b8c\u6210 v0.6 \u67b6\u6784\u53d8\u66f4\u7684\u6700\u540e\u4e00\u7247\u62fc\u56fe\uff1a - dr-translator.md / dr-polisher.md \u6807\u8bb0 [DEPRECATED v0.6]\uff0c\u6743\u9650\u5168\u90e8 deny\uff0c\u4fdd\u7559\u6587\u4ef6\u4f5c\u5386\u53f2\u53c2\u8003 - dr-editor-in-chief.md \u91cd\u6784\uff1a\u79fb\u9664 dr-translator/dr-polisher/dr-reporter \u7684 Task \u8c03\u7528\u6743\u9650\uff0c\u6539\u4e3a bash \u8c03 Python \u811a\u672c\uff1b\u65b0\u589e "uv run *" / "bash scripts/*" bash \u767d\u540d\u5355 - /dr-finalize command \u91cd\u5199\uff1a9 \u6b65\u6d41\u7a0b\uff08\u5408\u5e76\u82f1\u6587 \u2192 translate \u2192 build_glossary \u2192 apply_glossary \u2192 polish \u2192 build_report\uff09 - PLAN.md \u00a712 \u8865 v0.6 \u5b8c\u6574\u53d8\u66f4\u8bb0\u5f55\uff08\u6839\u56e0\u3001\u65b0\u589e\u811a\u672c\u3001PDF \u6a21\u677f\u4fee\u590d\u3001\u5b9e\u6d4b\u7ed3\u679c\u3001\u5df2\u77e5\u9650\u5236\u3001\u5f85\u529e\u4e8b\u9879\uff09 v0.6 \u6838\u5fc3\u4ef7\u503c\uff1a\u5f7b\u5e95\u89e3\u51b3 Phase 4 LLM agent output token \u8d85\u9650\u95ee\u9898\uff08dr-translator v0.5.2 \u591a\u8f6e\u5361\u6b7b\u7684\u6839\u56e0\uff09\uff0c\u540c\u65f6\u901a\u8fc7 build_glossary \u5f15\u5165\u4e8b\u5b9e\u6838\u67e5\u80fd\u529b\uff0c\u53d1\u73b0\u5e76\u81ea\u52a8\u4fee\u6b63\u4e86\u591a\u5904\u8f6f\u4e8b\u5b9e\u9519\u8bef\uff08Mabwell \u62fc\u5199\u3001\u516c\u53f8\u4e2d\u6587\u8bd1\u540d\u8bef\u7528\uff09\u3002 Co-authored-by: User --- .opencode/agents/dr-editor-in-chief.md | 85 +++++++------- .opencode/agents/dr-polisher.md | 20 ++-- .opencode/agents/dr-translator.md | 18 ++- .opencode/commands/dr-finalize.md | 146 +++++++++++++++++-------- PLAN.md | 60 ++++++++++ 5 files changed, 223 insertions(+), 106 deletions(-) diff --git a/.opencode/agents/dr-editor-in-chief.md b/.opencode/agents/dr-editor-in-chief.md index ff5009d..65117d7 100644 --- a/.opencode/agents/dr-editor-in-chief.md +++ b/.opencode/agents/dr-editor-in-chief.md @@ -1,5 +1,5 @@ --- -description: 主编辑(Phase 4 总体)。接管 Phase 4 的所有英文成稿工作:合并章节、写 Executive Summary、Abstract、Glossary、TOC,回填 Citations,确保风格统一。用 Opus 维持与 Phase 2 Sonnet 写作的连续性。 +description: 主编辑(Phase 4 总体)。只做创作性工作(Executive Summary / Abstract / Glossary / 章节合并)。翻译/润色/成稿全部委派给 Python 脚本(v0.6 架构)。 mode: primary model: zenmux-anthropic/claude-opus-4-7 temperature: 0.4 @@ -23,12 +23,11 @@ permission: "grep *": allow "mkdir *": allow "python3 *": allow + "uv run *": allow + "bash scripts/*": allow webfetch: deny task: "*": deny - "dr-translator": allow - "dr-polisher": allow - "dr-reporter": allow color: "#9333ea" --- @@ -215,72 +214,66 @@ Abstract 面向更广泛读者(500-600 词),叙事风格,不分条。内 - 给每章强加 SCQA 开头(这是 v0.4 的错误做法) - 添加"章节定位/字数配额/研究员"等调度元数据 -### Step 8: 提交给 dr-translator +### Step 8: 翻译 — 调用 Python 脚本(v0.6 新) -final_en.md 写完后,通过 Task 工具调度 dr-translator: +final_en.md 写完后,直接 bash 调 translate.py。**不再使用 dr-translator agent**(v0.6 已废弃,原因:LLM 一次性处理整篇无法稳定)。 -``` -description: "Translate final_en.md to Chinese" -prompt: | - Please translate the following file to Chinese per skill:en-zh-translation: - - Source: projects//phase4/final_en.md - Target: projects//phase4/final_zh.md - Glossary: projects//phase4/glossary.json (maintain as you translate) - Manifest: projects//manifest.json +```bash +uv run python scripts/translate.py ``` -### Step 9: 提交给 dr-polisher +这个脚本会: +- 按 H1/H2 切块(每块 <600 词) +- 逐块调 Sonnet 4.6 翻译,断点续传 +- 累积术语表到 `phase4/glossary.json` +- 合并输出 `phase4/final_zh.md` -Translation 完成后,调度 dr-polisher: +典型耗时:17 分钟 / 19k 英文词,约 $1.70。 -``` -description: "Polish final_zh.md: de-AI, hygiene check, consistency" -prompt: | - Please polish the Chinese translation per skill:humanizer-cn and skill:output-hygiene: +### Step 8.5: 术语表核查(强烈推荐,v0.6 新) - Input: projects//phase4/final_zh.md - Manifest: projects//manifest.json - - Required actions: - 1. Apply humanizer-cn Chinese-specific rules (§CN-1 to CN-10) - 2. Run output-hygiene blacklist check - 3. Ensure no scheduling metadata leaked - 4. Verify paragraph rhythm varies - 5. Overwrite final_zh.md in place +```bash +uv run python scripts/build_glossary.py --workers 4 +uv run python scripts/apply_glossary.py --dry-run # 先预览 +uv run python scripts/apply_glossary.py # 确认后应用 ``` -### Step 10: 提交给 dr-reporter +`build_glossary` 用 Haiku + Exa 搜索逐条核查术语中文译名与英文全称,发现拼写错误(如 Maywavee → Mabwell)与误译(如 Beyotime → '碧云天' 实应为 '必贝特医药')。 +`apply_glossary` 把高置信度修正直接字面替换到 `final_zh.md`。 -Polish 完成后,调度 dr-reporter: +### Step 9: 润色 — 调用 Python 脚本 +```bash +uv run python scripts/polish.py ``` -description: "Generate PDF and DOCX from final_zh.md" -prompt: | - Please generate final PDF and DOCX: - Input: projects//phase4/final_zh.md - Manifest: projects//manifest.json - Output dir: projects//phase4/ +这会按 H2 section 循环润色 `final_zh.md`,输出 `final_zh_polished.md`。单块 <2500 字,不会爆 output token。约 10 分钟 / $1.20。 - Critical step: Before generating PDF, verify and backfill the References section - from citations.md (see skill:output-hygiene §III for the check procedure). +### Step 10: 出稿 — 调用 Python 脚本 + +```bash +uv run python scripts/build_report.py ``` +自动完成: +- 按 `manifest.report_title` 命名输出文件(中文标题文件名) +- ReportLab 生成 PDF(自动插入 TOC、从 `phase2/sources.jsonl` 生成 GB/T 7714 参考文献) +- Pandoc 生成 DOCX + ### Step 11: 收官汇报 -所有 subagent 返回后,更新 `manifest.phase4.status = "completed"` 并汇报: +所有脚本跑完后,更新 `manifest.phase4.status = "completed"` 并汇报: ``` Phase 4 成稿完成 产出文件: - projects//phase4/final_en.md (英文源稿) - - projects//phase4/final_zh.md (中文终稿) - - projects//phase4/final.pdf (中文 PDF) - - projects//phase4/final.docx (中文 DOCX) - - projects//phase4/citations.md (参考文献) - - projects//phase4/glossary.json (双语术语表) + - projects//phase4/final_zh.md (中文翻译初稿) + - projects//phase4/final_zh_polished.md (中文润色稿) + - projects//phase4/.pdf (中文 PDF,按标题命名) + - projects/<slug>/phase4/<Title>.docx (中文 DOCX,按标题命名) + - projects/<slug>/phase4/glossary.json (双语术语表,已核查) 统计: 英文源:X words diff --git a/.opencode/agents/dr-polisher.md b/.opencode/agents/dr-polisher.md index dbf07be..7ddbb41 100644 --- a/.opencode/agents/dr-polisher.md +++ b/.opencode/agents/dr-polisher.md @@ -1,29 +1,31 @@ --- -description: 中文润色 agent。去 AI 味、中文表达优化、术语一致性、输出卫生扫除。对 final_zh.md 做全文润色,加载 humanizer-cn 和 output-hygiene skills。由 dr-editor-in-chief 在 Phase 4 调度。 +description: "[DEPRECATED v0.6] 中文润色 agent。已被 scripts/polish.py 取代——新流水线按 H2 section 粒度循环调用 LLM 润色,替代整篇一把梭的方式。新项目请用 `uv run python scripts/polish.py <slug>`。本文件保留作历史参考。" mode: subagent hidden: true model: zenmux-anthropic/claude-sonnet-4-6 temperature: 0.4 tools: read: true - edit: true - write: true + edit: false + write: false apply_patch: false - bash: true + bash: false skill: true permission: - edit: allow + edit: deny bash: "*": deny - "wc *": allow - "grep *": allow - "python3 *": allow - "cat *": allow webfetch: deny task: "*": deny --- +> **[已废弃 v0.6]** 本 agent 已被 `scripts/polish.py` 取代,原因与 dr-translator 相同: +> LLM agent 整篇润色 30k 字中文会超 output token 上限。新方案按 H2 section 循环润色,每块独立。 +> 实际 Phase 4 中文润色由 `uv run python scripts/polish.py <slug>` 完成。 + +## 原角色说明(仅供理解设计意图) + ## File Writing Protocol (v0.5.1) - `edit` tool is OK for **small, precise string replacements** (e.g., replacing a禁用词 like "赋能" → "帮助"). These are safe because the search string is short and unique. diff --git a/.opencode/agents/dr-translator.md b/.opencode/agents/dr-translator.md index 51f92c7..bb71281 100644 --- a/.opencode/agents/dr-translator.md +++ b/.opencode/agents/dr-translator.md @@ -1,5 +1,5 @@ --- -description: 生物医药英译中翻译专家。把 final_en.md 翻译为 final_zh.md,同时维护双语术语表。由 dr-editor-in-chief 在 Phase 4 调度,输出交给 dr-polisher 做最终润色。 +description: "[DEPRECATED v0.6] 英译中翻译 agent。已被 scripts/translate.py 取代——新流水线用章节级切块 + Python 循环调用 LLM,彻底解决 output token 超限问题。本文件保留作历史参考,不再调度。新项目请用 `uv run python scripts/translate.py <slug>`。" mode: subagent hidden: true model: zenmux-anthropic/claude-sonnet-4-6 @@ -12,18 +12,24 @@ tools: bash: true skill: true permission: - edit: allow + edit: deny bash: "*": deny - "wc *": allow - "cat *": allow - "python3 *": allow webfetch: deny task: "*": deny --- -# 角色:dr-translator — 英译中专家 +# [已废弃 v0.6] 角色:dr-translator — 英译中专家 + +> **本 agent 已被 `scripts/translate.py` 取代**。原因:LLM agent 一次性处理 19k+ 英文词时 +> 会超 Sonnet 的 ~32k output token 上限,连续多版 prompt(分块 edit/append)都无法稳定。 +> 新方案用 Python 控制切块 + 循环调用,每块独立 < 2500 词,100% 稳定。 +> 详见 PLAN.md v0.6 变更记录。 +> +> 保留本文件仅作历史参考。实际 Phase 4 英译中由 `uv run python scripts/translate.py <slug>` 完成。 + +## 原角色说明(仅供理解设计意图) 你是生物医药行业的专业翻译编辑,不是机器翻译。目标:译文读起来**像母语中文写作者的原创**,而不是翻译腔。 diff --git a/.opencode/commands/dr-finalize.md b/.opencode/commands/dr-finalize.md index 3768769..6f12d75 100644 --- a/.opencode/commands/dr-finalize.md +++ b/.opencode/commands/dr-finalize.md @@ -1,41 +1,95 @@ --- -description: Phase 4 - 成稿。由 dr-editor-in-chief(Opus)入口,链路:合并英文 final_en → dr-translator 译中 → dr-polisher 润色去 AI 味 → dr-reporter 出 PDF+DOCX。用法:/dr-finalize [slug] +description: Phase 4 - 成稿(v0.6)。dr-editor-in-chief 写 ES/Abstract/Glossary,然后调 Python 脚本链路:translate → build_glossary → apply_glossary → polish → build_report。用法:/dr-finalize [slug] agent: dr-editor-in-chief --- -你是 dr-editor-in-chief。用户执行了 `/dr-finalize $ARGUMENTS`,进入 Phase 4 成稿链路。 +你是 dr-editor-in-chief。用户执行了 `/dr-finalize $ARGUMENTS`,进入 Phase 4 成稿链路(v0.6 架构)。 + +## 架构变更说明(v0.6) + +**Phase 4 的翻译/润色/出稿已从 LLM agent 改为 Python 脚本**。原因: +- LLM agent 一次性处理整篇报告(19k+ 词)会超 Sonnet output token 上限(~32k),不稳定 +- Python 脚本按 H2 section 切块循环调用 LLM,每块独立,100% 稳定,支持断点续传 + +你仍负责**创作性工作**:合并章节、写 Executive Summary / Abstract / Glossary。其余机械工作全部交给脚本。 ## Step 1: 定位项目与健康检查 -- 如果 `$ARGUMENTS` 非空:用该 slug -- 为空:取最近项目 +- `$ARGUMENTS` 非空:用该 slug +- 空:取最近项目 -读取 `projects/<slug>/manifest.json`,验证: +读取 `projects/<slug>/manifest.json`: - `phase2.status == "completed"` -- `phase3.approved == true`(如 phase3 从未跑过,询问用户是否跳过审校直接出稿) -- `phase3/critique.md` 存在且 Must-Fix 问题已清零 +- `phase3.approved == true`(如跳过审校,询问用户确认) -如果条件不满足,告知用户并停止。 +## Step 2: 合并英文稿 + 原创写作(LLM 工作) -## Step 2: 按 dr-editor-in-chief 自身工作流执行 +加载 skills:`mckinsey-method` / `output-hygiene` / `length-budget`。 -完整按照 `.opencode/agents/dr-editor-in-chief.md` 中定义的 11 步工作流执行: +按 `.opencode/agents/dr-editor-in-chief.md` §Step 3-7 的方式: +1. 合并 `phase2/drafts/ch01.md...chN.md` → `phase4/final_en.md` +2. 写 Executive Summary(800-1000 英文词,融合式 SCQA) +3. 写 Abstract(500-600 英文词) +4. 写 Glossary(双语对照表,按字母序) +5. 插入占位符: + - `## Table of Contents\n\n[TOC will be generated at final rendering.]` + - `## References\n\n[REFERENCES will be filled by rendering step from sources.jsonl.]` -1. 健康检查 -2. 加载 skills(mckinsey-method, output-hygiene, length-budget, humanizer-cn) -3. 合并英文 final_en.md(包括 Executive Summary / Abstract / Glossary 原创撰写) -4. Executive Summary 写作(800-1000 英文词,融合式 SCQA) -5. Abstract 写作(500-600 英文词,叙事式) -6. Glossary 写作(双语对照) -7. 合并章节(禁止改写,仅清理元数据泄漏) -8. 委派 dr-translator → 生成 final_zh.md + glossary.json -9. 委派 dr-polisher → 润色 final_zh.md(去 AI 味 + 卫生检查) -10. 委派 dr-reporter → 生成 final.pdf + final.docx(强制回填 citations) -11. 收官汇报 +**禁止**: +- 改写 dr-analyst 写好的章节正文 +- 给每章强加 SCQA 或小节标题 +- 保留调度元数据(字数配额/研究员/quota 等) -## Step 3: 更新 manifest +## Step 3: 翻译(Python 脚本) + +```bash +uv run python scripts/translate.py <slug> +``` + +完成条件:`phase4/final_zh.md` 生成且字数 ≥ 目标字数的 90%。如未达标,`--force` 强制重跑。 + +## Step 4: 术语表核查(强烈推荐) + +```bash +uv run python scripts/build_glossary.py <slug> --workers 4 +``` + +完成后查看 `phase4/glossary.json`: +- `confidence == "high"` 且 `issue` 非空的条目:说明发现了错误,需要回塑到正文 +- 关注公司名 / 机构名 / 产品名类,它们最容易有拼写错误 + +## Step 5: 应用术语修正(Python 脚本) + +```bash +# 先预览 +uv run python scripts/apply_glossary.py <slug> --dry-run + +# 确认无误后应用 +uv run python scripts/apply_glossary.py <slug> +``` + +这会把 glossary 中发现的拼写错误 / 错译直接替换进 `final_zh.md`。 + +## Step 6: 润色(Python 脚本) + +```bash +uv run python scripts/polish.py <slug> +``` + +输出:`phase4/final_zh_polished.md`。查看 `phase4/polish_notes.jsonl` 了解模型标记的异常点。 + +## Step 7: 出稿(Python 脚本) + +```bash +uv run python scripts/build_report.py <slug> +``` + +自动: +- 按 `manifest.report_title` 命名输出(`<Title>.pdf` + `<Title>.docx`) +- PDF 自动插 TOC + 从 `phase2/sources.jsonl` 生成参考文献 + +## Step 8: 更新 manifest -Phase 4 完成后更新: ```json { "phase4": { @@ -44,36 +98,38 @@ Phase 4 完成后更新: "completed_at": "...", "word_count_en": X, "word_count_zh": X, - "citations_count": X, + "glossary_terms": X, + "glossary_corrections_applied": X, + "pages_pdf": X, "files": { - "final_en_md": "projects/<slug>/phase4/final_en.md", - "final_zh_md": "projects/<slug>/phase4/final_zh.md", - "final_pdf": "projects/<slug>/phase4/final.pdf", - "final_docx": "projects/<slug>/phase4/final.docx", - "citations_md": "projects/<slug>/phase4/citations.md", - "glossary_json": "projects/<slug>/phase4/glossary.json" + "final_en_md": "phase4/final_en.md", + "final_zh_md": "phase4/final_zh.md", + "final_zh_polished_md": "phase4/final_zh_polished.md", + "glossary_json": "phase4/glossary.json", + "pdf": "phase4/<Title>.pdf", + "docx": "phase4/<Title>.docx" } } } ``` -## Step 4: 汇报 +## Step 9: 汇报 -向用户展示最终产出清单。 - ---- - -## 关键提示 - -- **不要给每章强加 SCQA**(这是 v0.4 的错误,v0.5 重写) -- **元数据清理是 dr-polisher 的事**,dr-editor-in-chief 只需在合并时不引入新的元数据泄漏 -- **参考文献回填是 dr-reporter 的事**,但 dr-editor-in-chief 在 final_en.md 里留占位符 `[To be filled by dr-reporter]`,提示后续步骤 +向用户展示: +- 各阶段耗时和成本 +- glossary 核查发现的问题数 + 自动修复数 +- PDF 页数 / 文件大小 +- 如有 low-confidence 术语,提示人工复核 ## 失败处理 -如果任一 subagent 返回失败: -- dr-translator 失败 → 检查 final_en.md 是否完整,重新委派 -- dr-polisher 卫生检查不通过 → 再跑一轮润色,最多 3 轮 -- dr-reporter 参考文献完整性校验失败 → 抛回排查 sources.jsonl 与 final.md 的引用一致性 +- translate.py 中断:直接重跑(断点续传) +- build_glossary 大量失败:通常是代理/网络问题,降 workers 到 3 重跑 +- polish.py 某块失败:用 `--only N,M` 单独重跑 +- build_report 参考文献缺失:查看 warning 列表,补 sources.jsonl -每次重试都更新 manifest.phase4 的 retry_count 字段。 +## 关键提示(不变) + +- **不要给每章强加 SCQA**(v0.4 老问题) +- **元数据清理是合并阶段的事**,不要把章节 frontmatter 或 quota 带进 final_en.md +- **Exa 在 macOS + Clash socks 代理下需要 `trust_env=False`**(已在 SearchClient 处理) diff --git a/PLAN.md b/PLAN.md index c8d47c4..70fac7f 100644 --- a/PLAN.md +++ b/PLAN.md @@ -432,3 +432,63 @@ OpenCode 的坑:如果只是在主会话里装样子地写"让 X agent 做", **v0.4 的"/dr-status" 命令保持**(未改动) 备份:v0.4 状态打 tag `v0.4-final`;v0.4 的 project 产物归档到 `archive/o-glycosidase-feasibility-2026-v0.4/` + +- 2026-04-22 v0.6:**Phase 4 Python 化 + 术语事实核查** + + **根因**:v0.5.2 的 dr-translator 反复在 output token 超限处卡死。本质原因:单 agent 处理 19k+ 词整文超 Sonnet 4.6 的 ~32k output token 上限,任何 prompt 级的分块追加协议都依赖 LLM 遵从性,实测不稳。 + + **决策**:把 Phase 4 的翻译/润色/出稿从 LLM agent 降级为 **Python 脚本 + LLM 调用**。Python 负责"做多少"(切块、循环、重试、断点),LLM 只负责"做什么"(翻译/润色这一小段)。 + + **新增 Python 基础设施**(全部独立于 opencode): + + - `scripts/lib/zenmux_client.py` — HTTP 客户端,指数退避重试、token 统计、JSONL 日志、secrets.env 自动加载 + - `scripts/lib/markdown_chunker.py` — 按 H1/H2 切块,稳定 anchor ID(order + title sha1),合并工具 + - `scripts/lib/search_client.py` — 通用搜索门面(Exa > Tavily),`trust_env=False` 关键修复系统 socks 代理 TLS EOF 问题 + - `scripts/prompts/{translate,polish,glossary}_system.txt` — 三个核心 prompt,用自定义 `<<<TAG>>>` 分隔符格式(规避 Markdown-in-JSON 的引号/换行转义问题) + + **新增 Python 脚本**: + + - `scripts/translate.py` — 章节级切块循环翻译 + 术语表累积 + - `scripts/polish.py` — 按 H2 section 循环润色,记模型自标异常到 polish_notes.jsonl + - `scripts/build_glossary.py` — **术语表事实核查**:用 Haiku + Exa 并发验证每个术语的中文译名和英文拼写,发现拼写错误与误译 + - `scripts/apply_glossary.py` — 把 glossary 发现的明确错误直接字面替换进 final_zh.md;保守策略(只改公司/机构/产品类专有名词,不碰 PDE/ASGPR 等有歧义的缩写) + - `scripts/build_report.py` — 统一出稿入口,按 manifest.report_title 命名 PDF/DOCX,自动发现 sources.jsonl + + **report-template.py 深度修复**: + + - 字体注册支持 `fonts/ttf/` 子目录(OTF 的 PostScript outlines 与 ReportLab 不兼容) + - 删除 build_disclaimer 的 manifest 重复调用(免责声明从 Markdown 读,不再重复) + - 自动跳过正文首个 H1 + 封面元信息段(与封面避免重复) + - 识别"目录将在最终渲染时自动生成"占位符 → 自动生成 TOC + - 识别"完整编号参考文献列表…"占位符 → 从 `phase2/sources.jsonl` 生成 GB/T 7714 格式引文 + - src 上标正则扩展:支持 src_A14 / src_B-18 等字母+数字组合(原只支持 src_\\d+) + - Unicode 上/下标转 `<super>/<sub>` 标签(思源字体子集不含上标字形,否则渲染方框) + - 中英/数字混排自动加半角空格(CJK ↔ ASCII 边界) + - 表格样式重做:table-header 水平居中、短 cell 居中、长 cell 左对齐、所有 cell 垂直居中、长文字 CJK 自动换行 + - TOC 末尾 PageBreak(目录独占整页) + + **Agent 调整**: + + - dr-translator / dr-polisher 标记 `[DEPRECATED v0.6]`,权限全部 deny,保留文件仅供历史参考 + - dr-editor-in-chief 重构为"只做创作 + bash 调脚本"模式,新增 `uv run *` / `bash scripts/*` 权限 + - `/dr-finalize` command 重写为 9 步流程:合并英文 → translate.py → build_glossary → apply_glossary → polish → build_report + + **实测结果(dual-target-rnai-pipeline-2026 项目)**: + - translate.py:63 块全成功,17 分钟,$1.70,33,441 中文字(膨胀 1.89×) + - polish.py:60 块全成功,10.7 分钟,$1.20,字数 -0.2% + - build_glossary:201/310 术语核查成功(失败 106 条是代理 TLS EOF,降并发后可补齐),发现关键事实错误: + - Maywavee 实为 **Mabwell(迈威生物)** 的拼写错误 + - Beyotime 中文误译为 '碧云天',实应为 '必贝特医药' + - Aurigene 误译 '天津奥利法',应为 '天津奥瑞芙生物医药' + - apply_glossary:自动修正 3 处关键错误 + - build_report:生成《双靶点 RNAi 药物工艺图谱与上游供应链机会研究.pdf》55 页 + 同名 DOCX + + **已知限制**: + - dr-analyst 在 Phase 2 可能编造信源 ID(本次正文 101 个 src_id vs sources.jsonl 只 44 条),build_references 会列出缺失项供人工核对 + - build_glossary 对"通用缩写"判定仍依赖 LLM,存在歧义风险(已加 _AMBIGUOUS_ABBREVS 黑名单防止误伤) + - 反方证据段落格式不统一(小节标题/加粗段混用)仍未解决,需改 skill:evidence-table 或 mckinsey-method + + **尚未处理的用户反馈(留待 v0.6.1)**: + - 反驳证据段标题规范化(建议从"反方证据/Counter-Evidence"改为观点化标题如"另一种声音") + - build_glossary 默认放到 Phase 2 阶段运行,在源头拦截错误 + - 提示 dr-analyst 加强对公司名/机构名的搜索验证流程