v0.20 alpha skill-driven python core
This commit is contained in:
@@ -1,120 +1,26 @@
|
||||
---
|
||||
description: Phase 4 - 成稿(v0.12)。dr-editor-in-chief 写 ES/Abstract/Glossary,然后调统一 Python pipeline(phase4_pipeline.py)。用法:/dr-finalize [slug]
|
||||
description: Phase 4 - v0.20 中文原生成稿。用法:/dr-finalize [slug]
|
||||
agent: dr-editor-in-chief
|
||||
---
|
||||
|
||||
你是 dr-editor-in-chief。用户执行了 `/dr-finalize $ARGUMENTS`,进入 Phase 4 成稿链路(v0.12 架构)。
|
||||
你是 OpenCode 表层接口。v0.20 默认不走英译中链路。
|
||||
|
||||
## 架构变更说明(v0.12)
|
||||
|
||||
**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
|
||||
- 空:取最近项目
|
||||
|
||||
读取 `projects/<slug>/manifest.json`:
|
||||
- `phase2.status == "completed"`
|
||||
- `phase3.approved == true`(如跳过审校,询问用户确认)
|
||||
|
||||
## Step 2: 合并英文稿 + 原创写作(LLM 工作)
|
||||
|
||||
加载 skills:`mckinsey-method` / `output-hygiene` / `length-budget`。
|
||||
|
||||
按 `.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.]`
|
||||
|
||||
**禁止**:
|
||||
- 改写 dr-analyst 写好的章节正文
|
||||
- 给每章强加 SCQA 或小节标题
|
||||
- 保留调度元数据(字数配额/研究员/quota 等)
|
||||
|
||||
## Step 3: 执行统一 Phase 4 pipeline(Python 脚本)
|
||||
运行项目自有 Python core:
|
||||
|
||||
```bash
|
||||
uv run python scripts/phase4_pipeline.py <slug>
|
||||
uv run python scripts/dr.py finalize $ARGUMENTS
|
||||
```
|
||||
|
||||
默认行为:
|
||||
- 自动估算 translate / polish 并发
|
||||
- glossary 仅核查低置信度术语(`--glossary-mode low-confidence`)
|
||||
- 统一串联 translate → glossary(optional) → apply_glossary → polish → build_report
|
||||
|
||||
可选参数示例:
|
||||
如果用户明确要求兼容旧项目的 `final_en.md -> translate -> polish` 链路,才使用:
|
||||
|
||||
```bash
|
||||
uv run python scripts/phase4_pipeline.py <slug> --glossary-mode full
|
||||
uv run python scripts/phase4_pipeline.py <slug> --glossary-mode off
|
||||
uv run python scripts/dr.py finalize $ARGUMENTS --legacy-translate
|
||||
```
|
||||
|
||||
完成条件:`phase4/final_zh_polished.md`、PDF、DOCX 全部生成,且无致命报错。
|
||||
如需 Quarto/xelatex:
|
||||
|
||||
## Step 4: (可选)分步重跑
|
||||
|
||||
当你只想重跑单环节时,仍可手动调用:
|
||||
- `translate.py`
|
||||
- `build_glossary.py`
|
||||
- `apply_glossary.py`
|
||||
- `polish.py`
|
||||
- `build_report.py`
|
||||
|
||||
自动:
|
||||
- 按 `manifest.report_title` 命名输出(`<Title>.pdf` + `<Title>.docx`)
|
||||
- PDF 自动插 TOC + 从 `phase2/sources.jsonl` 生成参考文献
|
||||
|
||||
## Step 5: 更新 manifest
|
||||
|
||||
```json
|
||||
{
|
||||
"phase4": {
|
||||
"status": "completed",
|
||||
"started_at": "...",
|
||||
"completed_at": "...",
|
||||
"word_count_en": X,
|
||||
"word_count_zh": X,
|
||||
"glossary_terms": X,
|
||||
"glossary_corrections_applied": X,
|
||||
"pages_pdf": X,
|
||||
"files": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
}
|
||||
```bash
|
||||
uv run python scripts/dr.py finalize $ARGUMENTS --report-engine quarto
|
||||
```
|
||||
|
||||
## Step 6: 汇报
|
||||
|
||||
向用户展示:
|
||||
- 各阶段耗时和成本
|
||||
- glossary 核查发现的问题数 + 自动修复数
|
||||
- PDF 页数 / 文件大小
|
||||
- 如有 low-confidence 术语,提示人工复核
|
||||
|
||||
## 失败处理
|
||||
|
||||
- translate.py 中断:直接重跑(断点续传)
|
||||
- build_glossary 大量失败:通常是代理/网络问题,降 workers 到 3 重跑
|
||||
- polish.py 某块失败:用 `--only N,M` 单独重跑
|
||||
- build_report 参考文献缺失:查看 warning 列表,补 sources.jsonl
|
||||
|
||||
## 关键提示(不变)
|
||||
|
||||
- **不要给每章强加 SCQA**(v0.4 老问题)
|
||||
- **元数据清理是合并阶段的事**,不要把章节 frontmatter 或 quota 带进 final_en.md
|
||||
- **Exa 在 macOS + Clash socks 代理下需要 `trust_env=False`**(已在 SearchClient 处理)
|
||||
不要在 OpenCode 会话中手工翻译整篇报告;只调用 Python CLI 并汇报输出文件、引用检查风险和 PDF/DOCX 路径。
|
||||
|
||||
@@ -1,216 +1,13 @@
|
||||
---
|
||||
description: Phase 1 - 触发 dr-plan 进行深度初扫并生成双语研究框架(中文大纲 + 英文研究思路)。完成后暂停等用户确认。用法:/dr-frame [slug]
|
||||
description: Phase 1 生成研究框架。薄封装:调用 Python core。用法:/dr-frame <slug-or-path> [--method ... --chapters ...]
|
||||
agent: dr-plan
|
||||
subtask: false
|
||||
---
|
||||
|
||||
你是 dr-plan。用户执行了 `/dr-frame $ARGUMENTS`,驱动 Phase 1 的框架规划。
|
||||
执行 Python core 框架入口:
|
||||
|
||||
## Step 1: 定位项目
|
||||
|
||||
- 如果 `$ARGUMENTS` 非空:用该 slug
|
||||
- 为空:`ls -t projects/*/manifest.json | head -1` 找最近项目
|
||||
- 项目不存在:报错"请先 /dr-init 初始化项目"
|
||||
|
||||
## Step 2: 前置检查
|
||||
|
||||
- `phase1.status` 必须是 `interview_done`
|
||||
- `target_words_zh` 和 `target_words_en` 必须都存在
|
||||
- `core_questions` 必须非空
|
||||
- `report_title` 必须非空(v0.5 新增检查)
|
||||
- `model_profile` 必须存在(v0.12 新增检查,确保全流程模型策略一致)
|
||||
|
||||
任一检查不通过 → 回报用户"访谈不完整",停止。
|
||||
|
||||
## Step 3: 加载 Skills
|
||||
|
||||
必读:
|
||||
1. `search-strategy` — 检索策略
|
||||
2. `source-quality` — 信源评级
|
||||
3. `length-budget` — 字数配额(用英文词数为基准)
|
||||
4. `mckinsey-method` — 结构方法论
|
||||
5. `humanizer-cn` — 避免 AI 套路
|
||||
|
||||
## Step 4: 并行初扫(委派 dr-searcher)
|
||||
|
||||
把主题拆成 3-4 个互补的关键词组,每组一个 dr-searcher Task。
|
||||
|
||||
**在同一条消息里发多个 Task 调用**(并行),不要串行等。
|
||||
|
||||
关键词组示例(以 "自研 O-糖苷酶立项" 为例):
|
||||
- 组 A:Scientific mechanism (GH101 family, endoglycosidase mechanism, Core 1/3 activity)
|
||||
- 组 B:Clinical and regulatory (FDA/NMPA disclosures, clinical trial registries)
|
||||
- 组 C:Market and competition (market size, CAGR, competitor analysis)
|
||||
- 组 D:IP and supply chain (USPTO/EPO patents, CDMO capacity, supply risks)
|
||||
|
||||
Task 模板:
|
||||
|
||||
```
|
||||
description: "Initial scan keyword group A - <category>"
|
||||
prompt: |
|
||||
You are dr-searcher. Conduct Phase 1 initial scan for the topic "<topic>", focus area: <category>.
|
||||
|
||||
Required skills: search-strategy, source-quality
|
||||
|
||||
Tasks:
|
||||
1. 3 rounds of search through `scripts/search.py`: scholar/patents/news/general as appropriate; Tavily/Brave/Exa MCP only as gap-fill
|
||||
2. Both English and Chinese keywords
|
||||
3. Return 10-20 Tier 1-2 sources (score ≥6), exclude Tier 4 and blacklist
|
||||
4. 1-2 sentence outline per source
|
||||
5. 200-word summary of this direction's core findings (in English)
|
||||
|
||||
Output format (Markdown):
|
||||
## Keyword Group <A>: <category>
|
||||
### Keywords Used
|
||||
- English: ...
|
||||
- Chinese: ...
|
||||
- Routes used: scholar / patents / news / general
|
||||
### Initial Sources (≥10, Tier 1-2)
|
||||
1. [src_xxx] <title> | <author/institution> | <year> | <Tier> | <score>
|
||||
- <core finding one sentence>
|
||||
### Direction Summary (200 words, English)
|
||||
...
|
||||
|
||||
Return as markdown directly, don't write to files.
|
||||
```bash
|
||||
uv run python scripts/dr.py frame $ARGUMENTS
|
||||
```
|
||||
|
||||
**硬限制**:一次性并行发 3-4 个 Task,不要分批。
|
||||
|
||||
## Step 5: 汇总初扫结果
|
||||
|
||||
收到 3-4 个 dr-searcher 返回后:
|
||||
1. 汇总到 `projects/<slug>/phase1/initial-scan.md`(中英双语,按组分节)
|
||||
2. 去重
|
||||
3. 按 score 排序
|
||||
|
||||
## Step 6: 生成双语框架(v0.5 关键升级)
|
||||
|
||||
基于初扫结果,生成 `projects/<slug>/phase1/framework.md`。
|
||||
|
||||
**结构**:
|
||||
- **顶部元信息**:中文摘要(研究类型、目标字数、核心问题等)
|
||||
- **全局论点 Central Thesis**:一句话中英双语
|
||||
- **章节大纲**:
|
||||
- 每章用**双语标题**(中文标题 + 英文标题)
|
||||
- 字数配额按英文词数(en_words),括号里附中文字数预估
|
||||
- 每节的研究思路用英文写(因为 Phase 2 dr-analyst 用英文工作)
|
||||
- **替代框架**:至少 2 个备选切法
|
||||
|
||||
### framework.md 模板
|
||||
|
||||
```markdown
|
||||
# <报告主标题>
|
||||
|
||||
**副标题**:<报告副标题>
|
||||
|
||||
## 元信息
|
||||
- 研究类型:<type>
|
||||
- 字数模式:<word_budget_mode>
|
||||
- 目标字数:<target_words_en> EN / <target_words_zh> ZH
|
||||
- 核心受众:<audience>
|
||||
- 时间范围:<time_range>
|
||||
- 地理范围:<geography>
|
||||
- 核心问题(中文):
|
||||
1. ...
|
||||
2. ...
|
||||
- Core Questions (English):
|
||||
1. ...
|
||||
2. ...
|
||||
- 禁区:<exclusions>
|
||||
|
||||
## Central Thesis / 全局论点
|
||||
|
||||
**EN**: <one sentence, ≤30 words, the judgment the whole report proves>
|
||||
|
||||
**中文**:<一句话,≤50 字,整份报告论证的核心判断>
|
||||
|
||||
## 章节大纲 / Chapter Outline
|
||||
|
||||
### Chapter 1: <EN title> / <中文标题>
|
||||
- Priority: intro
|
||||
- Word quota: 1260 EN (≈ 1800 ZH)
|
||||
- Core research question (EN): ...
|
||||
- Preliminary hypothesis (EN): ...
|
||||
- Expected sources: ...
|
||||
- **1.1** <EN section title> / <中文>
|
||||
- Research thinking (EN): ...
|
||||
- **1.2** <EN section title> / <中文>
|
||||
- Research thinking (EN): ...
|
||||
|
||||
### Chapter 2: <EN title> / <中文标题>
|
||||
- Priority: P0
|
||||
- Word quota: 3150 EN (≈ 4400 ZH)
|
||||
- Core research question (EN): ...
|
||||
- **2.1** <...>
|
||||
...
|
||||
|
||||
## 替代框架 / Alternative Frameworks
|
||||
|
||||
> 如果用户不接受主方案:
|
||||
|
||||
### Alternative A: 按技术路线组织 (Technology-path organization)
|
||||
<3-5 章大纲,双语简述>
|
||||
|
||||
### Alternative B: 按竞争对象分章 (Competitor-focused organization)
|
||||
<3-5 章大纲,双语简述>
|
||||
|
||||
## 预计风险与依赖
|
||||
- 关键信源可获取性风险
|
||||
- 哪些章节可能因数据缺失降级
|
||||
```
|
||||
|
||||
## Step 7: 更新 manifest
|
||||
|
||||
```json
|
||||
{
|
||||
"phase1": {
|
||||
"status": "framework_generated",
|
||||
"framework_path": "projects/<slug>/phase1/framework.md",
|
||||
"chapter_count": N,
|
||||
"chapter_quotas_en": [
|
||||
{"index": 1, "title_en": "...", "title_zh": "...", "en_words": 1260, "priority": "intro"},
|
||||
{"index": 2, "title_en": "...", "title_zh": "...", "en_words": 3150, "priority": "P0"}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Step 8: 暂停等确认
|
||||
|
||||
告知用户:
|
||||
|
||||
```
|
||||
Phase 1 框架已生成:projects/<slug>/phase1/framework.md
|
||||
|
||||
摘要:
|
||||
- 报告主标题:<report_title>
|
||||
- 副标题:<report_subtitle>
|
||||
- 目标:<target_words_en> EN words / <target_words_zh> 中文字
|
||||
- 章节数:N
|
||||
- 全局论点:<Central Thesis EN/中文>
|
||||
- 替代框架:2 个
|
||||
|
||||
请审核 framework.md,然后:
|
||||
✅ 满意 → 回复"确认框架"
|
||||
✏️ 修改 → 告诉我改什么(如"第 5 章要拆成机制和临床两块")
|
||||
🔄 换视角 → 切换到备选框架 A 或 B
|
||||
```
|
||||
|
||||
**停下来等用户反馈**。
|
||||
|
||||
## 用户确认后
|
||||
|
||||
如果用户回复"确认框架":
|
||||
1. 更新 `manifest.phase1.approved = true`
|
||||
2. 更新 `manifest.phase1.approved_at = <ISO 时间>`
|
||||
3. 告知:"Phase 1 完成。下一步:/dr-research 进入 Phase 2 英文深研。"
|
||||
|
||||
---
|
||||
|
||||
## 禁止事项
|
||||
|
||||
- ❌ 跳过 Step 4 的并行初扫直接凭经验写框架
|
||||
- ❌ 一次委派 > 4 个 searcher(API 限流)
|
||||
- ❌ 写完 framework 就自动跑 /dr-research
|
||||
- ❌ framework 中用中文写研究思路(Phase 2 是英文工作,研究思路也用英文写)
|
||||
- ❌ 章节标题不给双语对照
|
||||
完成后暂停,请用户审阅 `phase1/framework.md`,确认后再进入 `/dr-research`。
|
||||
|
||||
@@ -1,170 +1,13 @@
|
||||
---
|
||||
description: 初始化一个新的 Deep Research 主题。创建 projects/<slug>/ 目录与 manifest.json,启动 Phase 1 访谈(9 步,含模型策略选择),访谈末尾自动提议 3 个报告标题让用户选。用法:/dr-init <研究主题>
|
||||
description: 初始化 Deep Research 项目。薄封装:调用 Python core,不在 OpenCode prompt 中承担核心逻辑。用法:/dr-init <topic> [--slug ... --method ...]
|
||||
agent: dr-plan
|
||||
subtask: false
|
||||
---
|
||||
|
||||
你是 dr-plan。用户刚刚执行了 `/dr-init $ARGUMENTS`,启动一个新的生物医药 Deep Research 项目。
|
||||
|
||||
## 执行步骤
|
||||
|
||||
### Step 1: 解析主题并生成 slug
|
||||
|
||||
- 用户输入的主题:`$ARGUMENTS`
|
||||
- 生成 slug 规则:
|
||||
- 英文小写+连字符
|
||||
- 包含关键词 + 年份
|
||||
- 例:`GLP-1 减重药物市场` → `glp1-obesity-market-2026`
|
||||
- 例:`中国 CAR-T 产业链` → `china-car-t-industry-2026`
|
||||
- 检查 `projects/<slug>/` 是否已存在
|
||||
- 存在且非空:追问用户是否覆盖或换名
|
||||
- 不存在:继续
|
||||
|
||||
### Step 2: 创建目录骨架
|
||||
执行 Python core 初始化入口:
|
||||
|
||||
```bash
|
||||
mkdir -p projects/<slug>/{phase1,phase2/drafts,phase2/evidence,phase3/revisions,phase4/figures}
|
||||
uv run python scripts/dr.py init $ARGUMENTS
|
||||
```
|
||||
|
||||
### Step 3: 启动访谈(9 步)
|
||||
|
||||
**不要急着生成 framework**,向用户清晰编号地提出以下 8 个关键问题:
|
||||
|
||||
1. **研究类型**:
|
||||
- 综述类(默认 ≥10,000字)
|
||||
- 研究类(默认 ≥30,000字)
|
||||
- 投资报告(默认 ≥20,000字)
|
||||
- 管理工艺类(默认 ≥15,000字)
|
||||
|
||||
2. **核心受众**:投资人 / 管理层 / 研发团队 / 监管 / 混合?
|
||||
|
||||
3. **时间范围**:近 3 年 / 近 5 年 / 近 10 年 / 历史全量?
|
||||
|
||||
4. **地理范围**:全球 / 中国 / 美国 / 欧洲 / 其他具体地区?
|
||||
|
||||
5. **必须回答的核心问题**(3-5 条,越具体越好):
|
||||
|
||||
6. **竞争/对比对象**(如适用):具体公司、药物、技术路线?
|
||||
|
||||
7. **禁区**:有没有明确不想涉及的方向?
|
||||
|
||||
8. **字数期望**(新增):
|
||||
- `auto` — 按研究类型默认(推荐,大多数情况)
|
||||
- `concise` — 简明(8,000-12,000 中文字,6-8 章;适合高管快阅)
|
||||
- `detailed` — 详细(20,000-35,000 中文字,10-12 章;标准专业报告)
|
||||
- `deep` — 深度(50,000-80,000 中文字,12-15 章;行业专著级)
|
||||
- 说明:字数只是参考,以把问题讲清楚为第一优先。
|
||||
|
||||
9. **模型策略选择(新增,必须在 init 阶段确定)**:
|
||||
- `simple`:低成本探索
|
||||
- `medium`:默认推荐(平衡质量/成本)
|
||||
- `premium`:高质量正式交付
|
||||
- `cn_heavy`:中文/中国市场侧重
|
||||
- `codex_native`:Codex 原生模式
|
||||
|
||||
**等待用户回答**。用户可能一次性回答也可能分多轮。
|
||||
|
||||
### Step 4: 提议报告正式标题(关键新增步骤)
|
||||
|
||||
用户答完前 8 个问题后,基于他们的回答提议 3 个候选标题供选择。
|
||||
|
||||
**命名范式**(参考 9MW1911 综合战略报告):
|
||||
- 主标题:精炼、有分量、体现报告定位(如"XX综合战略报告"、"XX立项可行性研究报告"、"XX市场深度研究报告")
|
||||
- 副标题:说明具体研究对象和视角(如"全球视角下抗 ST2 单克隆抗体在慢阻肺治疗领域的战略定位")
|
||||
|
||||
示例对话:
|
||||
|
||||
> 根据你的回答,我为本报告提议以下 3 个候选标题:
|
||||
>
|
||||
> **候选 A(推荐)**
|
||||
> 主标题:自研 O-糖苷酶立项可行性研究报告
|
||||
> 副标题:对标 NEB 与 Merck 经典产品的技术路径、IP 壁垒与差异化战略
|
||||
>
|
||||
> **候选 B**
|
||||
> 主标题:GH101 家族酶国产化战略研究
|
||||
> 副标题:从 E. faecalis / S. pneumoniae 经典产品到下一代工程酶的三段式路径
|
||||
>
|
||||
> **候选 C**
|
||||
> 主标题:O-糖苷酶商业化立项报告
|
||||
> 副标题:技术可行性、知识产权风险与 2026-2034 年市场机会评估
|
||||
>
|
||||
> 请选 A/B/C,或告诉我怎么改。
|
||||
|
||||
### Step 5: 创建 manifest.json
|
||||
|
||||
用户确认标题后,创建 `projects/<slug>/manifest.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"slug": "<slug>",
|
||||
"topic": "<用户输入的完整主题>",
|
||||
"report_title": "<用户选定的主标题>",
|
||||
"report_subtitle": "<用户选定的副标题>",
|
||||
"author": "Deep Research 系统",
|
||||
"date": "<今天 YYYY-MM-DD>",
|
||||
"version": "1.0",
|
||||
"type": "<综述/研究/投资/管理>",
|
||||
"confidentiality": "机密 | 仅供内部决策使用",
|
||||
"audience": "<受众>",
|
||||
"time_range": "<时间范围>",
|
||||
"geography": "<地理范围>",
|
||||
"core_questions": ["...", "..."],
|
||||
"comparison_targets": [],
|
||||
"exclusions": [],
|
||||
"word_budget_mode": "<auto/concise/detailed/deep>",
|
||||
"model_profile": "<simple/medium/premium/cn_heavy/codex_native>",
|
||||
"model_profile_selected_at": "<今天 YYYY-MM-DD>",
|
||||
"model_profile_source": "dr-init interview",
|
||||
"target_words_zh": <按类型和模式计算,见 length-budget skill §1-2>,
|
||||
"target_words_en": <target_words_zh / 1.4>,
|
||||
"min_words_zh": <target_words_zh × 0.8>,
|
||||
"min_words_en": <min_words_zh / 1.4>,
|
||||
"disclaimer": "本报告基于公开信息与 AI 辅助研究生成,仅供参考,不构成投资或医疗建议。",
|
||||
"work_language": "en",
|
||||
"output_language": "zh",
|
||||
"phase1": {"status": "interview_done", "approved": false},
|
||||
"phase2": {"status": "pending"},
|
||||
"phase3": {"status": "pending"},
|
||||
"phase4": {"status": "pending"}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 6: 记录访谈
|
||||
|
||||
把整个访谈对话写入 `projects/<slug>/phase1/interview.md`(用户原话 + 你的提问 + 提议的候选标题 + 用户选择)。
|
||||
|
||||
### Step 6.5: 立刻应用模型策略(必须执行)
|
||||
|
||||
在项目初始化完成后,立即把 `model_profile` 应用到 agent 文件(OpenCode + Codex 模板):
|
||||
|
||||
```bash
|
||||
uv run python scripts/dr.py apply-models --profile <model_profile> --target both
|
||||
```
|
||||
|
||||
这样可以确保从 Phase 1(plan)到 Phase 4(polisher/reporter)全流程使用同一套预设策略,而不是中途切换。
|
||||
|
||||
### Step 7: 回报
|
||||
|
||||
```
|
||||
项目已初始化:projects/<slug>/
|
||||
|
||||
报告标题:<主标题>
|
||||
副标题:<副标题>
|
||||
类型:<研究类型>
|
||||
字数目标:<中文字数> 字 / <英文词数> words
|
||||
工作语言:English(Phase 2-3)
|
||||
输出语言:中文(Phase 4 翻译)
|
||||
|
||||
下一步:运行 /dr-frame 触发 Phase 1 框架规划(双语大纲)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
- ❌ 不要在本命令里做联网搜索或生成 framework(那是 /dr-frame 的工作)
|
||||
- ❌ 不要自己猜研究边界,必须让用户明确
|
||||
- ❌ slug 不要包含中文、空格、下划线
|
||||
- ✅ Step 4 的报告标题是 v0.5 新增的关键步骤,不可跳过
|
||||
- ✅ Step 8 的字数期望是 v0.5 新增的参数,帮助用户控制报告规模
|
||||
- ✅ 如果用户主题过于模糊(如"生物医药"),追问细化后再创建目录
|
||||
完成后暂停,下一步运行 `/dr-frame <slug>` 生成 `phase1/framework.md`。
|
||||
|
||||
@@ -1,117 +1,44 @@
|
||||
---
|
||||
description: Phase 2 - 并行深度研究所有章节。读取 Phase 1 确认的框架,按批次调度 dr-analyst 深研 + dr-verifier 反方验证,自动字数核验。用法:/dr-research [slug]
|
||||
description: Phase 2 - v0.20 Python core task-card research. 用法:/dr-research [slug]
|
||||
agent: dr-pm
|
||||
---
|
||||
|
||||
你是 dr-pm。用户执行了 `/dr-research $ARGUMENTS`,需要驱动 Phase 2 完整执行。
|
||||
你是 OpenCode 表层接口。不要自行 spawn subagents,也不要在本会话里执行章节研究。
|
||||
|
||||
## Step 1: 定位项目
|
||||
运行项目自有 Python core:
|
||||
|
||||
- `$ARGUMENTS` 非空:用该 slug
|
||||
- 为空:`ls -t projects/*/manifest.json` 取最近的
|
||||
|
||||
读取 `projects/<slug>/manifest.json`。
|
||||
|
||||
## Step 2: 前置检查
|
||||
|
||||
验证以下字段,任何一项不通过则停止并告知用户:
|
||||
- `phase1.approved == true`(框架已确认)
|
||||
- `phase1.framework_path` 指向的文件存在
|
||||
- `phase2.status != "completed"`(避免重复跑)
|
||||
|
||||
如果 `phase2.status == "in_progress"`,询问用户是否从中断处继续还是重新开始。
|
||||
|
||||
## Step 3: 读取框架并规划批次
|
||||
|
||||
读取 framework.md,提取所有 chapter 的:
|
||||
- 编号、标题、字数配额
|
||||
- 各 section 研究思路
|
||||
|
||||
按以下规则分批(每批 3 章并行):
|
||||
- 字数配额 > 3000 字的章节单独成批
|
||||
- 有前后依赖关系的章节放在不同批次
|
||||
- 引言章(第 1 章)和结论章(最后 1 章)各自单独成批
|
||||
|
||||
更新 manifest.json:
|
||||
```json
|
||||
"phase2": {
|
||||
"status": "in_progress",
|
||||
"started_at": "<ISO时间>",
|
||||
"batches": [...],
|
||||
"chapters": [{"index": 1, "status": "pending", ...}, ...]
|
||||
}
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6
|
||||
```
|
||||
|
||||
## Step 4: 逐批执行
|
||||
生成真实证据包时显式开启模型 worker:
|
||||
|
||||
对每批中的每个章节,**并行**委派 dr-analyst:
|
||||
|
||||
```
|
||||
Task prompt 模板:
|
||||
你是 dr-analyst。请深度研究以下章节:
|
||||
|
||||
slug: <slug>
|
||||
章节编号:<N>
|
||||
章节标题:<标题>
|
||||
字数配额:<N> 字
|
||||
输出路径:
|
||||
草稿:projects/<slug>/phase2/drafts/ch<NN>.md
|
||||
证据:projects/<slug>/phase2/evidence/ch<NN>-evidence.md
|
||||
信源:projects/<slug>/phase2/sources.jsonl
|
||||
|
||||
研究思路(来自 framework.md):
|
||||
<粘贴该章的研究思路和 section 列表>
|
||||
|
||||
必须加载的 skill:search-strategy, source-quality, length-budget, evidence-table, mckinsey-method
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6 --execute-packets
|
||||
```
|
||||
|
||||
一批的所有 dr-analyst 完成后,对每章**串行**委派 dr-verifier:
|
||||
默认 scholar/news/patents 专用路由 strict 失败即停;如只是低成本试跑,可允许通用搜索兜底:
|
||||
|
||||
```
|
||||
Task prompt 模板:
|
||||
你是 dr-verifier。请对以下章节做反方验证:
|
||||
|
||||
草稿:projects/<slug>/phase2/drafts/ch<NN>.md
|
||||
证据:projects/<slug>/phase2/evidence/ch<NN>-evidence.md
|
||||
|
||||
必须加载的 skill:search-strategy, source-quality
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6 --execute-packets --allow-search-fallback
|
||||
```
|
||||
|
||||
每章完成后更新 manifest.json 的进度字段。
|
||||
将证据包收束为章节 brief,降低并发碎片化:
|
||||
|
||||
## Step 5: 字数核验与补写
|
||||
|
||||
每章 dr-analyst 返回后,读取草稿文件统计字数。如果实际字数 < 配额 × 0.7,自动再次委派 dr-analyst 补写,最多补写 2 次。
|
||||
|
||||
## Step 6: 汇总 sources.jsonl
|
||||
|
||||
所有章节完成后,对 `projects/<slug>/phase2/sources.jsonl` 做去重(按 url 字段)。
|
||||
|
||||
## Step 7: 更新 manifest 并汇报
|
||||
|
||||
```json
|
||||
"phase2": {
|
||||
"status": "completed",
|
||||
"completed_at": "<ISO时间>",
|
||||
"word_stats": {
|
||||
"total": <总字数>,
|
||||
"target": <目标字数>,
|
||||
"verdict": "合格/不足"
|
||||
}
|
||||
}
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6 --build-briefs
|
||||
```
|
||||
|
||||
告知用户:
|
||||
```
|
||||
Phase 2 完成
|
||||
生成中文章节草稿:
|
||||
|
||||
总字数:X 字 / 目标 X 字
|
||||
章节:X / X 完成
|
||||
总信源:X 条(Tier1: X, Tier2: X)
|
||||
待验证观点:X 条
|
||||
CRITICAL 反方证据:X 条
|
||||
|
||||
下一步:/dr-review 启动总编审校
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6 --assemble-chapters
|
||||
```
|
||||
|
||||
如总字数不足 min_words,告知用户并询问是否接受或指定某些章节补写。
|
||||
如用户只是想预览任务卡:
|
||||
|
||||
```bash
|
||||
uv run python scripts/dr.py research $ARGUMENTS --workers 6 --dry-run
|
||||
```
|
||||
|
||||
完成后只汇报 Python CLI 输出的关键路径:`phase2/task_cards.json`、`phase2/packets/*.json`、manifest 进度和下一步。
|
||||
|
||||
@@ -1,48 +1,13 @@
|
||||
---
|
||||
description: Phase 3 - 总编审校。用 Gemini 3.1 Pro 通读全部章节草稿,出具审校报告,暂停等用户决策。用法:/dr-review [slug]
|
||||
description: Phase 3 审校。薄封装:调用 Python core deterministic review。用法:/dr-review <slug-or-path>
|
||||
agent: dr-chief-editor
|
||||
subtask: false
|
||||
---
|
||||
|
||||
你是 dr-chief-editor。用户执行了 `/dr-review $ARGUMENTS`,需要对所有章节草稿做总编审校。
|
||||
执行 Python core 审校入口:
|
||||
|
||||
## Step 1: 定位项目
|
||||
|
||||
- `$ARGUMENTS` 非空:用该 slug
|
||||
- 为空:取最近的项目
|
||||
|
||||
验证:`phase2.status == "completed"`,否则告知用户先完成 `/dr-research`。
|
||||
|
||||
## Step 2: 执行审校
|
||||
|
||||
按照 dr-chief-editor.md 中的**模式 A:Phase 3 审校**工作流,通读所有草稿,出具审校报告。
|
||||
|
||||
审校报告写入 `projects/<slug>/phase3/critique.md`。
|
||||
|
||||
## Step 3: 暂停等待用户决策
|
||||
|
||||
审校报告完成后,向用户展示:
|
||||
1. 总体评级(A/B/C/D)
|
||||
2. 必须修正问题清单
|
||||
3. 字数审计表
|
||||
4. 明确的决策提示:
|
||||
|
||||
```
|
||||
审校完成,评级:<X>
|
||||
|
||||
请选择下一步:
|
||||
A/B 级:直接发 /dr-finalize 生成最终报告
|
||||
C 级:告诉我哪些章节需要回炉(我会重新研究那些章节)
|
||||
D 级:发 /dr-frame 重新规划框架
|
||||
```bash
|
||||
uv run python scripts/dr.py review $ARGUMENTS
|
||||
```
|
||||
|
||||
**不要自动进入 Phase 4,必须等用户明确指令。**
|
||||
|
||||
## 用户回复处理
|
||||
|
||||
如果用户说"直接 finalize"或类似:
|
||||
- 更新 `manifest.phase3.approved = true`
|
||||
- 告知用户发 `/dr-finalize`
|
||||
|
||||
如果用户指定某些章节回炉:
|
||||
- 将那些章节的 `phase2.chapters[i].status` 改为 `"needs_revision"`
|
||||
- 告知用户发 `/dr-research` 会只重跑这些章节
|
||||
完成后暂停,请用户审阅 `phase3/critique.md`,再决定回炉 Phase 2 或进入 `/dr-finalize`。
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
---
|
||||
description: v0.20 platform-neutral Python core runner. 用法:/dr-run [slug-or-topic]
|
||||
agent: dr-pm
|
||||
---
|
||||
|
||||
你是 OpenCode 表层接口。不要自行编排多 agent;核心调度由 Python runtime 负责。
|
||||
|
||||
运行:
|
||||
|
||||
```bash
|
||||
uv run python scripts/dr.py run $ARGUMENTS --workers 6
|
||||
```
|
||||
|
||||
如需预演:
|
||||
|
||||
```bash
|
||||
uv run python scripts/dr.py run $ARGUMENTS --workers 6 --dry-run
|
||||
```
|
||||
|
||||
只汇报 Python CLI 的阶段判断、产物路径和下一步。
|
||||
@@ -1,47 +1,12 @@
|
||||
---
|
||||
description: 查看当前研究项目的进度。用法:/dr-status [slug]
|
||||
description: 查看当前研究项目进度。用法:/dr-status [slug]
|
||||
agent: dr-pm
|
||||
---
|
||||
|
||||
你是 dr-pm。读取项目状态并输出清晰的进度报告。
|
||||
你是 OpenCode 表层接口。运行 Python core 状态命令:
|
||||
|
||||
## Step 1: 定位项目
|
||||
|
||||
- `$ARGUMENTS` 非空:读取 `projects/$ARGUMENTS/manifest.json`
|
||||
- 为空:
|
||||
- 如果 `projects/` 下有多个项目,列出所有项目及其状态让用户选择
|
||||
- 只有一个则直接读取
|
||||
|
||||
## Step 2: 输出状态报告
|
||||
|
||||
```
|
||||
项目:<topic>
|
||||
Slug:<slug>
|
||||
类型:<type> | 目标字数:<target_words> 字
|
||||
|
||||
阶段进度:
|
||||
Phase 1 框架规划:<pending/in_progress/completed/approved>
|
||||
框架文件:<存在/不存在>
|
||||
章节数:<N>
|
||||
|
||||
Phase 2 深度研究:<pending/in_progress/completed>
|
||||
章节完成:<X/N>
|
||||
当前批次:<X>(如进行中)
|
||||
已写字数:<X> 字
|
||||
信源数量:<X> 条
|
||||
|
||||
Phase 3 总编审校:<pending/in_progress/completed>
|
||||
审校评级:<A/B/C/D 或 未完成>
|
||||
待修正问题:<X> 条
|
||||
|
||||
Phase 4 成稿:<pending/completed>
|
||||
PDF:<存在/不存在>
|
||||
DOCX:<存在/不存在>
|
||||
|
||||
输出文件:
|
||||
<列出 projects/<slug>/ 下已存在的关键文件>
|
||||
```bash
|
||||
uv run python scripts/dr.py status $ARGUMENTS
|
||||
```
|
||||
|
||||
## 额外说明
|
||||
|
||||
如果某个 Phase 处于 in_progress 但看起来卡住了(started_at 超过 2 小时且无进展),提示用户可以重新运行对应命令继续。
|
||||
汇报阶段状态、task cards、packets、drafts、sources、final_zh/PDF/DOCX 等关键产物。
|
||||
|
||||
Reference in New Issue
Block a user