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 <human>
This commit is contained in:
@@ -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 加强对公司名/机构名的搜索验证流程
|
||||
|
||||
Reference in New Issue
Block a user