Files
deep_research/AGENTS.md
T

302 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md — 生物医药 Deep Research 系统规则
> 本文件为 OpenCode 会自动读取的项目级指令文件。
> 所有 agent / skill / command 必须遵循本文件定义的研究方法论、信源标准与输出规范。
---
## 1. 项目使命
本项目通过多 agent 协作,以**麦肯锡、德勤等顶尖机构的研究方法**,对生物医药领域(研发、工艺、管理、投资)的指定主题进行深度研究,输出专业级报告(PDF + DOCX)。
本项目**不涉及代码开发**,所有"代码"都是为**研究流水线**服务(如 ReportLab 模板、下载脚本、信源 API 调用)。
---
## 2. 研究方法论(所有 agent 必须遵循)
### 2.1 麦肯锡核心原则
1. **MECE**Mutually Exclusive, Collectively Exhaustive):章节划分互斥且穷尽
2. **SCQA 叙事**Situation → Complication → Question → Answer):每章节开头用此结构引入
3. **金字塔原理**:结论先行,论据支撑,纵向深入,横向 MECE
4. **"每个标题即一个观点"**:标题不能是"概述""现状"这类模糊词,必须包含判断
5. **So What? 自检**:每写完一段问自己"所以呢?",若无则删
### 2.2 证据铁律
- **每条结论至少 2 个独立 Tier 1-2 信源**佐证(见 §4 信源分级)
- 达不到则**必须在正文注明**"该观点仅有 X 个来源支持,待进一步验证"
- **反方证据优先**:每个 chapter 的研究必须主动搜索证伪性论点,不能只找支持证据
- **数据可追溯**:所有数字、百分比、日期必须有来源 ID(如 `[src_042]`
### 2.3 字数配额(硬要求)
| 报告类型 | 最小字数 | 建议章节数 |
|---|---|---|
| 综述类 | 10,000 字 | 8-10 章 |
| 研究类 | 30,000 字 | 10-12 章 |
| 投资报告 | 20,000 字 | 10-12 章 |
| 管理/工艺类 | 15,000-25,000 字 | 9-11 章 |
**字数分配原则**
- 每章字数差距不超过 ±30%(避免头重脚轻)
- 每 section 最少 800 字(不够则合并)
- 结论章不少于全文 10%
### 2.4 报告不能只谈结论
- 每个观点后必须紧跟**数据/事实/案例**佐证
- 禁止空洞形容词("巨大""快速""显著")不带数据
- 趋势判断必须给**量化依据**(年复合增长率、市场规模、成功率等)
---
## 3. Phase 工作流(4 阶段)
### Phase 1:框架规划
- **驱动命令**`/dr-init <topic>``/dr-frame`
- **主导 agent**dr-plan
- **产出**`projects/<slug>/phase1/framework.md`8-15 章大纲,每 section 带研究思路与字数配额)
- **暂停点**:用户确认框架
### Phase 2:深度研究
- **驱动命令**`/dr-research`
- **主导 agent**dr-pm(调度 3-4 个 dr-analyst 并行 + dr-verifier 反方验证)
- **产出**`projects/<slug>/phase2/drafts/chXX.md` + `evidence/chXX-evidence.md` + `sources.jsonl`
- **不暂停**:全自动跑完
### Phase 3:总编审校
- **驱动命令**`/dr-review`
- **主导 agent**dr-chief-editorGemini 3.1 Pro 1M 上下文通读)
- **产出**`projects/<slug>/phase3/critique.md`
- **暂停点**:用户决策(修正 / 回炉 phase2 / 整体重来)
### Phase 4:成稿
- **驱动命令**`/dr-finalize`
- **主导 agent**dr-editor-in-chief(创作)→ `scripts/phase4_pipeline.py`(执行链路)
- **执行链路**translate → glossary(optional) → apply_glossary → polish → build_report
- **产出**`phase4/final_en.md` + `phase4/final_zh.md` + `phase4/final_zh_polished.md` + `phase4/*.pdf` + `phase4/*.docx`
---
## 4. 信源分级(Tier 系统)
### Tier 1 — 一级信源(优先使用,评分权重 × 1.2)
- **一手学术文献**PubMed、Cochrane、顶刊原文(NEJM / Lancet / Nature / Science / Cell / JAMA
- **监管机构公告**FDA、EMA、NMPA、PMDA 官网及 openFDA
- **临床试验注册**ClinicalTrials.gov、ChiCTR
- **专利原文**USPTO、EPO、CNIPA、Google Patents
- **上市公司披露**SEC 10-K/10-Q、招股书、交易所年报
### Tier 2 — 二级信源(可用,标准权重)
- **权威咨询报告**:麦肯锡、BCG、德勤、IQVIA、EvaluatePharma、弗若斯特沙利文
- **学术综述**:系统综述(Systematic Review)、Meta 分析
- **行业协会**:PhRMA、BIO、中国医药工业协会
- **专业数据库**:Wind、东方财富、同花顺(金融侧)
- **专业媒体**BioSpace、Endpoints News、FiercePharma、医药魔方、Insight 数据库
### Tier 3 — 三级信源(辅助,不得作为唯一支撑)
- **预印本**bioRxiv、medRxiv(需标注"未经同行评审")
- **券商研报**:中金、中信、高盛生物医药团队(需注意利益冲突)
- **会议摘要**AACR、ASCO、ASH 会议摘要(数据可能未完整发表)
- **企业白皮书**(注明来源,降权使用)
### Tier 4 — 四级信源(仅做发现入口)
- Tavily / Brave / Exa 通用搜索返回的**普通网页**
- 一般新闻报道
- Wikipedia(**只做术语理解入口,结论不得引用**)
### 黑名单(禁用)
- 纯新闻聚合站(百家号、头条号、部分自媒体公众号)
- 未署名作者的行业博客
- 被 Retraction Watch 标记为撤稿的论文
- 明显软文/PR 稿(如"某某 CEO 表示..."而无实质数据)
- 超过 5 年的综述(除机制类研究可放宽)
### 信源评分(0-10
每个进入 `sources.jsonl` 的信源必须打分,维度:
- 权威性(期刊 IF、机构排名)0-3
- 时效性(≤3 年满分,每老 1 年 -0.5) 0-2
- 一手性(一手 > 综述 > 二次解读) 0-2
- 可验证性(有 DOI / URL / 原始数据) 0-2
- 利益冲突(厂商自发 -1 0-1
**硬规则**:评分 < 5 的信源不得作为结论唯一支撑。
---
## 5. Agent 角色与职责(v0.5 重构)
> 每个 agent 的详细定义见 `.opencode/agents/*.md`
| Agent | 类型 | 模型 | 职责 | 工作语言 |
|---|---|---|---|---|
| dr-plan | primary | Opus 4.7 | Phase 1 框架规划(访谈、标题提议、生成双语 framework) | 中文对话 + 英文框架内容 |
| dr-pm | primary | Sonnet 4.6 | Phase 2 调度,批次间 context 压缩 | English |
| dr-chief-editor | primary | Gemini 3.1 Pro Preview | **Phase 3 only**:只读审校,产出 critique.md | English |
| **dr-editor-in-chief** | primary | **Opus 4.7** | **Phase 4 主导**:合并 final_en、写 Executive Summary/Abstract/Glossary、调度后续 | English |
| dr-searcher | subagent | Haiku 4.5 | 轻量检索、信源发现 | English |
| dr-analyst | subagent | Sonnet 4.6 | 章节深研(英文草稿 + 证据矩阵) | English |
| dr-verifier | subagent | GPT-5.4 | 交叉模型反方验证(唯一非 Claude 位置) | English |
| **dr-translator** | subagent | **Sonnet 4.6** | Phase 4 英译中,维护双语术语表 | 英→中 |
| dr-polisher | subagent | Sonnet 4.6 | Phase 4 中文润色、humanizer-cn + output-hygiene | 中文 |
| dr-reporter | subagent | Sonnet 4.6 | Phase 4 出稿(PDF+DOCX),**强制回填 citations** | 纯执行 |
**关键角色变化(v0.5**
- dr-chief-editor 从"Phase 3/4 总编"收窄为"Phase 3 only 只读审校"
- 新增 dr-editor-in-chiefOpus)接管 Phase 4 主导权(避免 Gemini 导致的风格断裂)
- 新增 dr-translator 专职英译中(工作流改为英文工作 + 最后翻译)
---
## 6. 模型 Slug 映射表(已确认,基于 zenmux `/api/v1/models` 实时返回,2026-04-20
> 任何时候要查真实可用列表:
> ```bash
> curl -sS "https://zenmux.ai/api/v1/models" -H "Authorization: Bearer $ZENMUX_API_KEY" | jq '.data[].id'
> ```
### 6.1 Provider 架构
OpenCode 的自定义 provider `npm` 字段**只支持 `@ai-sdk/openai-compatible`**,不支持 `@ai-sdk/anthropic`。因此所有模型统一走 `zenmux` 的 OpenAI 兼容端点(`https://zenmux.ai/api/v1`),slug 带 vendor 前缀。
zenmux 的 OpenAI 兼容端点同样支持 `cache_control` 透传,由 zenmux 后端处理,cache 行为与官方 Anthropic API 一致。
### 6.2 Claude 系列(走 `zenmux`slug 带 `anthropic/` 前缀)
| 角色 | 模型 | 完整 model 字段 | 上下文 |
|---|---|---|---|
| dr-plan | Claude Opus 4.7 | `zenmux-anthropic/claude-opus-4-7` | **1M** |
| dr-pm | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4-6` | **1M** |
| dr-analyst | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4-6` | 1M |
| dr-polisher | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4-6` | 1M |
| dr-reporter | Claude Sonnet 4.6 | `zenmux-anthropic/claude-sonnet-4-6` | 1M |
| dr-searcher | Claude Haiku 4.5 | `zenmux-anthropic/claude-haiku-4-5` | 200K |
备用:Opus 4-7 → 4-6Sonnet 4-6 → 4-5
**注意**zenmux Anthropic 端点模型名用连字符(`4-7`),不用点(`4.7`)。baseURL 为 `https://zenmux.ai/api/anthropic/v1`
### 6.3 非 Claude 系列(同样走 `zenmux`
| 角色 | 模型 | 完整 model 字段 | 上下文 | 备注 |
|---|---|---|---|---|
| dr-chief-editor | **Gemini 3.1 Pro Preview** | `zenmux/google/gemini-3.1-pro-preview` | 1M | 总编终审首选 |
| dr-chief-editor(备用) | Gemini 2.5 Pro | `zenmux/google/gemini-2.5-pro` | 1M | |
| dr-verifier(首选) | **GPT-5.4** | `zenmux/openai/gpt-5.4` | 1.05M | 交叉模型(非 Claude |
| dr-verifier(备用 A | Qwen3.6 Plus | `zenmux/qwen/qwen3.6-plus` | 1M | 中文研究强 |
| dr-verifier(备用 B | MiniMax M2.7 | `zenmux/minimax/minimax-m2.7` | 204K | 低成本交叉 |
| dr-verifier(备用 C | Kimi K2.5 | `zenmux/moonshotai/kimi-k2.5` | 262K | 长上下文交叉 |
| 可选(低成本推理) | DeepSeek V3.2 Thinking | `zenmux/deepseek/deepseek-reasoner` | 128K | 极低成本 |
| 可选(国产强模型) | GLM 5.1 | `zenmux/z-ai/glm-5.1` | 200K | |
### 6.4 Prompt Cache 使用要点(Claude 必读)
ZenMux 的 Anthropic 端点完整支持 4 种 cache 模式:
1. **系统提示缓存**(最常见):在 system 的最后一段加 `cache_control: {"type": "ephemeral"}` 断点
2. **工具定义缓存**:在 tools 数组最后一个工具上加断点,所有工具一起缓存
3. **对话历史缓存**:在每轮最后一条消息加断点,自动找最长前缀匹配
4. **多断点组合**:最多 4 个断点,用于工具/系统/RAG/对话分别缓存
**最低 token 要求**
- Opus 4.x / Sonnet 4.x:≥ 1024 tokens 才会建缓存
- Haiku 4.5:≥ 2048 tokens
**TTL**:默认 5 分钟;可指定 `"ttl": "1h"` 延长到 1 小时(写入成本 2×,读取便宜 10%)。
**OpenCode 行为**`@ai-sdk/anthropic` 包会自动对长 system prompt / 工具定义打 cache_control 断点,**你不需要手动加参数**。验证方法:在 zenmux 后台 Logs 里看 `cache_creation_input_tokens``cache_read_input_tokens` 字段。
**Opus 4.7 定价参考**(截至 2026-04-20):
- 输入:25 USD/M tokens
- cache 写入(5min):6.25 USD/M
- cache 写入(1h):10 USD/M
- **cache 读取****0.5 USD/M**(只有原价 2%!)
所以只要 cache 命中,成本可压到无 cache 的 5-10% 量级。
### 6.5 如何验证 cache 生效
1. 在 zenmux 后台 https://zenmux.ai/settings/logs 开启 **API Call Logging** 开关
2. 启动 opencode,跑 `/dr-frame` 让 dr-plan 连续两次调用
3. 第一次调用 Logs 应显示 `cache_creation_input_tokens > 0`
4. 第二次调用(5 分钟内)应显示 `cache_read_input_tokens > 0`,费用大幅下降
5. 如果 cache 字段始终为 0,说明没走 Anthropic 端点,回查 agent 的 `model:` 字段是否正确用了 `zenmux-anthropic/` 前缀
6. 本项目提供 `scripts/verify-zenmux.sh` 一键自检
### 6.6 模型白名单位置
所有可用模型已列入 `.opencode/opencode.json``provider.zenmux.models``provider.zenmux-anthropic.models`。增删模型时**两处都要更新**
- opencode.json 决定 `/models` 下拉列表
- AGENTS.md 本节决定角色→模型的分配逻辑
### 6.7 模型升级流程
zenmux 新模型上线后,更新顺序:
1. `curl zenmux /api/v1/models` 确认 slug
2. 更新 `.opencode/opencode.json` 的 models 段
3. 更新 AGENTS.md §6.2 / §6.3 角色映射表
4. 更新 `.opencode/agents/*.md``model:` 字段
5. 运行 `bash scripts/verify-zenmux.sh` 验证
6. 更新 PLAN.md §12 变更记录
---
## 7. 目录约定
- 每个研究主题放在 `projects/<topic-slug>/`slug 用小写+连字符,如 `glp1-r-agonist-market-2026`
- 所有中间产物(drafts、evidence、sources.jsonl)均为 Markdown 或 JSONL,便于 diff 与版本控制
- `archive/` 存放已完成或废弃的研究,不再主动维护
---
## 8. 安全与权限
- API 密钥**只存** `secrets.env`(已入 gitignore),禁止硬编码到任何 agent/skill/command
- 字体文件(~140MB)不入 git,通过 `download-fonts.sh` 获取
- `bash` 权限默认 `ask`,仅允许 `python *` / `pandoc *` / `ls *` / `cat *` / `curl *` 自动执行
---
## 9. 如何判断 subagent 是否真正被独立调度(验证锚点)
用户提到过"多 agent 实际上是主模型跑到底"的坑。验证方法:
1. **TUI 内**`<Leader>+Right` 能切入独立子会话,若没有说明没真正调度
2. **日志**`opencode --print-logs` 会显示每次 Task 工具调用,附带 agent 名和模型 ID
3. **token 使用**`/stats` 里可以看到按 agent 分的 token 消耗,Haiku 应远多于 Opus
如果发现某个 agent 没有真正被调度,检查:
- 命令 frontmatter 是否有 `subtask: true`
- 主 agent 的 `permission.task` 是否允许目标 subagent
- 目标 subagent 的 `mode` 是否是 `subagent`
---
## 10. 禁止事项(negative instructions
所有 agent 均禁止:
1. ❌ 引用 Wikipedia 作为结论支撑(仅做术语理解)
2. ❌ 在缺乏 2 个独立信源时仍给出绝对化结论
3. ❌ 使用"据报道""有专家认为"等未指明来源的表述
4. ❌ 编造或虚构数据、URL、DOI
5. ❌ 写空洞的套话("随着科技的发展""在大数据时代"
6. ❌ 忽略反方观点,只收集支持证据
7. ❌ 对输出字数"打折"(综述 <10000 字、研究 <30000 字必须返工)
8. ❌ 在正文中使用未在术语表中定义的专业缩写(首次出现需全称+缩写)
---
## 11. 变更管理
- 本文件与 `PLAN.md` 是**双核**:PLAN.md 管实施进度与架构,AGENTS.md 管运行时规则
- 修改本文件需同步更新 PLAN.md 的"变更记录"段
- 所有 agent/skill 新增或重大调整必须在 PLAN.md §8 清单中标记完成状态