SKILL.md
pharma-intel-agent
AI 药品情报聚合 — 多源抓取 → 去重 → AI 过滤 → 双语摘要 → 报告输出
快速开始
# Quick 模式(默认)— 当周情报快报
python scripts/main.py --query "GLP-1" --out-dir tmp/pharma-intel-2026-05-20 --days 7
# Deep 模式 — 含趋势分析
python scripts/main.py --query "PD-1" --out-dir tmp/pharma-intel-2026-05-20 --days 14 --deep
# 无 LLM 测试
python scripts/main.py --query "ADC" --days 7 --mock-llm
# 使用智谱 LLM
python scripts/main.py --query "HER2" --llm zai --days 7
# 自定义 RSS 源
python scripts/main.py --query "BCMA" --rss-file my-feeds.json --days 7
参数
| 参数 | 必填 | 默认值 | 说明 |
|---|---|---|---|
--query |
✅ | — | 搜索关键词(药物名/靶点/适应症) |
--sources |
❌ | fda,pubmed,news |
数据源选择,逗号分隔 |
--days |
❌ | 7 |
回溯天数 |
--llm |
❌ | openai |
LLM 提供商:openai / zai / deepseek |
--model |
❌ | 各提供商默认值 | 覆盖默认模型名(如 gpt-4o / deepseek-reasoner / glm-4-plus) |
--out-dir |
❌ | 自动生成 | 输出目录 |
--deep |
❌ | 关闭 | 启用深度分析(趋势 + 详细摘要) |
--max-items |
❌ | 20 |
进入 LLM 评分的最大条目数 |
--mock-llm |
❌ | 关闭 | Mock LLM 调用(测试用,无需 API key) |
--rss-file |
❌ | — | 自定义 RSS 源 JSON 文件路径 |
--no-expand |
❌ | 关闭 | 禁用通用名自动展开(仅用原始查询) |
环境变量
| 变量 | 必填 | 说明 |
|---|---|---|
OPENAIAPIKEY |
✅(非 mock) | OpenAI API 密钥 |
OPENAIBASEURL |
❌ | 自定义 API 地址(默认 https://api.openai.com/v1) |
OPENAI_MODEL |
❌ | 模型名(默认 gpt-4o-mini) |
ZAIAPIKEY |
❌ | 智谱 API 密钥(--llm zai 时使用) |
ZAIBASEURL |
❌ | 智谱 API 地址(默认 https://open.bigmodel.cn/api/paas/v4) |
ZAI_MODEL |
❌ | 智谱模型(默认 glm-4-flash) |
DEEPSEEKAPIKEY |
❌ | DeepSeek API 密钥(--llm deepseek 时使用) |
DEEPSEEKBASEURL |
❌ | DeepSeek API 地址(默认 https://api.deepseek.com/v1) |
DEEPSEEK_MODEL |
❌ | DeepSeek 模型(默认 deepseek-chat) |
NCBIAPIKEY |
❌ | NCBI API key(加速 PubMed 查询:3→10 req/s) |
依赖安装
pip install requests feedparser
通用名自动展开
当查询词是靶点/药物类别(如 GLP-1、PD-1)时,自动展开为具体的 FDA 可查药品通用名。 采用三层 fallback 机制,无需手动维护:
查询词 "X"
├─ 第1层:内置映射表(零延迟快速路径)
├─ 第2层:openFDA openfda 反查(免费 API 自动发现)
└─ 第3层:ChEMBL API 靶点→药物映射
用 --no-expand 可禁用展开,仅使用原始查询词。
流程
query 输入
│
├─ 通用名展开(三层 fallback)
│
├─ 并行抓取(FDA + PubMed + RSS News + 自定义源)
│
├─ 去重标准化(URL 去重 + 标题相似度 ≥ 0.8)
│
├─ AI 相关度评分(LLM 批量打分 0-5)
│
├─ AI 双语摘要 + 自动标签(score ≥ 3)
│
├─ [Deep] 趋势分析
│
└─ 输出报告(JSON + Markdown)
Non-negotiables
- 所有数据必须来自真实 API/RSS,不允许编造任何条目
- 必须标注每条情报的来源(source)和时间(date)
- AI 摘要必须注明是 AI 生成
- 去重必须覆盖跨源重复(标题相似度 ≥ 0.8)
summaryen必须是 AI 生成的真实英文摘要,而非 rawsummary 截断
输出
report.json— 结构化 JSON 报告report.md— Markdown 可读报告- 详见 [output-contract.md](references/output-contract.md)
文件结构
skills/pharma-intel-agent/
├── SKILL.md
├── requirements.txt
├── references/
│ ├── data-sources.md
│ ├── output-contract.md
│ └── prompt-templates.md
├── scripts/
│ ├── main.py # 单入口
│ ├── fetch_fda.py # FDA openFDA 抓取
│ ├── fetch_pubmed.py # PubMed E-utilities 抓取
│ ├── fetch_news.py # RSS 新闻聚合
│ ├── name_expand.py # 通用名动态展开(新增)
│ ├── dedup.py # 去重标准化
│ └── summarize.py # AI 评分 + 摘要 + 标签
└── tmp/ # 运行时输出(.gitignore)
参考
- [data-sources.md](references/data-sources.md) — 数据源清单 + API 端点 + 配额
- [output-contract.md](references/output-contract.md) — 输出格式规范
- [prompt-templates.md](references/prompt-templates.md) — AI 过滤/摘要 prompt 模板