Files
deep_research/.agents/skills/citation-manager/SKILL.md
T

167 lines
4.1 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.
---
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
```