snapshot before v0.5 refactor
This commit is contained in:
@@ -0,0 +1,166 @@
|
||||
---
|
||||
name: citation-manager
|
||||
description: 引用管理规范。规定 [src_xxx] 编号体系、sources.jsonl 字段标准、跨章节去重规则、参考文献列表生成格式(GB/T 7714)。
|
||||
---
|
||||
|
||||
# 引用管理规范
|
||||
|
||||
## 一、src_id 编号规则
|
||||
|
||||
### 全局唯一编号
|
||||
|
||||
`src_id` 在整个项目内**全局唯一**,格式:`src_XXX`(3 位数字,不足补零)。
|
||||
|
||||
- 由 dr-analyst 在首次引用时分配
|
||||
- 按发现顺序递增:`src_001`, `src_002`, ...
|
||||
- 跨章节引用同一来源时,使用**相同 ID**
|
||||
|
||||
### 分配流程
|
||||
|
||||
1. dr-analyst 发现一条新信源
|
||||
2. 读取 `projects/<slug>/phase2/sources.jsonl`,找当前最大 ID
|
||||
3. 分配下一个 ID(如当前最大为 `src_023`,下一个为 `src_024`)
|
||||
4. 写入 sources.jsonl
|
||||
|
||||
### 草稿中的引用格式
|
||||
|
||||
行内引用:`数据或观点 [src_042]`
|
||||
|
||||
多来源:`数据或观点 [src_042][src_058]`
|
||||
|
||||
---
|
||||
|
||||
## 二、sources.jsonl 字段标准
|
||||
|
||||
每行一个 JSON 对象(JSONL 格式):
|
||||
|
||||
```jsonl
|
||||
{
|
||||
"id": "src_001",
|
||||
"tier": 1,
|
||||
"score": 8.5,
|
||||
"type": "journal",
|
||||
"title": "论文标题",
|
||||
"authors": ["Zhang S", "Li M"],
|
||||
"year": 2024,
|
||||
"venue": "Nature Medicine",
|
||||
"impact_factor": 58.7,
|
||||
"url": "https://doi.org/10.1038/...",
|
||||
"doi": "10.1038/...",
|
||||
"accessed_at": "2026-04-20",
|
||||
"abstract": "2-3句摘要",
|
||||
"key_data": {
|
||||
"sample_size": 1200,
|
||||
"primary_endpoint": "OS 改善 23%"
|
||||
},
|
||||
"used_in": ["ch02", "ch05.sec3"],
|
||||
"conflict_of_interest": null,
|
||||
"notes": "RCT 主要终点数据在 Table 2"
|
||||
}
|
||||
```
|
||||
|
||||
### type 字段枚举值
|
||||
|
||||
| 值 | 含义 |
|
||||
|---|---|
|
||||
| `journal` | 期刊论文(含综述) |
|
||||
| `trial` | 临床试验(ClinicalTrials.gov 注册信息) |
|
||||
| `regulatory` | 监管机构公告/审批文件 |
|
||||
| `patent` | 专利文件 |
|
||||
| `report` | 咨询/行业报告 |
|
||||
| `disclosure` | 上市公司披露(年报/招股书/SEC)|
|
||||
| `preprint` | 预印本(bioRxiv/medRxiv)|
|
||||
| `news` | 专业媒体报道(Tier 3 用) |
|
||||
|
||||
### 必填字段
|
||||
|
||||
`id`, `tier`, `score`, `type`, `title`, `year`, `url`(或 `doi`)
|
||||
|
||||
---
|
||||
|
||||
## 三、去重规则
|
||||
|
||||
dr-pm 在 Phase 2 结束时执行去重:
|
||||
|
||||
```python
|
||||
# 伪代码
|
||||
seen_urls = {}
|
||||
seen_dois = {}
|
||||
unique_sources = []
|
||||
|
||||
for source in all_sources:
|
||||
key = source.get("doi") or source.get("url")
|
||||
if key not in seen_urls:
|
||||
seen_urls[key] = True
|
||||
unique_sources.append(source)
|
||||
else:
|
||||
# 合并 used_in 字段
|
||||
existing = seen_urls[key]
|
||||
existing["used_in"] = list(set(existing["used_in"] + source["used_in"]))
|
||||
```
|
||||
|
||||
去重后,草稿文件里的 [src_xxx] 标注**不需要更改**,因为 ID 是全局分配的。
|
||||
|
||||
---
|
||||
|
||||
## 四、参考文献列表生成(GB/T 7714-2015)
|
||||
|
||||
dr-reporter 从 sources.jsonl 生成参考文献列表时,按以下格式:
|
||||
|
||||
### 期刊论文
|
||||
```
|
||||
[src_001] ZHANG S, LI M. 论文标题[J]. Nature Medicine, 2024, 30(5): 1234-1245. DOI: 10.1038/...
|
||||
```
|
||||
|
||||
### 报告/白皮书
|
||||
```
|
||||
[src_042] McKinsey & Company. 报告标题[R]. McKinsey Global Institute, 2024.
|
||||
```
|
||||
|
||||
### 监管文件
|
||||
```
|
||||
[src_018] FDA. NDA 申请审批公告[EB/OL]. (2024-03-15)[2026-04-20]. https://www.fda.gov/...
|
||||
```
|
||||
|
||||
### 临床试验
|
||||
```
|
||||
[src_055] ClinicalTrials.gov. 试验名称 (NCT12345678)[EB/OL]. (2023-01-01)[2026-04-20]. https://clinicaltrials.gov/...
|
||||
```
|
||||
|
||||
### 专利
|
||||
```
|
||||
[src_067] 发明人. 专利名称[P]. 专利号, 申请日.
|
||||
```
|
||||
|
||||
### 排序规则
|
||||
|
||||
参考文献按在正文中**首次出现的顺序**排列,即 [src_001] 在最前,以此类推。
|
||||
|
||||
---
|
||||
|
||||
## 五、引用完整性检查(dr-chief-editor 用)
|
||||
|
||||
审校时检查:
|
||||
1. 正文中所有 [src_xxx] 都在 sources.jsonl 里有对应记录
|
||||
2. sources.jsonl 里所有 ID 在正文中都有引用(无孤立信源)
|
||||
3. 所有 Tier 1 信源的 URL 或 DOI 格式正确
|
||||
|
||||
检查脚本(可用 bash 执行):
|
||||
```bash
|
||||
# 提取正文中的所有 src_id
|
||||
grep -oE 'src_[0-9]+' projects/<slug>/phase4/final.md | sort -u > /tmp/cited.txt
|
||||
|
||||
# 提取 sources.jsonl 中的所有 id
|
||||
python3 -c "
|
||||
import json
|
||||
ids = []
|
||||
with open('projects/<slug>/phase2/sources.jsonl') as f:
|
||||
for line in f:
|
||||
d = json.loads(line)
|
||||
ids.append(d['id'])
|
||||
print('\n'.join(sorted(ids)))
|
||||
" > /tmp/registered.txt
|
||||
|
||||
# 找差集
|
||||
diff /tmp/cited.txt /tmp/registered.txt
|
||||
```
|
||||
@@ -0,0 +1,115 @@
|
||||
---
|
||||
name: evidence-table
|
||||
description: 证据矩阵规范。规定每条核心结论必须有对应的证据记录,格式、字段、置信度分级和文件结构。dr-analyst 撰写初稿时使用,dr-verifier 追加反方证据时使用,dr-chief-editor 审校时作为核验基准。
|
||||
---
|
||||
|
||||
# 证据矩阵规范
|
||||
|
||||
## 核心原则
|
||||
|
||||
**每条结论必须可追溯**。报告中每一个有 [src_xxx] 标注的观点,都必须在对应章节的 evidence 文件中有一行记录。
|
||||
|
||||
---
|
||||
|
||||
## 证据矩阵文件格式
|
||||
|
||||
文件路径:`projects/<slug>/phase2/evidence/chXX-evidence.md`
|
||||
|
||||
### 文件结构
|
||||
|
||||
```markdown
|
||||
# 第 X 章 <标题> — 证据矩阵
|
||||
|
||||
生成时间:<datetime>
|
||||
研究员:dr-analyst
|
||||
字数统计:<N> 字 / 配额 <N> 字
|
||||
|
||||
---
|
||||
|
||||
## 核心结论证据表
|
||||
|
||||
| 结论 ID | 观点摘要(≤30字) | 支持证据 1 | 支持证据 2 | 置信度 | 备注 |
|
||||
|---|---|---|---|---|---|
|
||||
| C01 | <观点> | [src_001] <标题> Tier1 | [src_002] <标题> Tier2 | 高 | |
|
||||
| C02 | <观点> | [src_003] <标题> Tier2 | **[待验证]** 仅 1 个来源 | 中 | 需补充 |
|
||||
| C03 | <观点> | [src_004] <标题> Tier1 | [src_005] <标题> Tier1 | 高 | |
|
||||
|
||||
---
|
||||
|
||||
## 置信度说明
|
||||
|
||||
- **高**:2 个以上独立 Tier 1-2 信源支持,无重大反方证据
|
||||
- **中**:只有 1 个 Tier 1-2 信源,或有轻微反方证据
|
||||
- **低**:仅 Tier 3 信源,或有实质性反方证据
|
||||
- **[待验证]**:找不到第 2 个独立信源,在正文明确标注
|
||||
|
||||
---
|
||||
|
||||
## 信源详情
|
||||
|
||||
<!-- 每条 [src_xxx] 的完整信息 -->
|
||||
|
||||
**[src_001]**
|
||||
- 标题:
|
||||
- 作者/机构:
|
||||
- 年份:
|
||||
- URL/DOI:
|
||||
- Tier:1
|
||||
- 评分:8.5
|
||||
- 摘要(2-3句):
|
||||
|
||||
**[src_002]**
|
||||
...
|
||||
|
||||
---
|
||||
|
||||
## 反方证据(dr-verifier 填写)
|
||||
|
||||
<!-- dr-verifier 完成后追加以下内容 -->
|
||||
|
||||
### 验证摘要
|
||||
- 核验结论数:X
|
||||
- 发现反方证据:X 条
|
||||
- 补足待验证:X 条
|
||||
- 重大挑战:X 条
|
||||
|
||||
### 反方证据详情
|
||||
|
||||
#### 针对结论 C01:<观点摘要>
|
||||
- 反方证据:<内容>
|
||||
- 来源:[src_xxx] | Tier X
|
||||
- 处理建议:保留并注明争议 / 修改措辞 / 删除
|
||||
|
||||
<!-- 如有重大挑战 -->
|
||||
🚨 CRITICAL:<说明>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 置信度分级标准
|
||||
|
||||
| 置信度 | 条件 | 正文处理方式 |
|
||||
|---|---|---|
|
||||
| 高 | ≥2 个独立 Tier 1-2 信源,无 CRITICAL 反方 | 直接陈述 |
|
||||
| 中 | 1 个 Tier 1-2 信源,或有轻微反方 | 陈述 + "但部分研究认为..." |
|
||||
| 低 | 仅 Tier 3,或有实质反方 | 必须加 "[待验证]" 标注 |
|
||||
| [待验证] | 无法找到第 2 个独立来源 | 正文明确写 "该观点仅有 1 个来源支持,待验证" |
|
||||
|
||||
---
|
||||
|
||||
## 结论 ID 命名规则
|
||||
|
||||
- `C01`-`C99`:正向核心结论
|
||||
- `F01`-`F09`:事实性陈述(不需要观点判断)
|
||||
- `T01`-`T09`:趋势判断(通常需要时间序列数据支撑)
|
||||
|
||||
dr-analyst 在撰写草稿时,给每个有 [src_xxx] 的观点分配一个 ID,在草稿和 evidence 文件里保持一致。
|
||||
|
||||
---
|
||||
|
||||
## 硬性规则
|
||||
|
||||
1. 草稿中每个 [src_xxx] 必须在 evidence 文件里有对应行
|
||||
2. 草稿中标注 `[待验证]` 的观点必须在 evidence 表里有对应行(置信度列写"低/待验证")
|
||||
3. dr-verifier 只能在"反方证据"段落追加,不能修改"核心结论证据表"
|
||||
4. CRITICAL 标注的问题,dr-chief-editor 审校时必须明确处理(不能忽略)
|
||||
@@ -0,0 +1,205 @@
|
||||
---
|
||||
name: length-budget
|
||||
description: 报告字数预算分配与执行校验。规定综述/研究/投资/管理各类型的最低字数、章节配额算法、字数自检逻辑、不足时的补写策略。dr-plan 用于 Phase 1 分配配额,dr-pm 和 dr-analyst 用于 Phase 2 执行校验。
|
||||
---
|
||||
|
||||
# 字数预算系统(硬性 KPI)
|
||||
|
||||
## 一、报告类型与字数下限
|
||||
|
||||
| 报告类型 | 最小字数 | 建议章节数 | 典型单章字数 |
|
||||
|---|---|---|---|
|
||||
| 综述类(领域全景、技术综述) | **10,000** | 8-10 章 | 1,000-1,250 |
|
||||
| 研究类(深度专题、竞品研究) | **30,000** | 10-12 章 | 2,500-3,000 |
|
||||
| 投资报告(赛道/公司分析) | **20,000** | 10-12 章 | 1,700-2,000 |
|
||||
| 管理/工艺类(运营分析、SOP) | **15,000-25,000** | 9-11 章 | 1,700-2,200 |
|
||||
|
||||
**总字数 = 正文字数**,不含:摘要、目录、参考文献、附录。
|
||||
|
||||
---
|
||||
|
||||
## 二、章节配额分配算法(dr-plan 用)
|
||||
|
||||
### Step 1:确定总字数目标
|
||||
- 综述类 → 12,000 字(下限 10,000,留 20% 缓冲)
|
||||
- 研究类 → 35,000 字(下限 30,000)
|
||||
- 投资类 → 22,000 字
|
||||
- 管理类 → 18,000 字(按选定)
|
||||
|
||||
### Step 2:按章节重要性分层
|
||||
|
||||
```
|
||||
P0 章(2-3 章):核心论点章,字数配额 = 总字数 × 15-18% 每章
|
||||
P1 章(3-5 章):主干证据章,字数配额 = 总字数 × 8-12% 每章
|
||||
P2 章(2-3 章):辅助分析章,字数配额 = 总字数 × 5-8% 每章
|
||||
引言+结论:每章 总字数 × 6-10%
|
||||
```
|
||||
|
||||
### Step 3:验证总和
|
||||
|
||||
- 所有章节配额之和应等于总字数目标(±5%)
|
||||
- 任意两章字数差距 **不超过 ±30%**(避免头重脚轻)
|
||||
- 结论章必须 ≥ 总字数 10%
|
||||
|
||||
### Step 4:Section 分配
|
||||
|
||||
每章内:
|
||||
- 每 section 最少 **800 字**(不够则合并 section)
|
||||
- 章内 section 数量控制在 2-5 个
|
||||
- 每个 section 下可分 sub-section(300-500 字)
|
||||
|
||||
### 示例(研究类 35,000 字 / 11 章)
|
||||
|
||||
| 章 | 定位 | 字数配额 | 占比 |
|
||||
|---|---|---|---|
|
||||
| 第 1 章 引言与边界 | intro | 2,100 | 6% |
|
||||
| 第 2 章 核心观点(P0) | P0 | 5,250 | 15% |
|
||||
| 第 3 章 机制剖析(P0) | P0 | 5,250 | 15% |
|
||||
| 第 4 章 临床证据(P1) | P1 | 3,850 | 11% |
|
||||
| 第 5 章 竞争格局(P1) | P1 | 3,500 | 10% |
|
||||
| 第 6 章 产业链(P1) | P1 | 3,150 | 9% |
|
||||
| 第 7 章 政策监管(P1) | P1 | 2,800 | 8% |
|
||||
| 第 8 章 风险(P2) | P2 | 2,100 | 6% |
|
||||
| 第 9 章 国际对比(P2) | P2 | 1,750 | 5% |
|
||||
| 第 10 章 趋势判断 | P1 | 2,450 | 7% |
|
||||
| 第 11 章 结论与建议 | conclusion | 2,800 | 8% |
|
||||
| **合计** | | **35,000** | **100%** |
|
||||
|
||||
验证:
|
||||
- ✅ 总和 = 35,000
|
||||
- ✅ 最大(5,250)/ 最小(1,750)= 3 倍 → ❌ 超过 ±30% 了,需调整
|
||||
- 调整:第 9 章升到 2,450(7%),从 P0 各降 400 → 验证通过
|
||||
|
||||
---
|
||||
|
||||
## 三、Phase 2 执行校验(dr-analyst/dr-pm 用)
|
||||
|
||||
### dr-analyst 交稿前自检
|
||||
|
||||
```
|
||||
章节完成后,执行:
|
||||
1. wc -w projects/<slug>/phase2/drafts/chXX.md
|
||||
(中文字数用 Python:sum(1 for c in text if '\u4e00' <= c <= '\u9fff'))
|
||||
2. 对照 framework.md 的 "字数配额":
|
||||
- 实际 / 配额 < 0.7 → 不合格,继续挖掘
|
||||
- 0.7 ≤ 实际 / 配额 < 0.85 → 警告,最好补足
|
||||
- 0.85 ≤ 实际 / 配额 ≤ 1.3 → 合格
|
||||
- 实际 / 配额 > 1.3 → 超纲,考虑拆分或精简
|
||||
```
|
||||
|
||||
### dr-pm 汇总校验
|
||||
|
||||
Phase 2 结束时:
|
||||
```
|
||||
1. 统计全文字数:Σ(chXX.md 字数)
|
||||
2. 对照 manifest.json 的 target_words:
|
||||
- 如果 < 下限(10000/30000/20000/15000)→ ❌ 强制返工
|
||||
- 在下限 ±5% → ⚠️ 需用户确认是否放行
|
||||
- 超出下限 ≥ 10% → ✅ 合格
|
||||
3. 写入 manifest.json 的 phase2.word_stats
|
||||
```
|
||||
|
||||
### 不足时的补写策略(重要)
|
||||
|
||||
**不要让 analyst 为凑字数注水!** 字数不足的应对顺序:
|
||||
|
||||
1. **检查证据覆盖**:该章观点是否有 ≥2 独立 Tier 1-2 信源?若无 → 检索补证据
|
||||
2. **展开数据细节**:把表格里的数字展开成文字分析(趋势、拐点、对比)
|
||||
3. **增加案例**:用 1-2 个具体公司/产品案例佐证抽象观点
|
||||
4. **补反方证据**:把反方证据段落写详细(500-800 字)
|
||||
5. **延伸推论**:对核心判断做 "若成立则..." 和 "若不成立则..." 分支讨论
|
||||
6. **国际对比**:若原文只讲中国,加一段国际对比
|
||||
7. **实在不行**:和 dr-pm 商量是否拆/并章节
|
||||
|
||||
---
|
||||
|
||||
## 四、字数计算工具(中英混排)
|
||||
|
||||
```python
|
||||
def count_chinese_words(text: str) -> int:
|
||||
"""中英混排字数统计。中文字符 1 字,英文单词 1 字。"""
|
||||
import re
|
||||
chinese_count = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
|
||||
# 去掉所有中文字符后,按空格切英文
|
||||
text_no_cn = re.sub(r'[\u4e00-\u9fff]', ' ', text)
|
||||
english_words = len(re.findall(r'[A-Za-z]+(?:[-\'][A-Za-z]+)*', text_no_cn))
|
||||
return chinese_count + english_words
|
||||
```
|
||||
|
||||
使用:
|
||||
```bash
|
||||
python3 -c "
|
||||
import sys, re
|
||||
with open(sys.argv[1]) as f:
|
||||
text = f.read()
|
||||
cn = sum(1 for c in text if '\u4e00' <= c <= '\u9fff')
|
||||
en = len(re.findall(r'[A-Za-z]+(?:[-\'][A-Za-z]+)*', re.sub(r'[\u4e00-\u9fff]', ' ', text)))
|
||||
print(f'中文字数: {cn}, 英文词数: {en}, 总计: {cn+en}')
|
||||
" projects/<slug>/phase2/drafts/ch01.md
|
||||
```
|
||||
|
||||
### 不计入字数的部分
|
||||
- 代码块 ```...```
|
||||
- Markdown 表格线框(|---|)
|
||||
- 引用块 `> `
|
||||
- 标题的 `#` 符号
|
||||
- 链接的 URL(`[文字](url)` 只计文字部分)
|
||||
|
||||
---
|
||||
|
||||
## 五、manifest.json 字段规范
|
||||
|
||||
```json
|
||||
{
|
||||
"slug": "glp1-obesity-2026",
|
||||
"topic": "GLP-1 减重药物竞争格局与投资机会",
|
||||
"type": "研究类",
|
||||
"target_words": 35000,
|
||||
"min_words": 30000,
|
||||
"chapters_planned": 11,
|
||||
"phase1": {
|
||||
"approved": true,
|
||||
"approved_at": "2026-04-20T10:00:00Z",
|
||||
"framework_path": "projects/glp1-obesity-2026/phase1/framework.md",
|
||||
"chapter_quotas": [
|
||||
{"index": 1, "title": "...", "quota": 2100, "priority": "intro"},
|
||||
{"index": 2, "title": "...", "quota": 5250, "priority": "P0"},
|
||||
...
|
||||
]
|
||||
},
|
||||
"phase2": {
|
||||
"started_at": "...",
|
||||
"progress": "7/11",
|
||||
"chapters": [
|
||||
{
|
||||
"index": 1,
|
||||
"draft_path": "projects/.../drafts/ch01.md",
|
||||
"actual_words": 2180,
|
||||
"quota": 2100,
|
||||
"status": "completed",
|
||||
"sources_count": 12,
|
||||
"tbd_claims": 0
|
||||
}
|
||||
],
|
||||
"word_stats": {
|
||||
"total": 34820,
|
||||
"target": 35000,
|
||||
"gap_pct": -0.5,
|
||||
"verdict": "合格"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、硬规则总结
|
||||
|
||||
1. ✅ 综述 ≥10,000 字;研究 ≥30,000 字;投资 ≥20,000 字;管理 ≥15,000 字
|
||||
2. ✅ 章节字数差距 ≤ ±30%
|
||||
3. ✅ 每 section ≥800 字
|
||||
4. ✅ 结论章 ≥ 全文 10%
|
||||
5. ✅ Phase 2 每章完成自检字数
|
||||
6. ✅ 不足下限强制返工
|
||||
7. ❌ 禁止为凑字数注水(空洞形容词、套话、重复表述)
|
||||
8. ❌ 禁止"打折"交稿
|
||||
@@ -0,0 +1,133 @@
|
||||
---
|
||||
name: mckinsey-method
|
||||
description: 麦肯锡报告写作方法论。MECE 原则、SCQA 叙事结构、金字塔原理、"每个标题即一个观点"规则,以及 So What? 自检机制。dr-analyst 撰写初稿、dr-polisher 润色、dr-chief-editor 审校时必须遵循。
|
||||
---
|
||||
|
||||
# 麦肯锡报告写作方法论
|
||||
|
||||
## 一、MECE 原则(章节划分的铁律)
|
||||
|
||||
**Mutually Exclusive, Collectively Exhaustive** — 互斥且穷尽。
|
||||
|
||||
### 章节划分自检
|
||||
|
||||
写完章节大纲后,逐一检查:
|
||||
|
||||
**互斥性**(每章内容不重叠):
|
||||
- 如果读者读完第 3 章,再读第 5 章,会不会觉得"刚才好像说过这个"?
|
||||
- 如果是,说明两章有重叠,需要合并或重划边界
|
||||
|
||||
**穷尽性**(所有重要维度都覆盖):
|
||||
- 用同一个分析框架列出所有应该涵盖的维度
|
||||
- 对照框架,检查有无遗漏
|
||||
- 常用框架:
|
||||
- 市场分析:需求侧 / 供给侧 / 竞争格局 / 监管环境
|
||||
- 技术分析:技术原理 / 临床验证 / 产业化路径 / 壁垒
|
||||
- 投资分析:市场空间 / 竞争壁垒 / 财务模型 / 风险
|
||||
|
||||
---
|
||||
|
||||
## 二、SCQA 叙事结构(每章开头)
|
||||
|
||||
每个 chapter 和重要 section 的第一段,用 SCQA 引入:
|
||||
|
||||
| 要素 | 作用 | 字数 |
|
||||
|---|---|---|
|
||||
| **S (Situation)** | 描述当前已知的背景事实(读者已接受的) | 1-2 句 |
|
||||
| **C (Complication)** | 引入打破现状的张力或挑战 | 1-2 句 |
|
||||
| **Q (Question)** | 由此引发的核心问题(可以是隐含的) | 1 句 |
|
||||
| **A (Answer)** | 本章/section 的核心结论(先行答案) | 1-2 句 |
|
||||
|
||||
**示例(好的)**:
|
||||
> GLP-1 受体激动剂已成为 2 型糖尿病的一线治疗选择,市场规模超过 200 亿美元[src_001]。然而,近期临床数据显示停药后体重反弹率高达 60%,挑战了其"长期治疗"的市场定位[src_002]。这一现象促使我们深入思考:GLP-1 药物究竟是一次性干预还是慢性病长期管理工具?本章认为,**GLP-1 的市场叙事正在从"减重药"向"代谢疾病管理平台"强制转型**,这一转型的成败将决定未来 5 年的市场格局。
|
||||
|
||||
**示例(差的)**:
|
||||
> 本章将介绍 GLP-1 受体激动剂的基本情况,包括其作用机制、临床数据和市场前景。
|
||||
|
||||
---
|
||||
|
||||
## 三、金字塔原理(段落结构)
|
||||
|
||||
**结论先行,证据支撑。**
|
||||
|
||||
```
|
||||
顶层:章节核心结论(标题即观点)
|
||||
├── 支撑论点 1 → 数据/事实/案例
|
||||
├── 支撑论点 2 → 数据/事实/案例
|
||||
└── 支撑论点 3 → 数据/事实/案例
|
||||
```
|
||||
|
||||
**纵向深入**:每个支撑论点都有更细的数据支撑。
|
||||
**横向 MECE**:同层支撑论点之间互斥且穷尽。
|
||||
|
||||
### 段落写法模板
|
||||
|
||||
```
|
||||
[结论句] 具体发现/判断。
|
||||
[证据 1] 根据 <来源>,<数据/事实> [src_xxx]。
|
||||
[证据 2] 进一步,<案例/对比> [src_xxx]。
|
||||
[So What] 因此,<对上层论点的意义>。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、标题即观点(强制规则)
|
||||
|
||||
**每一个 chapter 和 section 的标题必须是一个完整的判断句,而不是描述词。**
|
||||
|
||||
### 反例 vs 正例
|
||||
|
||||
| 反例(禁止) | 正例(要求) |
|
||||
|---|---|
|
||||
| 第 2 章 GLP-1 药物概述 | 第 2 章 GLP-1 的减重机制正在重塑代谢疾病的治疗范式 |
|
||||
| 3.1 市场现状 | 3.1 中国 GLP-1 市场 2025 年已跨越 10 亿美元门槛,且增速仍在加速 |
|
||||
| 4.2 竞争分析 | 4.2 诺和诺德与礼来的双寡头格局在 3 年内将被国产厂商打破 |
|
||||
| 5.1 风险因素 | 5.1 医保覆盖缺失是 GLP-1 市场扩张的最大结构性瓶颈 |
|
||||
|
||||
**判断标准**:能不能把标题变成一个"对/错"或"同意/不同意"的命题?能则合格。
|
||||
|
||||
---
|
||||
|
||||
## 五、So What? 自检机制
|
||||
|
||||
每写完一个段落,问自己:**"所以呢?这对读者有什么意义?"**
|
||||
|
||||
- 如果答案是"没什么意义,只是客观描述"→ **要么删,要么补充 So What 句**
|
||||
- So What 句通常放在段尾,1-2 句,明确点出这段内容对上层论点的贡献
|
||||
|
||||
**So What 句示例**:
|
||||
- "这意味着,先发厂商在 2026 年之前建立的渠道优势将难以被后来者复制。"
|
||||
- "因此,判断一个 GLP-1 管线的商业价值,给药频率比疗效终点更关键。"
|
||||
- "上述趋势表明,当前的估值逻辑低估了国产厂商的长期竞争力。"
|
||||
|
||||
---
|
||||
|
||||
## 六、数据引用规范
|
||||
|
||||
| 类型 | 写法 | 示例 |
|
||||
|---|---|---|
|
||||
| 市场规模 | X 亿/XX 亿美元(YYYY 年)[src_xxx] | 120 亿美元(2024 年)[src_042] |
|
||||
| 增长率 | CAGR XX%(YYYY-YYYY)[src_xxx] | CAGR 23%(2023-2030)[src_018] |
|
||||
| 临床数据 | XX%(95% CI: X-X,p<0.001)[src_xxx] | 体重降低 15.2%(95% CI: 13.8-16.6,p<0.001)[src_007] |
|
||||
| 成功率 | XX%(N=XXX)[src_xxx] | FDA 获批率 41%(N=127 项 NDA,2020-2024)[src_033] |
|
||||
|
||||
**禁止写法**:
|
||||
- "市场规模巨大" → 必须写具体数字
|
||||
- "研究表明" → 必须写是哪项研究(来源 ID)
|
||||
- "近年来" → 必须写具体年份
|
||||
- "有专家认为" → 必须写哪位专家(或删去该措辞,用数据代替)
|
||||
|
||||
---
|
||||
|
||||
## 七、常见 AI 写作坏习惯(一键检索)
|
||||
|
||||
润色或审校时,全文搜索以下词汇,逐一判断是否需要改写:
|
||||
|
||||
```
|
||||
随着 | 不断 | 深入 | 值得注意 | 不难发现 | 显而易见
|
||||
具有重要意义 | 发挥重要作用 | 显著 | 巨大 | 快速发展
|
||||
在此背景下 | 综上所述 | 由此可见 | 总的来说
|
||||
据报道 | 有研究表明 | 专家指出
|
||||
```
|
||||
|
||||
每个命中项,问:有数据支撑吗?能删吗?能改得更具体吗?
|
||||
@@ -0,0 +1,255 @@
|
||||
---
|
||||
name: pdf-reportlab
|
||||
description: 用 ReportLab 生成专业中文 PDF 研究报告。包含思源宋体/黑体+霞鹜文楷的字体注册、集中样式管理、封面/目录/正文/参考文献多页模板、matplotlib 图表嵌入。dr-reporter 用于 Phase 4 出 PDF 稿;也可被用户直接调用渲染单章。
|
||||
---
|
||||
|
||||
# ReportLab 中文 PDF 模板使用指南
|
||||
|
||||
## 一、为什么是 ReportLab
|
||||
|
||||
- **完全可控**:每个字号、行距、缩进都是代码说了算,不像 CSS/LaTeX 会被引擎意外改变
|
||||
- **中文字体一次搞定**:`pdfmetrics.registerFont` 注册后全局可用,子集嵌入 PDF,分发无忧
|
||||
- **速度快**:纯 Python,30,000 字报告 3-5 秒出稿(matplotlib 图表预渲染后)
|
||||
- **图表质量高**:matplotlib 生成 300 DPI PNG 嵌入,比 LaTeX 的 pgfplots 快得多
|
||||
- **样式集中**:用 `StyleSheet` 管理,避免你之前碰到的"中文字号不一"问题
|
||||
|
||||
---
|
||||
|
||||
## 二、项目模板入口
|
||||
|
||||
模板脚本:`.opencode/templates/report-template.py`
|
||||
|
||||
调用方式:
|
||||
```bash
|
||||
python3 .opencode/templates/report-template.py \
|
||||
--input projects/<slug>/phase4/final.md \
|
||||
--manifest projects/<slug>/manifest.json \
|
||||
--output projects/<slug>/phase4/final.pdf \
|
||||
--fonts-dir .opencode/templates/fonts
|
||||
```
|
||||
|
||||
首次运行前必须:
|
||||
```bash
|
||||
bash .opencode/templates/fonts/download-fonts.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 三、字体注册(模板已封装,此处仅说明原理)
|
||||
|
||||
```python
|
||||
from reportlab.pdfbase import pdfmetrics
|
||||
from reportlab.pdfbase.ttfonts import TTFont
|
||||
|
||||
# 思源宋体 = 正文
|
||||
pdfmetrics.registerFont(TTFont('SrcSerif', 'fonts/SourceHanSerifSC-Regular.otf'))
|
||||
pdfmetrics.registerFont(TTFont('SrcSerif-Bold', 'fonts/SourceHanSerifSC-Bold.otf'))
|
||||
pdfmetrics.registerFontFamily('SrcSerif', normal='SrcSerif', bold='SrcSerif-Bold')
|
||||
|
||||
# 思源黑体 = 标题/UI
|
||||
pdfmetrics.registerFont(TTFont('SrcSans-Light', 'fonts/SourceHanSansSC-Light.otf'))
|
||||
pdfmetrics.registerFont(TTFont('SrcSans-Medium', 'fonts/SourceHanSansSC-Medium.otf'))
|
||||
pdfmetrics.registerFont(TTFont('SrcSans-Bold', 'fonts/SourceHanSansSC-Bold.otf'))
|
||||
pdfmetrics.registerFont(TTFont('SrcSans-Heavy', 'fonts/SourceHanSansSC-Heavy.otf'))
|
||||
|
||||
# 霞鹜文楷 = 引文/摘要
|
||||
pdfmetrics.registerFont(TTFont('Kai', 'fonts/LXGWWenKai-Regular.ttf'))
|
||||
```
|
||||
|
||||
**关键**:`TTFont` 虽然类名含 "TT",但也接受 `.otf`(OpenType),别犹豫。
|
||||
|
||||
---
|
||||
|
||||
## 四、样式表(集中管理,避免字号不一)
|
||||
|
||||
所有样式集中在模板的 `build_styles()` 函数:
|
||||
|
||||
| 样式名 | 字体 | 字号 | 行高 | 用途 |
|
||||
|---|---|---|---|---|
|
||||
| `body` | SrcSerif | 10.5 | 18 | 正文 |
|
||||
| `body-bold` | SrcSerif-Bold | 10.5 | 18 | 术语 |
|
||||
| `h1` | SrcSans-Bold | 18 | 28 | 章标题 |
|
||||
| `h2` | SrcSans-Bold | 14 | 22 | section 标题 |
|
||||
| `h3` | SrcSans-Medium | 12 | 18 | sub-section |
|
||||
| `quote` | Kai | 10.5 | 18 | 引文、摘要 |
|
||||
| `caption` | SrcSans-Medium | 9 | 13 | 图表标题 |
|
||||
| `footnote` | SrcSerif | 9 | 13 | 脚注/参考文献 |
|
||||
| `header-footer` | SrcSans-Light | 8 | 12 | 页眉页脚 |
|
||||
| `cover-title` | SrcSans-Heavy | 32 | 42 | 封面大标题 |
|
||||
|
||||
**行高 = 字号 × 1.5~1.7**,不要用默认值。
|
||||
|
||||
---
|
||||
|
||||
## 五、报告 11 件套结构
|
||||
|
||||
模板会按以下顺序生成页面:
|
||||
|
||||
1. **封面页**(`PageTemplate: cover`)
|
||||
- 主标题:`cover-title`
|
||||
- 副标题:`h2`
|
||||
- 作者、日期:`body`
|
||||
- 单独版心,无页眉页脚
|
||||
|
||||
2. **免责声明**(`PageTemplate: normal`)
|
||||
- 固定模板,来源 manifest.json 的 `disclaimer` 字段
|
||||
|
||||
3. **执行摘要**(Executive Summary)
|
||||
- `quote` 样式,1-2 页
|
||||
- 来源 final.md 的 `## 摘要` 段
|
||||
|
||||
4. **术语表**
|
||||
- 两列表格,术语+解释
|
||||
- 来源 final.md 的 `## 术语表` 段
|
||||
|
||||
5. **目录**
|
||||
- 自动从 h1/h2 生成,支持超链接
|
||||
|
||||
6. **主体正文**
|
||||
- 来源 final.md 的各 `## 第 N 章 ...` 段
|
||||
- 页眉:左=主题缩写 / 右=章节名
|
||||
- 页脚:居中页码
|
||||
|
||||
7. **结论与建议**
|
||||
- final.md 的最后一章
|
||||
|
||||
8. **参考文献**
|
||||
- 来源 `projects/<slug>/phase4/citations.bib` 或 `sources.jsonl`
|
||||
- 按引用顺序编号,GB/T 7714 格式
|
||||
- `footnote` 样式
|
||||
|
||||
9. **附录 A:数据表**(可选)
|
||||
|
||||
10. **附录 B:方法论说明**(可选)
|
||||
|
||||
11. **版本信息**
|
||||
- 生成时间、版本号、生成者(dr-reporter)、字数统计
|
||||
|
||||
---
|
||||
|
||||
## 六、图表嵌入规范
|
||||
|
||||
**不要用 ReportLab 原生绘图**,全部预渲染为 PNG:
|
||||
|
||||
```python
|
||||
# 在 dr-analyst / dr-reporter 阶段,用 matplotlib 出图
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.font_manager as fm
|
||||
|
||||
# 注册中文字体给 matplotlib
|
||||
font_path = '.opencode/templates/fonts/SourceHanSansSC-Medium.otf'
|
||||
fm.fontManager.addfont(font_path)
|
||||
plt.rcParams['font.family'] = 'Source Han Sans SC'
|
||||
plt.rcParams['axes.unicode_minus'] = False
|
||||
|
||||
fig, ax = plt.subplots(figsize=(6, 4), dpi=150)
|
||||
# ...绘图代码
|
||||
plt.savefig('projects/<slug>/phase4/figures/fig_01_market_size.png', dpi=300, bbox_inches='tight')
|
||||
```
|
||||
|
||||
然后在 final.md 里用标准 Markdown 引用:
|
||||
```markdown
|
||||

|
||||
```
|
||||
|
||||
模板会自动:
|
||||
- 按 Markdown 解析图片
|
||||
- 用 `caption` 样式渲染标题
|
||||
- 图表居中,宽度适配页宽
|
||||
|
||||
---
|
||||
|
||||
## 七、Markdown → ReportLab 的支持范围
|
||||
|
||||
模板支持以下 Markdown 元素:
|
||||
|
||||
| Markdown | ReportLab 渲染 |
|
||||
|---|---|
|
||||
| `# 标题` | h1(章标题,自动分页) |
|
||||
| `## 标题` | h2(section,不分页) |
|
||||
| `### 标题` | h3(sub-section) |
|
||||
| `**粗体**` | `<b>` inline |
|
||||
| `*斜体*` | `<i>` inline |
|
||||
| `` `代码` `` | 等宽字体 inline |
|
||||
| `> 引文` | `quote` 样式块 |
|
||||
| `- 列表项` / `1. 项` | 项目符号列表 |
|
||||
| `表格`(\| \| \|) | ReportLab Table,自动列宽 |
|
||||
| `` | 图片 + caption |
|
||||
| `[src_001]` | 上标引用链接到参考文献 |
|
||||
| `---` | 分页符(`PageBreak`) |
|
||||
|
||||
**不支持**(请在 Markdown 里避免):
|
||||
- HTML 标签(除少数 inline)
|
||||
- 数学公式(后续可加 matplotlib 渲染)
|
||||
- 代码块高亮(只保留等宽显示)
|
||||
|
||||
---
|
||||
|
||||
## 八、manifest.json 的必需字段
|
||||
|
||||
```json
|
||||
{
|
||||
"slug": "glp1-obesity-2026",
|
||||
"topic": "GLP-1 减重药物竞争格局与投资机会",
|
||||
"subtitle": "2026 年产业深度研究",
|
||||
"author": "Deep Research 系统 v0.1",
|
||||
"date": "2026-04-20",
|
||||
"type": "研究类",
|
||||
"version": "1.0",
|
||||
"disclaimer": "本报告基于公开信息与 AI 辅助研究生成,仅供参考,不构成投资建议。",
|
||||
"cover_theme": "blue"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 九、常见坑与对策
|
||||
|
||||
| 坑 | 对策 |
|
||||
|---|---|
|
||||
| 中文字号不一 | **集中 StyleSheet**,不在 Paragraph 里 inline 改 fontSize |
|
||||
| 行距太挤 | 行高 = 字号 × 1.5~1.7,不要用默认 |
|
||||
| 换行断错 | `wordWrap='CJK'` 必设 |
|
||||
| 字体子集缺字 | 用完整版思源字体(非 subset 精简版) |
|
||||
| 图片变形 | 先 matplotlib 出 300 DPI PNG,再 `Image(path, width=..., height=...)` |
|
||||
| 页眉页脚重叠 | 用 `BaseDocTemplate` + `PageTemplate`,`Frame` 的 margin 留足 |
|
||||
| 英文中文混排间距怪 | 思源系列自带 CJK metrics,间距会自适应,一般不用额外处理 |
|
||||
| 生成慢 | matplotlib 图表预渲染,不要在 PDF 生成阶段现算 |
|
||||
|
||||
---
|
||||
|
||||
## 十、调用流程(dr-reporter 阶段)
|
||||
|
||||
```
|
||||
1. 检查字体:ls .opencode/templates/fonts/*.otf | wc -l ≥ 6
|
||||
2. 检查输入:projects/<slug>/phase4/final.md 存在
|
||||
3. 检查配置:projects/<slug>/manifest.json 有必需字段
|
||||
4. 执行:
|
||||
python3 .opencode/templates/report-template.py \
|
||||
--input projects/<slug>/phase4/final.md \
|
||||
--manifest projects/<slug>/manifest.json \
|
||||
--output projects/<slug>/phase4/final.pdf
|
||||
5. 验证:
|
||||
- PDF 打得开
|
||||
- 文件大小 > 500KB(太小说明字体没嵌)
|
||||
- 页数合理(30,000 字约 60-80 页)
|
||||
6. 汇报:输出路径、页数、文件大小
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 十一、MVP 阶段注意
|
||||
|
||||
目前(MVP)`report-template.py` 是**基础版**,支持:
|
||||
- 思源字体注册
|
||||
- 标题 / 正文 / 引文 / 表格 / 图片
|
||||
- 简单封面 + 目录
|
||||
- 参考文献自动编号
|
||||
|
||||
**暂未实现**(Phase 4 能力阶段补齐):
|
||||
- 自动书签/大纲(PDF navigation pane)
|
||||
- 交叉引用("见第 3 章"自动跳转)
|
||||
- 复杂页眉(左右对称排版)
|
||||
- 附录 B 自动生成(方法论模板)
|
||||
|
||||
如需上述功能,在 manifest.json 里标 `"template_features": ["bookmarks", "xref", ...]`,未来版本会处理。
|
||||
@@ -0,0 +1,211 @@
|
||||
---
|
||||
name: search-strategy
|
||||
description: 生物医药深度研究的统一检索策略。规定信源优先级金字塔、检索轮次、关键词策略、API 调用顺序,以及何时切换到专业信源。所有做信息收集的 agent(dr-searcher/dr-analyst/dr-verifier/dr-plan)必须加载此技能。
|
||||
---
|
||||
|
||||
# 检索策略总纲(Deep Research 黄金法则)
|
||||
|
||||
## 一、信源优先级金字塔
|
||||
|
||||
**永远从上至下尝试,不要从 Tier 4 开始**:
|
||||
|
||||
```
|
||||
╱ Tier 1 ╲ 最高权重
|
||||
╱ (一手) ╲
|
||||
╱──────────────╲
|
||||
╱ Tier 2 ╲ 标准权重
|
||||
╱ (权威二手) ╲
|
||||
╱──────────────────╲
|
||||
╱ Tier 3 ╲ 辅助权重
|
||||
╱ (预印本/会议/券商) ╲
|
||||
─────────────────────────
|
||||
Tier 4 仅做发现入口
|
||||
(通用搜索 + Wiki)
|
||||
─────────────────────────
|
||||
【黑名单】禁用
|
||||
```
|
||||
|
||||
### Tier 1(优先使用,加权 1.2x)
|
||||
- **论文**:PubMed、Cochrane、顶刊(NEJM/Lancet/Nature/Science/Cell/JAMA/NatMed)
|
||||
- **监管**:FDA/EMA/NMPA/PMDA 官网、openFDA
|
||||
- **临床试验**:ClinicalTrials.gov、ChiCTR、EU CTR
|
||||
- **专利**:USPTO、EPO、CNIPA、Google Patents、PatentsView
|
||||
- **披露**:SEC(10-K/10-Q/S-1)、港交所、沪深交易所年报
|
||||
|
||||
### Tier 2(可用,标准权重)
|
||||
- **咨询**:McKinsey/BCG/Deloitte/IQVIA/Evaluate Pharma/Frost & Sullivan/沙利文
|
||||
- **综述**:系统综述、Cochrane Review、Meta 分析
|
||||
- **协会**:PhRMA、BIO、中国医药工业协会、中国医药创新促进会
|
||||
- **专业媒体**:BioSpace、Endpoints News、FiercePharma、STAT、医药魔方、Insight 数据库
|
||||
|
||||
### Tier 3(辅助,需 Tier 1-2 支撑)
|
||||
- **预印本**:bioRxiv、medRxiv、SSRN(必须标注"未同行评审")
|
||||
- **券商**:中金/中信/高盛/摩根士丹利生物医药(注意利益冲突)
|
||||
- **会议**:AACR/ASCO/ASH/JPM Healthcare Conference 摘要
|
||||
|
||||
### Tier 4(仅做入口)
|
||||
- Tavily / Brave / Exa 返回的普通网页 → **只用来发现 Tier 1-2 URL**,不做结论佐证
|
||||
- Wikipedia → **只做术语理解**,结论不得引用
|
||||
|
||||
### 黑名单(禁用为证据)
|
||||
- 百家号、头条号、大部分公众号自媒体
|
||||
- 未署名行业博客
|
||||
- Retraction Watch 标记的撤稿论文
|
||||
- "据业内人士透露"类无来源文章
|
||||
- >5 年的综述(机制研究可放宽)
|
||||
|
||||
---
|
||||
|
||||
## 二、检索 4 轮法则
|
||||
|
||||
对任何一个 section/chapter,**必须至少 4 轮检索**:
|
||||
|
||||
### 第 1 轮:Tier 1 直命中
|
||||
- 先用**精确查询**去 PubMed / ClinicalTrials / openFDA 打
|
||||
- 关键词用 MeSH Term(医学主题词)+ 布尔逻辑
|
||||
- 例:`(GLP-1[MeSH] OR "glucagon-like peptide-1") AND (obesity[MeSH]) AND ("2023"[PDAT]:"2026"[PDAT])`
|
||||
|
||||
### 第 2 轮:Tier 2 综述扫描
|
||||
- 去 McKinsey Insights / BCG / Deloitte 官网搜 industry-overview
|
||||
- Evaluate Pharma / IQVIA 白皮书(通常需注册)
|
||||
- 目标:获取市场规模、竞争格局、趋势判断
|
||||
|
||||
### 第 3 轮:反方/证伪检索
|
||||
- 主动搜索与初步结论相反的关键词
|
||||
- 例:研究"GLP-1 成为减重首选"→ 反方要搜 "GLP-1 limitations" "semaglutide side effects" "discontinuation rate"
|
||||
- 至少 3-5 条反方证据
|
||||
|
||||
### 第 4 轮:Tavily/Brave/Exa 补漏
|
||||
- 仅用于发现前 3 轮遗漏的 URL
|
||||
- 发现后**必须**回溯到原始 Tier 1-2 来源(论文 DOI、监管公告原文)
|
||||
- 不得直接引用搜索返回的二次报道
|
||||
|
||||
---
|
||||
|
||||
## 三、API 调用顺序(技术栈)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ Phase 1 初扫(dr-searcher 用) │
|
||||
│ ├── tavily (MCP) — 快速宽扫 │
|
||||
│ ├── brave (MCP) — 交叉验证 │
|
||||
│ └── exa (MCP) — neural search │
|
||||
│ │
|
||||
│ Phase 2 深研(dr-analyst 用) │
|
||||
│ ├── pubmed esearch/efetch (bash+curl) │
|
||||
│ ├── clinicaltrials.gov API (bash+curl) │
|
||||
│ ├── openfda API (bash+curl) │
|
||||
│ ├── patentsview / google patents (bash) │
|
||||
│ └── + Phase 1 的 3 个 MCP 继续用 │
|
||||
│ │
|
||||
│ Phase 2 反验(dr-verifier 用) │
|
||||
│ └── 与 analyst 相同但查反向关键词 │
|
||||
└─────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### Tavily MCP 调用模板
|
||||
```
|
||||
工具名:tavily_search
|
||||
参数:
|
||||
query: "<关键词>"
|
||||
search_depth: "advanced" # 默认 basic,深度研究用 advanced
|
||||
max_results: 10
|
||||
include_domains: ["pubmed.ncbi.nlm.nih.gov", "nejm.org", "lancet.com"] # 锁 Tier 1
|
||||
exclude_domains: ["baijiahao.baidu.com", "toutiao.com"] # 排黑名单
|
||||
time_range: "year" # 或 "month"
|
||||
```
|
||||
|
||||
### PubMed E-utils(bash 调用示例)
|
||||
```bash
|
||||
# 1. esearch 拿 PMID 列表
|
||||
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=GLP-1+obesity&retmax=20&api_key=$NCBI_API_KEY&retmode=json"
|
||||
|
||||
# 2. efetch 拿摘要
|
||||
curl -s "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&id=PMID1,PMID2&rettype=abstract&retmode=xml&api_key=$NCBI_API_KEY"
|
||||
```
|
||||
|
||||
### ClinicalTrials.gov v2 API
|
||||
```bash
|
||||
curl -s "https://clinicaltrials.gov/api/v2/studies?query.term=semaglutide&pageSize=20&format=json"
|
||||
```
|
||||
|
||||
### openFDA
|
||||
```bash
|
||||
curl -s "https://api.fda.gov/drug/event.json?search=patient.drug.medicinalproduct:semaglutide&count=patient.reaction.reactionmeddrapt.exact&limit=20"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、关键词策略
|
||||
|
||||
### 中英双语必备
|
||||
- 任何生物医药主题**必须同时用中英文检索**
|
||||
- 中文关键词去找:中国监管(NMPA)、A股研报、医药魔方、Insight
|
||||
- 英文关键词去找:PubMed、FDA、顶刊、欧美研报
|
||||
|
||||
### MeSH Term 优先于自由词
|
||||
- PubMed 查询必须用 MeSH Term(医学主题词表)
|
||||
- MeSH Term 能自动扩展同义词,召回更全
|
||||
- 例:`obesity[MeSH]` 会自动包含 `adiposity`, `body weight, excess` 等
|
||||
|
||||
### 布尔逻辑 + 时间过滤
|
||||
- 默认加 `("2023"[PDAT]:"2026"[PDAT])` 时间窗
|
||||
- 机制研究可放宽到 10 年,新药/市场/政策必须近 3 年
|
||||
|
||||
### 反方关键词清单(备忘)
|
||||
- `limitations` / `adverse events` / `side effects` / `discontinuation`
|
||||
- `failed trial` / `FDA rejection` / `withdrawn`
|
||||
- `conflict of interest` / `industry-funded`
|
||||
- `retraction` / `replication failure`
|
||||
|
||||
---
|
||||
|
||||
## 五、每条信源的提取字段(标准化)
|
||||
|
||||
任何信源进 `sources.jsonl` 必须有以下字段:
|
||||
|
||||
```jsonl
|
||||
{
|
||||
"id": "src_001",
|
||||
"tier": 1,
|
||||
"score": 9.2,
|
||||
"type": "journal" | "trial" | "regulatory" | "patent" | "report" | "news",
|
||||
"url": "https://...",
|
||||
"doi": "10.xxxx/...",
|
||||
"title": "...",
|
||||
"authors": ["...", "..."],
|
||||
"year": 2025,
|
||||
"venue": "NEJM",
|
||||
"impact_factor": 176.0,
|
||||
"accessed_at": "2026-04-20",
|
||||
"abstract": "...",
|
||||
"key_data": {
|
||||
"market_size_2025": "12.3B USD",
|
||||
"cagr": "23%"
|
||||
},
|
||||
"used_in": ["ch01", "ch03.sec2"],
|
||||
"notes": "关键图表见 Fig 2"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、失败兜底
|
||||
|
||||
- 某个 API 限流/超时:**等 5s 重试 3 次**,仍失败则跳过并在日志标注
|
||||
- 某个信源 404:在 sources.jsonl 标 `"dead_link": true`,不删除(审计用)
|
||||
- 关键数据查不到:**不要编造**,在正文写 "该数据暂未找到公开来源(截至 2026-04)"
|
||||
|
||||
---
|
||||
|
||||
## 七、硬规则总结
|
||||
|
||||
1. ✅ 每 section 至少 4 轮检索
|
||||
2. ✅ 中英双语必查
|
||||
3. ✅ PubMed 用 MeSH Term
|
||||
4. ✅ 反方关键词必查
|
||||
5. ✅ Tier 4 结果只做发现,不做佐证
|
||||
6. ✅ 所有信源写入 sources.jsonl 并评分
|
||||
7. ❌ 不得引用 Wikipedia 做结论
|
||||
8. ❌ 不得编造数据、URL、DOI
|
||||
9. ❌ 不得使用黑名单信源
|
||||
@@ -0,0 +1,188 @@
|
||||
---
|
||||
name: source-quality
|
||||
description: 信源质量评分系统(0-10 分制)与黑名单机制。规定每个信源入库前的评估维度、硬性淘汰规则、利益冲突检测。所有收集信源的 agent 都必须用此技能给每条信源打分后写入 sources.jsonl。
|
||||
---
|
||||
|
||||
# 信源质量评分(0-10 分制)
|
||||
|
||||
## 一、评分维度(满分 10 分)
|
||||
|
||||
| 维度 | 满分 | 判断标准 |
|
||||
|---|---|---|
|
||||
| 权威性 | 3 | 期刊 IF、机构排名 |
|
||||
| 时效性 | 2 | 发表时间 vs 主题 |
|
||||
| 一手性 | 2 | 一手数据 > 综述 > 二次解读 |
|
||||
| 可验证性 | 2 | 有 DOI/URL/原始数据 |
|
||||
| 无利益冲突 | 1 | 厂商自发降权 |
|
||||
|
||||
### 维度 1:权威性(0-3 分)
|
||||
|
||||
| 分值 | 情形 |
|
||||
|---|---|
|
||||
| 3.0 | IF ≥ 30(NEJM/Lancet/Nature/Science/Cell/JAMA)、FDA/EMA/NMPA 官方、SEC 披露 |
|
||||
| 2.5 | IF 10-30(NatMed/NatBiotech/BMJ/AnnOncol 等)、顶级咨询(MKS/BCG/Deloitte) |
|
||||
| 2.0 | IF 5-10(JCO/CircRes/AJRCCM)、IQVIA/EvaluatePharma、系统综述 |
|
||||
| 1.5 | IF 3-5、券商研报、行业协会白皮书 |
|
||||
| 1.0 | IF 1-3、专业媒体(BioSpace/Endpoints News) |
|
||||
| 0.5 | 预印本(bioRxiv/medRxiv)、会议摘要 |
|
||||
| 0 | 自媒体、百家号、未署名博客 |
|
||||
|
||||
### 维度 2:时效性(0-2 分)
|
||||
|
||||
| 主题类型 | 满分年限 | 每老 1 年扣分 |
|
||||
|---|---|---|
|
||||
| 市场 / 监管 / 临床 | 3 年内 | -0.5 |
|
||||
| 作用机制 / 基础研究 | 10 年内 | -0.2 |
|
||||
| 政策法规 | **以最新版本为准** | 过时版本 0 分 |
|
||||
| 历史追溯(有意为之) | 不限 | 不扣 |
|
||||
|
||||
### 维度 3:一手性(0-2 分)
|
||||
|
||||
| 分值 | 情形 |
|
||||
|---|---|
|
||||
| 2.0 | 一手数据(原始 RCT 论文、监管公告、年报原文、专利原文) |
|
||||
| 1.5 | 系统综述 / Meta 分析 |
|
||||
| 1.0 | 叙述性综述 / Review |
|
||||
| 0.5 | 二次解读(新闻报道、券商改写) |
|
||||
| 0 | 三次传播以上("据报道"/"业内人士") |
|
||||
|
||||
### 维度 4:可验证性(0-2 分)
|
||||
|
||||
| 分值 | 情形 |
|
||||
|---|---|
|
||||
| 2.0 | 有 DOI + 原始数据可下载(如 ClinicalTrials 的 CSR 附件) |
|
||||
| 1.5 | 有 DOI 或稳定 URL,全文可访问 |
|
||||
| 1.0 | URL 稳定但需付费墙 |
|
||||
| 0.5 | 仅有 URL,无唯一标识符 |
|
||||
| 0 | URL 失效 / 404 / 无法验证 |
|
||||
|
||||
### 维度 5:利益冲突(0-1 分)
|
||||
|
||||
| 分值 | 情形 |
|
||||
|---|---|
|
||||
| 1.0 | 独立研究(学术机构、政府)、无资助声明冲突 |
|
||||
| 0.5 | 有 industry funding 但已声明且方法独立 |
|
||||
| 0 | 厂商自发报告 / 直接商业软文 |
|
||||
| **-1**(惩罚) | 声明冲突但方法可疑、或对比实验明显偏向资助方 |
|
||||
|
||||
---
|
||||
|
||||
## 二、综合评分硬规则
|
||||
|
||||
| 评分 | 可用性 |
|
||||
|---|---|
|
||||
| 8.0+ | 可作为核心论据,单独支撑结论 |
|
||||
| 6.0-7.9 | 可用,但结论需 ≥2 个独立信源 |
|
||||
| 4.0-5.9 | 仅作为参考,**不得作为唯一支撑** |
|
||||
| < 4.0 | **禁止**用于结论佐证,只能入发现库 |
|
||||
|
||||
---
|
||||
|
||||
## 三、黑名单(直接拒绝入库)
|
||||
|
||||
以下信源**无论评分多少都禁用**:
|
||||
|
||||
### 1. 明确劣质信源
|
||||
- 百家号(baijiahao.baidu.com)
|
||||
- 头条号(toutiao.com 非原创栏目)
|
||||
- 知乎回答(除非作者本人为业内专家且有实名背书)
|
||||
- 小红书、抖音笔记
|
||||
- 未署名作者的 wordpress / medium 博客
|
||||
|
||||
### 2. 被撤稿论文
|
||||
- 查询 Retraction Watch 数据库(https://retractionwatch.com/)
|
||||
- Crossref API 检查论文状态:`https://api.crossref.org/works/<DOI>`
|
||||
|
||||
### 3. 明显软文/PR 稿
|
||||
识别特征(命中任意 2 条即拒):
|
||||
- 标题含 "重磅发布" "首创" "引领" 等夸张词
|
||||
- 通篇无具体数据,只有 CEO/专家口头引述
|
||||
- 发布渠道是企业官网的"新闻中心"且无交叉第三方验证
|
||||
- 仅讲优势不讲局限
|
||||
|
||||
### 4. 时效过期
|
||||
- 综述 > 5 年(机制研究可放宽)
|
||||
- 政策/监管 > 1 年(以最新版本为准)
|
||||
- 市场数据 > 2 年
|
||||
|
||||
### 5. 维基百科
|
||||
- **仅可作术语理解入口**
|
||||
- 结论永不引用
|
||||
- 如从 Wiki 发现了参考文献,**回溯到原始来源**再引用
|
||||
|
||||
---
|
||||
|
||||
## 四、利益冲突检测要点
|
||||
|
||||
### 常见利益冲突场景
|
||||
- 药企赞助的 RCT 对自家产品评价极高 → 查对比剂、盲法、样本量
|
||||
- 咨询公司报告引用自家客户数据 → 查 acknowledgment 段
|
||||
- 行业协会报告涉及会员企业 → 查资助方名单
|
||||
- 券商研报 + 该券商是相关公司的保荐人 → 查 IPO/承销记录
|
||||
|
||||
### 操作方法
|
||||
每条信源入库前检查:
|
||||
1. 作者/机构是否与被评估的公司/产品有商业关联?
|
||||
2. 资助声明(funding statement)里提到什么?
|
||||
3. 利益披露(disclosure)是否完整?
|
||||
|
||||
**发现强利益冲突**:评分 ≤ 3(等同废弃);写入 `sources.jsonl` 的 `"conflict_of_interest": "..."` 字段。
|
||||
|
||||
---
|
||||
|
||||
## 五、评分执行流程(伪代码)
|
||||
|
||||
```
|
||||
for each candidate_source in search_results:
|
||||
# 1. 黑名单快筛
|
||||
if is_blacklisted(candidate_source):
|
||||
log("BLACKLIST: " + source.url); continue
|
||||
|
||||
# 2. 撤稿检查
|
||||
if has_doi(source) and is_retracted(source.doi):
|
||||
log("RETRACTED: " + source.doi); continue
|
||||
|
||||
# 3. 评分
|
||||
score = 0
|
||||
score += authority_score(source) # 0-3
|
||||
score += recency_score(source, topic) # 0-2
|
||||
score += primacy_score(source) # 0-2
|
||||
score += verifiability_score(source) # 0-2
|
||||
score += coi_score(source) # 0-1 or -1
|
||||
|
||||
# 4. Tier 加权
|
||||
if source.tier == 1: score *= 1.2
|
||||
|
||||
# 5. 入库
|
||||
if score >= 4.0:
|
||||
append_to_sources_jsonl(source, score)
|
||||
else:
|
||||
log("LOW SCORE (" + score + "): " + source.url)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、输出字段(写入 sources.jsonl)
|
||||
|
||||
```jsonl
|
||||
{
|
||||
"id": "src_042",
|
||||
"score": 8.6,
|
||||
"tier": 1,
|
||||
"authority": 3.0,
|
||||
"recency": 2.0,
|
||||
"primacy": 2.0,
|
||||
"verifiability": 2.0,
|
||||
"coi": 1.0,
|
||||
"conflict_of_interest": null,
|
||||
"blacklist_checked": true,
|
||||
"retraction_checked": true,
|
||||
"notes": "NEJM 2025 原文,RCT 独立研究"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、审计留痕
|
||||
|
||||
所有被**拒绝**的信源,也要写入 `projects/<slug>/phase2/rejected-sources.jsonl`(注明原因)。这是事后复盘的关键,不要静默丢弃。
|
||||
Reference in New Issue
Block a user