\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>
495 lines
26 KiB
Markdown
495 lines
26 KiB
Markdown
# Deep Research 系统方案(OpenCode 实现)
|
||
|
||
> 本文件是整套方案的**单一真实源**,中断后续接时从此文件恢复上下文。
|
||
> 最后更新:2026-04-20
|
||
> 实施阶段:路径 2 — 最小可用先行(MVP)
|
||
|
||
---
|
||
|
||
## 0. 背景与目标
|
||
|
||
### 0.1 用户画像
|
||
- 主业:生物医药行业的研发、工艺、管理、投资研究(非 coding)
|
||
- 痛点:此前在 OpenClaw / Hermes 做 Deep Research 时 token 消耗大但效果差
|
||
- 预期:以麦肯锡、德勤等顶尖机构的方法论输出专业报告
|
||
|
||
### 0.2 质量标准(硬性)
|
||
- **字数**:综述类 ≥ 10,000 字;研究类 ≥ 30,000 字
|
||
- **证据**:每条结论至少 2 个独立 Tier 1-2 信源佐证,否则标注"观点待验证"
|
||
- **结构**:8-15 章,每章下分 section / sub-section;每个标题即一个观点
|
||
- **信源**:优先论文、专利、权威研究报告;排除劣质纯新闻、自媒体
|
||
- **交付**:PDF(ReportLab)+ DOCX(Pandoc),格式专业、中文排版规范
|
||
|
||
---
|
||
|
||
## 1. 关键决策(已与用户确认)
|
||
|
||
| 维度 | 决策 |
|
||
|---|---|
|
||
| LLM 接入 | **zenmux 中转**(多模型混合) |
|
||
| 项目位置 | **仅项目级** `.opencode/`,项目根目录为 `deep_research/` |
|
||
| 搜索 API | **Tavily / Brave / Exa 走 MCP Server**;生物医药专业信源走 skill+bash |
|
||
| PDF 方案 | **ReportLab**(中文字体一次注册,样式集中 StyleSheet) |
|
||
| DOCX 方案 | **Pandoc + reference-doc** |
|
||
| 字数落实 | 框架阶段分配配额 + 终稿校验双保险 |
|
||
| 交互节奏 | Phase 1 末、Phase 3 末强制确认 |
|
||
| 并发 subagent | 3-4 个(稳,避免 API 限流) |
|
||
| 中文字体 | **思源宋体 + 思源黑体 + 霞鹜文楷**,通过 `download-fonts.sh` 自动拉取 |
|
||
|
||
---
|
||
|
||
## 2. 模型分配(zenmux 双 provider 架构)
|
||
|
||
详细 slug、cache 机制、升级流程见 `AGENTS.md` §6。关键要点:
|
||
|
||
- **Claude 系列走 `zenmux-anthropic/...`(无 `anthropic/` 前缀的裸 slug)**,以便 prompt cache 原生生效
|
||
- 其他模型走 `zenmux/<vendor>/<slug>`,隐式缓存自动生效
|
||
- 真实可用模型清单通过 `curl zenmux /api/v1/models` 随时查询;不要依赖 zenmux 文档里的过期示例
|
||
|
||
| 角色 | 模型 | 完整 model 字段 | 上下文 | 温度 | top_p |
|
||
|---|---|---|---|---|---|
|
||
| dr-plan(框架规划) | Claude Opus 4.7 | `zenmux-anthropic/claude-opus-4.7` | 1M | **0.7** | **0.9** |
|
||
| dr-pm(项目经理/调度) | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4.6` | 1M | 0.2 | 默认 |
|
||
| dr-chief-editor(总编/终审) | Gemini 3.1 Pro Preview | `zenmux/google/gemini-3.1-pro-preview` | 1M | 0.3 | 默认 |
|
||
| dr-searcher(轻量检索) | Claude Haiku 4.5 | `zenmux-anthropic/claude-haiku-4.5` | 200K | 0.1 | 默认 |
|
||
| dr-analyst(章节深研) | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4.6` | 1M | 0.3 | 默认 |
|
||
| dr-verifier(反方验证) | GPT-5.4 Pro(首选)/ Qwen3.6-Plus / MiniMax M2.7 | `zenmux/openai/gpt-5.4-pro` 等 | 1.05M | 0.2 | 默认 |
|
||
| dr-polisher(去AI味+润色) | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4.6` | 1M | 0.4 | 默认 |
|
||
| dr-reporter(出稿) | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4.6` | 1M | 0.1 | 默认 |
|
||
|
||
**Cache 行为**:Claude 走 `@ai-sdk/anthropic` 会自动打 `cache_control` 断点,zenmux 的 Anthropic 端点完整支持 4 种 cache 模式。Opus 4.7 cache read 价格仅 0.5 USD/M tokens(对比输入价 25 USD/M,节省 98%)。验证方法见 `AGENTS.md` §6.5。
|
||
|
||
---
|
||
|
||
## 3. 完整架构
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 用户 (TUI 入口) │
|
||
└─────────────────────┬───────────────────────────────────────────┘
|
||
│ Tab 切换主 agent
|
||
┌───────────┼────────────┐
|
||
▼ ▼ ▼
|
||
┌───────┐ ┌───────┐ ┌──────────┐
|
||
│ dr- │ │ dr- │ │ dr-chief │ (Primary)
|
||
│ plan │ │ pm │ │ -editor │
|
||
│ (Opus)│ │(Sonnet)│ │ (Gemini) │
|
||
└───┬───┘ └───┬────┘ └─────┬────┘
|
||
│ │ Task 工具委派│
|
||
│ ▼ │
|
||
│ ┌─────────────┐ │
|
||
│ │ Subagents │ │ (并行 3-4 个)
|
||
│ ├─────────────┤ │
|
||
│ │ dr-searcher │ │ Haiku 轻检索
|
||
│ │ dr-analyst │ │ Sonnet 深研
|
||
│ │ dr-verifier │ │ GPT-5/Qwen 交叉
|
||
│ │ dr-polisher │ │ Sonnet 润色
|
||
│ │ dr-reporter │ │ Sonnet 出稿
|
||
│ └─────────────┘ │
|
||
│ │
|
||
调用 Skills ───────────────────┘
|
||
调用 MCP Servers
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 目录结构
|
||
|
||
```
|
||
deep_research/
|
||
├── PLAN.md # 本文件 — 方案真实源
|
||
├── AGENTS.md # 研究方法论与规则(OpenCode 自动读)
|
||
├── README.md # 使用指南
|
||
├── .gitignore
|
||
├── secrets.env.example # 密钥模板
|
||
├── secrets.env # 实际密钥(不入 git)
|
||
│
|
||
├── .opencode/
|
||
│ ├── opencode.json # MCP + 权限 + 默认模型
|
||
│ ├── agents/
|
||
│ │ ├── dr-plan.md # [MVP] Primary:框架规划 Opus temp 0.7
|
||
│ │ ├── dr-pm.md # [MVP] Primary:PM/调度 Sonnet temp 0.2
|
||
│ │ ├── dr-chief-editor.md # [待补] Primary:总编 Gemini
|
||
│ │ ├── dr-searcher.md # [待补] Subagent:轻检索 Haiku
|
||
│ │ ├── dr-analyst.md # [待补] Subagent:深研 Sonnet
|
||
│ │ ├── dr-verifier.md # [待补] Subagent:交叉验证 GPT-5/Qwen
|
||
│ │ ├── dr-polisher.md # [待补] Subagent:润色 Sonnet
|
||
│ │ └── dr-reporter.md # [待补] Subagent:出稿 Sonnet
|
||
│ ├── skills/
|
||
│ │ ├── search-strategy/SKILL.md # [MVP] 检索策略总纲
|
||
│ │ ├── source-quality/SKILL.md # [MVP] 信源评级与黑名单
|
||
│ │ ├── length-budget/SKILL.md # [MVP] 字数预算
|
||
│ │ ├── pdf-reportlab/SKILL.md # [MVP] ReportLab 中文模板
|
||
│ │ ├── biomed-pubmed/SKILL.md # [待补]
|
||
│ │ ├── biomed-clinicaltrials/SKILL.md # [待补]
|
||
│ │ ├── biomed-openfda/SKILL.md # [待补]
|
||
│ │ ├── biomed-patents/SKILL.md # [待补]
|
||
│ │ ├── biomed-finance/SKILL.md # [待补]
|
||
│ │ ├── docx-pandoc/SKILL.md # [待补]
|
||
│ │ ├── citation-manager/SKILL.md # [待补]
|
||
│ │ ├── evidence-table/SKILL.md # [待补]
|
||
│ │ ├── mckinsey-method/SKILL.md # [待补]
|
||
│ │ └── report-template/SKILL.md # [待补]
|
||
│ ├── commands/
|
||
│ │ ├── dr-init.md # [MVP] /dr-init <topic>
|
||
│ │ ├── dr-frame.md # [MVP] /dr-frame
|
||
│ │ ├── dr-research.md # [待补] /dr-research
|
||
│ │ ├── dr-review.md # [待补] /dr-review
|
||
│ │ ├── dr-finalize.md # [待补] /dr-finalize
|
||
│ │ └── dr-status.md # [待补] /dr-status
|
||
│ └── templates/
|
||
│ ├── report-template.py # [MVP] ReportLab PDF 模板
|
||
│ ├── report-template.docx # [待补] Pandoc reference-doc
|
||
│ ├── report-template.md # [待补] Markdown 骨架
|
||
│ └── fonts/
|
||
│ ├── download-fonts.sh # [MVP] 字体自动下载
|
||
│ ├── README.md # 字体来源说明
|
||
│ ├── SourceHanSerifSC-Regular.otf (git 忽略)
|
||
│ ├── SourceHanSerifSC-Bold.otf (git 忽略)
|
||
│ ├── SourceHanSansSC-Light.otf (git 忽略)
|
||
│ ├── SourceHanSansSC-Medium.otf (git 忽略)
|
||
│ ├── SourceHanSansSC-Bold.otf (git 忽略)
|
||
│ ├── SourceHanSansSC-Heavy.otf (git 忽略)
|
||
│ └── LXGWWenKai-Regular.ttf (git 忽略)
|
||
│
|
||
├── projects/ # 每个研究主题一个子目录
|
||
│ └── <topic-slug>/
|
||
│ ├── manifest.json # 元信息
|
||
│ ├── phase1/
|
||
│ │ ├── initial-scan.md
|
||
│ │ ├── framework.md
|
||
│ │ └── interview.md
|
||
│ ├── phase2/
|
||
│ │ ├── evidence/
|
||
│ │ ├── sources.jsonl
|
||
│ │ └── drafts/
|
||
│ ├── phase3/
|
||
│ │ ├── critique.md
|
||
│ │ └── revisions/
|
||
│ └── phase4/
|
||
│ ├── final.md
|
||
│ ├── final.pdf
|
||
│ ├── final.docx
|
||
│ └── citations.bib
|
||
│
|
||
└── archive/ # 历史研究归档
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 字体方案(方案 A:思源 + 霞鹜文楷)
|
||
|
||
| 用途 | 字体 | 字号 | 行高 |
|
||
|---|---|---|---|
|
||
| 正文 | 思源宋体 Regular | 10.5pt | 16pt |
|
||
| 正文粗体/术语 | 思源宋体 Bold | 10.5pt | 16pt |
|
||
| 一级标题(章) | 思源黑体 Bold | 18pt | 28pt |
|
||
| 二级标题(section) | 思源黑体 Bold | 14pt | 22pt |
|
||
| 三级标题(subsection) | 思源黑体 Medium | 12pt | 18pt |
|
||
| 摘要/引文/批注 | 霞鹜文楷 Regular | 10.5pt | 16pt |
|
||
| 图表标题 | 思源黑体 Medium | 9pt | 13pt |
|
||
| 脚注/参考文献 | 思源宋体 Regular | 9pt | 13pt |
|
||
| 页眉页脚 | 思源黑体 Light | 8pt | 12pt |
|
||
| 封面主标题 | 思源黑体 Heavy | 32pt | 42pt |
|
||
|
||
所有字体均为 **SIL OFL** 许可,可自由商用、嵌入 PDF 分发。
|
||
|
||
**字体下载来源(download-fonts.sh)**:
|
||
- 思源宋体:`https://github.com/adobe-fonts/source-han-serif/releases`
|
||
- 思源黑体:`https://github.com/adobe-fonts/source-han-sans/releases`
|
||
- 霞鹜文楷:`https://github.com/lxgw/LxgwWenKai/releases`
|
||
|
||
---
|
||
|
||
## 6. 工作流(四阶段)
|
||
|
||
### Phase 1:框架规划(dr-plan 主导)
|
||
1. `/dr-init <topic>` 创建项目目录 + manifest.json,进行初轮对话访谈
|
||
2. `/dr-frame` 触发:
|
||
- dr-plan 用 `skill:search-strategy` 指挥 3 个 dr-searcher 并行初扫
|
||
- 生成 8-15 章大纲 + 每章研究思路 + 字数配额(依据 `skill:length-budget`)
|
||
- **【停】等用户确认** — 可迭代
|
||
|
||
### Phase 2:深度研究(dr-pm 主导)
|
||
1. `/dr-research` 触发:
|
||
- dr-pm 按章节分批并行调度 dr-analyst
|
||
- 每章完成后自动调度 dr-verifier 做反方验证
|
||
- 每条结论自动填入 `evidence/chXX-evidence.md` 的"观点-证据-来源-置信度"表
|
||
- `skill:length-budget` 自检,不足则继续挖掘
|
||
|
||
### Phase 3:总编审校(dr-chief-editor 主导)
|
||
1. `/dr-review` 触发:
|
||
- Gemini 3.1 Pro 通读全部 drafts
|
||
- 产出 `critique.md`:逻辑漏洞、证据不足、观点雷同、金字塔违反
|
||
- **【停】等用户决策**:
|
||
- a) 直接修正 → 进入 finalize
|
||
- b) 特定章节回炉 phase2
|
||
- c) 整体重来 → 回 phase1
|
||
|
||
### Phase 4:成稿(dr-chief-editor 调度)
|
||
1. `/dr-finalize` 触发:
|
||
- dr-polisher 去 AI 味、中文表达、术语统一
|
||
- dr-reporter 执行:
|
||
- `python .opencode/templates/report-template.py final.md → final.pdf`
|
||
- `pandoc final.md --reference-doc=... → final.docx`
|
||
|
||
---
|
||
|
||
## 7. 如何避免"多 agent 实际是一个主模型跑到底"
|
||
|
||
OpenCode 的坑:如果只是在主会话里装样子地写"让 X agent 做",实际还是主模型在跑,token 花了但没分工。
|
||
|
||
**三道保险**:
|
||
1. **命令级强制**:所有命令 frontmatter 设 `subtask: true`,强制走 Task 工具,真起子会话
|
||
2. **Agent 强绑模型**:每个 subagent 的 `model` 字段写死到具体模型,OpenCode 会真正起独立会话用那个模型
|
||
3. **任务权限白名单**:dr-pm 的 `permission.task` 精确限定只能调用 subagent,不能跨级调度
|
||
4. **可验证**:TUI 里 `<Leader>+Right` 切入子会话,能看到真实在跑的模型名
|
||
|
||
---
|
||
|
||
## 8. 完整实施清单(v0.4 全部完成)
|
||
|
||
### 基础设施
|
||
- [x] 目录结构
|
||
- [x] PLAN.md / AGENTS.md / README.md / .gitignore
|
||
- [x] .opencode/opencode.json(双 provider + MCP + 权限)
|
||
- [x] secrets.env.example
|
||
- [x] scripts/setup.sh / activate.sh / verify-zenmux.sh
|
||
- [x] requirements.txt / pyproject.toml(uv)
|
||
|
||
### Agents(8 个)
|
||
- [x] dr-plan(Opus 4-7,temp 0.7)
|
||
- [x] dr-pm(Sonnet 4-6,temp 0.2)
|
||
- [x] dr-searcher(Haiku 4-5,temp 0.1)
|
||
- [x] dr-analyst(Sonnet 4-6,temp 0.3)
|
||
- [x] dr-verifier(GPT-5.4-pro,temp 0.2)
|
||
- [x] dr-chief-editor(Gemini 3.1 Pro Preview,temp 0.3)
|
||
- [x] dr-polisher(Sonnet 4-6,temp 0.4)
|
||
- [x] dr-reporter(Sonnet 4-6,temp 0.1)
|
||
|
||
### Commands(6 个)
|
||
- [x] /dr-init
|
||
- [x] /dr-frame
|
||
- [x] /dr-research
|
||
- [x] /dr-review
|
||
- [x] /dr-finalize
|
||
- [x] /dr-status
|
||
|
||
### Skills(7 个)
|
||
- [x] search-strategy
|
||
- [x] source-quality
|
||
- [x] length-budget
|
||
- [x] pdf-reportlab
|
||
- [x] evidence-table
|
||
- [x] citation-manager
|
||
- [x] mckinsey-method
|
||
|
||
### 报告模板
|
||
- [x] report-template.py(ReportLab PDF)
|
||
- [x] fonts/download-fonts.sh
|
||
|
||
### 待补(后续优化)
|
||
- [ ] docx-pandoc skill(Pandoc reference-doc 模板)
|
||
- [ ] 生物医药专业信源 skill(PubMed / ClinicalTrials / openFDA / 专利 / 金融)
|
||
- [ ] dr-reporter 的 DOCX 样式优化
|
||
|
||
---
|
||
|
||
## 9. 后续路径
|
||
|
||
### 优化项(实施阶段 5)
|
||
|
||
### 优化项(实施阶段 4)
|
||
- 把稳定的 bash skill 封装成 MCP server
|
||
- 引入 Exa /neural search 提升专业文献召回
|
||
- 支持图表自动生成(matplotlib 模板库)
|
||
|
||
---
|
||
|
||
## 10. 用户待办
|
||
|
||
1. [x] ~~模型 slug 映射~~(v0.3 已完成,基于 zenmux `/api/v1/models` 实时数据)
|
||
2. [ ] 准备 API keys(`secrets.env` 填写):
|
||
- ZENMUX_API_KEY(必填,格式 `sk-ai-v1-xxx`)
|
||
- TAVILY_API_KEY / EXA_API_KEY / BRAVE_API_KEY
|
||
- NCBI_API_KEY(可选,高频查 PubMed 时需要)
|
||
3. [ ] 环境初始化(跨 macOS/Debian,用 uv):
|
||
```bash
|
||
bash scripts/setup.sh
|
||
```
|
||
会自动:装 uv(如缺失)→ `uv sync` 建 `.venv/` + 装依赖 → 检查系统二进制。
|
||
4. [ ] 系统二进制(setup.sh 会检测但不自动装):
|
||
- `pandoc`(DOCX 出稿阶段必须)
|
||
- `opencode`(TUI 主程序)
|
||
5. [ ] 首次使用前:
|
||
```bash
|
||
source scripts/activate.sh # 激活 venv + 载入 secrets
|
||
bash .opencode/templates/fonts/download-fonts.sh # 下载字体
|
||
bash scripts/verify-zenmux.sh # 验证端点与 cache
|
||
```
|
||
6. [ ] 用一个小主题跑通 MVP 流水线,验证:
|
||
- subagent 是否真正被独立调度(TUI 可见子会话)
|
||
- 字数配额是否正确落到 framework.md
|
||
- 信源过滤是否生效(Tier 4 不会进 sources.jsonl)
|
||
- zenmux 后台 Logs 能看到 `cache_read_input_tokens > 0`
|
||
|
||
---
|
||
|
||
## 11. 风险与缓解
|
||
|
||
| 风险 | 缓解 |
|
||
|---|---|
|
||
| zenmux 模型 slug 命名变动 | AGENTS.md §6 单点维护映射表,全部 agent 引用此表 |
|
||
| Claude prompt cache 未生效 → 成本暴涨 | Claude 系列强制走 `zenmux-anthropic`(`@ai-sdk/anthropic` 通道),zenmux 后台 Logs 验证 `cache_creation_input_tokens` 字段 |
|
||
| MCP server 首次启动慢 | 用 `opencode serve` 常驻;subagent 设合理 timeout |
|
||
| 搜索 API 限流 | search-strategy 里规定每批 ≤3 个 searcher;失败重试 3 次带退避 |
|
||
| Opus 成本高 | dr-plan 用 steps 限制迭代次数(见 length-budget) |
|
||
| ReportLab 中文渲染慢 | matplotlib 预渲染 PNG,StyleSheet 缓存 |
|
||
| 中断恢复 | 所有状态写 manifest.json + phase 文件,本 PLAN.md 是元控制文件 |
|
||
|
||
---
|
||
|
||
## 12. 变更记录
|
||
|
||
- 2026-04-20 v0.1:初版方案确定,MVP 路径 2 开始实施
|
||
- 2026-04-20 v0.2:**双 provider 架构**上线,解决 zenmux Claude prompt cache 问题
|
||
- 新增 `zenmux-anthropic` 自定义 provider(`@ai-sdk/anthropic` + `https://zenmux.ai/api/anthropic`)
|
||
- Claude 系列迁移到裸 slug
|
||
- 非 Claude 系列保留 `zenmux/<vendor>/<slug>` 走 OpenAI 兼容端点
|
||
- AGENTS.md §6 重写:cache 机制、验证锚点、最低 token、升级流程
|
||
|
||
- 2026-04-20 v0.3:**修正 v0.2 错误 + 切换到 uv**
|
||
- **模型修正**:v0.2 用了 zenmux 文档里过期的模型列表(被用户指正),重新通过 `curl zenmux /api/v1/models` 拉真实清单
|
||
- Claude 恢复实际最新版:Opus **4.7** / Sonnet **4.6** / Haiku 4.5(Opus/Sonnet 都是 1M 上下文)
|
||
- dr-chief-editor 升级为 Gemini **3.1 Pro Preview**(1M)
|
||
- dr-verifier 恢复 GPT-5.4 Pro(1.05M)/ Qwen 3.6 Plus / MiniMax M2.7 / Kimi K2.5
|
||
- 新增 AGENTS.md §6.7 "模型升级流程",**原则:模型 slug 以 zenmux `/api/v1/models` 实时返回为准**
|
||
- **Python 环境切换到 uv**(v0.2 是 pip+venv,跨平台体验差)
|
||
- 新增 `pyproject.toml` 作为依赖真源
|
||
- `scripts/setup.sh` 改为调 `uv sync`(自动装 uv、装 Python、建 venv、装依赖)
|
||
- `scripts/activate.sh` 激活时自动找 uv 路径
|
||
- `requirements.txt` 降级为备用清单(无 uv 的沙盒环境兜底)
|
||
|
||
- 2026-04-20 v0.4:**全流程完成**
|
||
- 修复 zenmux-anthropic baseURL 缺 `/v1` 导致返回 HTML 页面的问题
|
||
- 修复 Anthropic 端点模型名用点号(`4.7`)应改为连字符(`4-7`)
|
||
- 新增全部 subagent:dr-searcher / dr-analyst / dr-verifier / dr-chief-editor / dr-polisher / dr-reporter
|
||
- 新增 Phase 2-4 命令:/dr-research / /dr-review / /dr-finalize / /dr-status
|
||
- 新增 skills:evidence-table / citation-manager / mckinsey-method
|
||
- Phase 1 已成功跑通(O-糖苷酶立项报告测试主题)
|
||
|
||
- 2026-04-21 v0.5:**深度质量改造**(P0+P1+P2 一次到位)
|
||
|
||
**根因诊断**:v0.4 跑通后发现 6 类质量问题:
|
||
1. 并行派发退化(Batch 3 后只派 1 个 subagent)
|
||
2. 全文 AI 味重(humanizer 能识别的 28 种 AI 模式大量出现)
|
||
3. Phase 2 草稿(Sonnet)与 Final.md(Gemini 重写)风格断裂
|
||
4. 标题用了用户原始问题而非正式报告命名
|
||
5. 每章首节都强制套 SCQA 显式标注(机械套路)
|
||
6. 正文混入"章节定位/字数配额/研究员 dr-analyst/生成时间"等调度元数据
|
||
7. PDF 分页散乱,标题孤行
|
||
8. 参考文献只留占位符 `[由 dr-reporter 自动生成]`
|
||
|
||
**工作流重构**:切换为"英文工作 + 最终翻译":
|
||
- Phase 1:中文访谈 + 双语 framework(中文大纲 + 英文研究思路)
|
||
- Phase 2:dr-analyst/dr-verifier 全英文产出
|
||
- Phase 3:dr-chief-editor(Gemini)英文只读审校
|
||
- Phase 4:全新链路 dr-editor-in-chief → dr-translator → dr-polisher → dr-reporter
|
||
|
||
**Agent 调整**:
|
||
- dr-chief-editor(Gemini 3.1 Pro):收窄为 Phase 3 只读审校,不参与 Phase 4 写作
|
||
- **新增** dr-editor-in-chief(Opus 4-7):Phase 4 主体,负责合并英文稿、写 Executive Summary / Abstract / Glossary
|
||
- **新增** dr-translator(Sonnet 4-6):英译中专家
|
||
- dr-polisher(Sonnet 4-6):强化加载 humanizer-cn + output-hygiene
|
||
- dr-reporter(Sonnet 4-6):强制回填 citations + 卫生检查
|
||
- dr-analyst / dr-verifier / dr-pm:切换为英文工作语言
|
||
- dr-pm:批次间 context 压缩(通过 manifest.batches_summary)
|
||
|
||
**Skills 新增/升级**:
|
||
- `mckinsey-method` 重写:SCQA 仅限 Executive Summary + 各章引入段,禁止显式标注 S/C/Q/A;金字塔原理优先
|
||
- `length-budget` 升级:4 种字数模式(auto/concise/detailed/deep)+ 英中换算率 1:1.4
|
||
- **新增** `humanizer-cn`:基于 blader/humanizer + 中文特化(CN-1 到 CN-10)
|
||
- **新增** `output-hygiene`:禁止词黑名单(章节定位/P0/研究员/占位符/SCQA 标注等 50+ 项)
|
||
- **新增** `en-zh-translation`:生物医药英译中规范
|
||
- `pdf-reportlab` 升级:widows/orphans/keepWithNext/splitByRow 分页规则,3 级颜色层次,封面保密标识
|
||
|
||
**Commands 升级**:
|
||
- `/dr-init`:访谈增至 8 步,末尾由 dr-plan 提议 3 个报告标题让用户选
|
||
- `/dr-frame`:生成双语 framework(章节标题中英对照,研究思路英文为主)
|
||
- `/dr-finalize`:新链路 dr-editor-in-chief 入口,4 步串行调度
|
||
|
||
**模板升级**:
|
||
- `report-template.py` 重写:颜色层次(h1 深蓝 / h2 蓝 / h3 深灰)、封面保密标识红色、widows=2 orphans=2、表格 splitByRow、禁止孤行寡行
|
||
|
||
**manifest.json 新字段**:
|
||
- `report_title` / `report_subtitle`:与 `topic` 分离,由用户在 /dr-init 选定
|
||
- `confidentiality`:封面保密标识
|
||
- `word_budget_mode`:auto/concise/detailed/deep
|
||
- `target_words_en` / `min_words_en`:英文词数目标
|
||
- `work_language` / `output_language`:工作和输出语言
|
||
- `phase2.batches_summary`:批次间 context 压缩的进度摘要
|
||
|
||
**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 加强对公司名/机构名的搜索验证流程
|