--- name: scientific-databases description: >- 当用户需要查询科研专业数据库(生物医学实体与临床试验、材料结构与计算性质、 宏观经济时间序列、气象与空间天气、水文地学数据)、或不确定某个数据需求该走 哪个数据库 connector 时使用。同义场景:查数据库、材料数据查询、Materials Project 查结构、FRED 查经济数据、气象数据下载、临床 trial 检索、 "帮我查一下某种材料的带隙""这个经济指标的时间序列去哪拿"。 argument-hint: '[数据需求或检索问题]' metadata: domains: [data, biomedical, materials, economics, meteorology, geoscience] last_reviewed: '2026-08-18' --- # scientific-databases:按域聚合的科研数据库检索规程 ## 目的 把用户的专业数据需求路由到 `references/connectors.yaml` 中登记的 connector(MCP server 或直连 HTTP API),执行检索,把结果统一为 PaperDocument(文献类)或结构化 JSON(数据类)落盘,供下游技能使用。 核心原则与 literature-search 一致:诚实路由、失败留痕。此外本技能多一条 硬约束——**fail-closed 合规门禁**:凡是 `connectors.yaml` 里没有登记、 或登记为 deferred 的 connector,一律不得使用;宁可停下来告诉用户 "这个源当前不可用及原因",也不临时找表外替代品静默顶替。 ## 前置检查 1. `references/connectors.yaml` 存在且可读;它是 connector 合规的唯一 权威清单。 2. 网络可用;离线时直接说明无法检索并终止。 3. 用户需求足够具体:若过于宽泛(如"查点材料数据"),先与用户收敛到 具体物质/指标/时间范围再执行。 4. 计算 slug:需求描述规范化(Unicode NFKC 规范化、转小写、去首尾空白、 连续空白折叠为单个空格)后取 sha1 十六进制摘要前 8 位。 5. 若需求实质是文献检索(找论文而非找数据),转交 literature-search,不在本技能内重复实现。 ## 操作规程 ### 1. license gate(任何检索之前必须执行) - 在 `references/connectors.yaml` 中查找目标 connector 条目: - 表中**没有**该条目 → 停止。告知用户"该数据源未登记,按 fail-closed 原则不得使用";如需新增,走 customize 流程先改表。 - `status: deferred` → 停止。如实引用表中的 `reason` 字段说明暂缓 原因(如 KEGG 学术许可限制),不得尝试绕过或找镜像顶替。 - `status: needs-key` → 检查对应 `apiKeyEnv` 环境变量是否已配置; 未配置则停止并给出配置指引(变量名、去哪申请),不替用户申请。 - `status: active` → 放行。注意 `tested: false` 表示该条目尚未在本 仓库实测,首次使用应先小规模试运行(limit 调小),确认可用后再放量, 并把实测结果反馈给用户(建议其把 tested 改为 true)。 - license gate 的检查结果(哪个条目、哪个 status、放行还是停止)写入 manifest 的 `license_gate` 字段。 ### 2. 路由:域 → 推荐 connector | 需求域 | 首选 connector | 备选 / 说明 | | --- | --- | --- | | 生医(实体、文献、临床试验) | biomcp | paper-search(文献聚合兜底);KEGG/CADD/PanglaoDB 均 deferred,禁用 | | 材料(结构、相图、计算性质) | materials-project | 无备选;未配 MP_API_KEY 即停 | | 经济(宏观时间序列) | fred | 无备选;未配 FRED_API_KEY 即停 | | 气象(预报、再分析、气候指标) | open-meteo | 免费无 key,注意免费档日额度 | | 地学(空间天气) | spaceweather | NOAA SWPC,公开数据 | | 地学(美国水文) | usgs-water | 仅美国站点;中国水文数据不在覆盖范围,如实告知 | | 综合文献 | paper-search | 优先转交 literature-search | 路由决策与理由写入 manifest;用户也可直接指定 connector 跳过路由, 但 license gate 仍然必须过——指定表外 connector 与查不到条目同等处理。 ### 3. politeness(礼貌访问) - 请求速率 ≤ 2 req/s;批量任务在每次请求间至少间隔 0.5 秒。 - 遭遇 HTTP 429 / 503 时按指数退避重试(1s → 2s → 4s,最多 3 次); 仍失败则记 `rate_limited` 留痕,不得当作"结果为 0"。 - 批量上限:单次任务默认 ≤ 50 条记录;需要更大批量时先向用户说明 数据源的速率政策并获确认(guardrail 第 8 条:联网批量下载属危险操作)。 - 带 User-Agent 发起直连 HTTP 请求;MCP server 类 connector 的速率由 其自身实现控制,但批量上限与危险操作确认规则同样适用。 ### 4. 执行检索 - MCP 类 connector(paper-search / biomcp / open-meteo):调用其暴露的 工具;工具不可用时(server 未启动、uvx 包不存在)如实记录错误,不伪装 成"无结果"。 - HTTP 类 connector(materials-project / fred / spaceweather / usgs-water):按其官方 API 文档构造请求;接口字段以各官方文档为准, 解析失败按 `upstream_changed` 错误类型留痕。 - 逐源串行执行、逐源记录结果。 ### 5. 失败结构化记录 任一 connector 返回错误或执行异常时: - 在 manifest 的 `errors` 数组记录:connector、type(`network` / `rate_limited` / `auth_missing` / `upstream_changed` / `parse`)、 message; - 回复中如实告知"X connector 本次失败及原因"; - **查不到 ≠ 不存在**:检索结果为 0 只说明"本次在该源未命中",回复中 必须用这个措辞,不得推断"该物质/指标不存在"; - 失败不静默:禁止产出空结果文件冒充成功。 ### 6. 结果统一与落盘 - 文献类结果(biomcp、paper-search 返回的论文条目):统一为 PaperDocument: `{id, title, authors, year, venue, doi, url, abstract, source, retrieved_at}` (`source` 为字符串数组)。 - 数据类结果(材料性质、经济序列、气象数据等):保留该域原生结构, 包一层统一信封: `{connector, query, domain, retrieved_at, records: [...]}`。 - 落盘目录 `output/scientific-databases//latest/`: - `papers.json`:文献类 PaperDocument 数组(有文献结果时); - `data.json`:数据类结构化结果(有数据结果时); - `manifest.json`:query、license_gate、路由决策、各源命中数、 errors、执行时间。 - 产物落盘后按工作区约定用 provenance-record 登记。 ## 输出模板 ### data.json(数据类信封) ```json { "connector": "open-meteo", "query": "Beijing daily mean temperature 2020-2024", "domain": "气象", "retrieved_at": "2026-08-18T00:00:00+00:00", "records": [ {"date": "2020-01-01", "tmean_c": -3.2} ] } ``` ### manifest.json ```json { "query": "LiFePO4 band gap", "slug": "1a2b3c4d", "license_gate": {"connector": "materials-project", "status": "needs-key", "decision": "pass"}, "routing": [{"connector": "materials-project", "reason": "材料计算性质"}], "hits": {"materials-project": 3}, "errors": [{"connector": "fred", "type": "auth_missing", "message": "FRED_API_KEY 未配置"}], "executed_at": "2026-08-18T00:00:00+00:00" } ``` ## 本技能不做什么 - 不使用 `connectors.yaml` 之外的任何数据源(fail-closed)。 - 不绕过 deferred 条目的暂缓原因,不找镜像或替代品静默顶替。 - 不替用户申请或保管 API key;只检查环境变量是否已配置。 - 不做批量镜像式下载;超过批量上限的需求先确认再执行。 - 不把"检索结果为 0"表述为"数据不存在",不把 connector 失败伪装成 "无结果"。 - 不做文献综述与论文级检索(交给 literature-search / literature-survey)。 - 不对数据做科学解释与结论判断;只负责取数与留痕。 ## 收尾与下一步 1. 汇总:license gate 结果、各 connector 命中数、失败源及原因,5 行内 说明;结果为 0 的源用"本次未命中"措辞。 2. 指向 `output/scientific-databases//latest/` 下的产物文件。 3. 建议下一步:数据进 analysis 阶段处理;文献类结果可交给 literature-survey;needs-key 的源给出配置指引后等待用户配置。 4. 若全部 connector 均失败或被 gate 拦停,明确告知"本次检索整体未完成", 不产出空文件冒充成功;需要新增 connector 时建议走 customize 流程 先更新 `connectors.yaml`。