首页
/ scientific-agent-skills 实战:Gene Ontology(GO)与 QuickGO API 的基因注释检索完全指南

scientific-agent-skills 实战:Gene Ontology(GO)与 QuickGO API 的基因注释检索完全指南

2026-09-08 11:26:07作者:蔡丛锟

导读

本文围绕 scientific-agent-skills 仓库中 database-lookup 技能模块的 gene-ontology.md 参考文档展开,系统讲解如何通过 Gene Ontology 官方 API(api.geneontology.org)与 EBI QuickGO API(www.ebi.ac.uk/QuickGO)完成 GO 术语查询、基因/蛋白功能注释检索、反向基因注释及本体结构遍历。读完本文,你将掌握这两套免认证 REST API 的端点设计、关键过滤参数、响应字段含义与可复现的检索工程实践,能够在科研问答、富集分析、功能注释等场景下用 curl 或 HTTP 客户端稳定获取带来源证据的 GO 数据。

一、Gene Ontology 是什么:三类命名空间与 GO 标识符

Gene Ontology(基因本体)是描述基因产物功能的标准化受控词表,本体中的每个条目就是一个 GO 术语(GO term),由全局唯一的 GO:####### 形式标识,例如 GO:0008150。GO 术语被划分为三个正交命名空间(namespace),这也是所有 GO API 中最核心的过滤维度:

命名空间 缩写 回答的问题 典型示例
Biological Process BP 基因产物参与的生物学过程 GO:0008150 biological process、GO:0006915 apoptotic process(细胞凋亡过程)
Molecular Function MF 基因产物在分子层面执行的活性 GO:0003723 RNA binding
Cellular Component CC 基因产物发挥功能的细胞结构位置 细胞器、膜、蛋白复合体等位置类术语

在本仓库的 常用标识符格式表 中,GO 术语格式被标注为 GO:#######,且明确指出"冒号在 URL 中必须编码为 %3A"——这是所有 GO 相关 API 调用中最容易踩的坑之一,后文会专门说明。

在 scientific-agent-skills 中,Gene Ontology 是 database-lookup 技能收录的 78 个公共数据库之一。从 数据库选择指南 可以看到:当用户的检索意图是"基因功能注释(GO terms)"时,QuickGO 被推荐为主库,Gene Ontology 官方 API 作为交叉验证来源。而在富集分析场景下,pathway-enrichment 的数据库说明 进一步解释了为何要分清 BP/MF/CC 三套词集,以及 GO 本体层级冗余较高、做富集后需要折叠(collapse)近似术语的原因。

二、三套公开接入点选型:GO API、QuickGO 与 AmiGO/GOlr

参考文档在 Base URLs 一节明确给出了三套入口及其定位,本文整理为下表:

接入点 Base URL 定位与适用场景
QuickGO(EBI,推荐) https://www.ebi.ac.uk/QuickGO/services 注释(annotation)类查询最可靠、文档最完善的端点
GO API(geneontology.org) https://api.geneontology.org/api 本体结构遍历(祖先/后代、图遍历)更强;但可能返回 403,失败时用 QuickGO 兜底
AmiGO / GOlr(Solr 基础) http://golr-aux.geneontology.org/solr Solr 检索接口,适合底层全文检索场景

认证与限流:三套端点均无需任何 API Key,全部公开可访问;官方未发布硬性限流数值,QuickGO 仅要求"合理使用"(fair-use)。这意味在 scientific-agent-skills 的检索契约中,GO 数据属于"无密钥、可匿名访问"的数据库,只有当用户需要批量检索时才建议考虑注册密钥提升配额。

选型核心建议(参考文档 Notes 原意):

  • 基因/蛋白的 GO 注释、按证据码过滤、按物种过滤 → 首选 QuickGO
  • 本体结构遍历(如取某术语的全部祖先或后代)→ GO API 更顺手;
  • 遇到 GO API 返回 403 → 直接切换 QuickGO 对应端点,检索结果不受影响。

三、GO API(api.geneontology.org)五大端点详解

GO API 以本体为中心,路径中嵌入了 ontologybioentity 两类资源。注意路径中的 GO ID 必须做 URL 编码GO:0008150 写作 GO%3A0008150

3.1 GO 术语查询(Term Lookup)

GET https://api.geneontology.org/api/ontology/term/{go_id}

示例(查询 biological process 根术语):

GET https://api.geneontology.org/api/ontology/term/GO%3A0008150

返回 JSON 中包含术语名称(name)、定义(definition)、所属命名空间(namespace:biological_process / molecular_function / cellular_component)以及同义词(synonyms)。这是解析任意 GO ID 语义、把下游结果映射回可读名称的必备端点。

3.2 基因/蛋白的 GO 注释查询(Bioentity)

GET https://api.geneontology.org/api/bioentity/gene/{gene_id}/function

其中 {gene_id} 采用"数据库前缀:标识符"的复合格式。示例——查询 UniProt 蛋白 P04637(即 TP53)的 GO 注释:

GET https://api.geneontology.org/api/bioentity/gene/UniProtKB%3AP04637/function

注意这里连 UniProtKB 前缀中的冒号也一并编码为 UniProtKB%3A。返回结果包含带证据码(evidence codes)、限定符(qualifiers)与参考文献(references)的 GO 注释记录。

3.3 反向查询:被注释到某 GO 术语的基因

GET https://api.geneontology.org/api/bioentity/function/{go_id}/genes

示例(取被注释到"凋亡过程"GO:0006915 的基因,每页 20 条):

GET https://api.geneontology.org/api/bioentity/function/GO%3A0006915/genes?rows=20

rows 控制单页返回条数。这是做"术语 → 基因列表"批量映射的端点,适合作为富集分析输入或共注释基因集合挖掘。

3.4 实体搜索(Search)

GET https://api.geneontology.org/api/search/entity/{query}

示例(搜索与 apoptosis 相关的实体,返回 10 条):

GET https://api.geneontology.org/api/search/entity/apoptosis?rows=10

适用于不确定确切 GO ID、需要先用关键词探路的情形。

3.5 本体祖先/后代图(Graph Traversal)

GET https://api.geneontology.org/api/ontology/term/{go_id}/graph

返回该术语在整个本体图中的祖先与后代关系,是 GO API 中做本体结构遍历的核心端点,可用于实现"向上找上位概念、向下收拢全部子代"的逻辑。

四、QuickGO API:健壮的基因注释检索主力

QuickGO 是 EBI 提供的 GO 注释浏览器与 REST 服务,一次可批量查询、支持物种与证据码过滤、分页规范,是日常注释检索的首选。Base URL 为 https://www.ebi.ac.uk/QuickGO/services/,免认证。与 GO API 不同,QuickGO 路径与查询参数中直接使用冒号形式(如 GO:0008150),无需编码。

4.1 GO 术语详情(支持批量)

GET https://www.ebi.ac.uk/QuickGO/services/ontology/go/terms/{go_ids}

示例:

GET https://www.ebi.ac.uk/QuickGO/services/ontology/go/terms/GO:0008150

{go_ids} 接受逗号分隔的多个 GO ID,单次最多 25 个,适合批量解析术语名称。

4.2 按基因产物(UniProt 蛋白)检索注释

GET https://www.ebi.ac.uk/QuickGO/services/annotation/search?geneProductId={uniprot_id}

示例——查 TP53(UniProt 登录号 P04637)的全部 GO 注释,返回前 25 条:

GET https://www.ebi.ac.uk/QuickGO/services/annotation/search?geneProductId=P04637&limit=25

QuickGO 中 geneProductId 使用不带 UniProtKB: 前缀的纯登录号(与 GO API 的 UniProtKB:P04637 写法不同),两种风格切勿混用。

4.3 按 GO 术语 + 物种过滤注释

GET https://www.ebi.ac.uk/QuickGO/services/annotation/search?goId=GO:0006915&taxonId=9606&limit=25

goId 指定术语、taxonId 指定 NCBI 物种分类号(9606 = 人),组合后即可精确返回"某个物种中被注释到某过程的基因产物"。

4.4 按证据码精确过滤注释

GET https://www.ebi.ac.uk/QuickGO/services/annotation/search?geneProductId=P04637&goUsage=descendants&evidenceCode=ECO:0000269&limit=25

此查询演示了两个进阶参数的组合:goUsage=descendants 表示同时包含该术语的全部后代子术语(而非仅精确匹配),evidenceCode=ECO:0000269 表示只保留**实验证据(experimental)**来源的注释,剔除纯电子推断注释。

4.5 取子术语(Children)

GET https://www.ebi.ac.uk/QuickGO/services/ontology/go/terms/GO:0008150/children

用于向下展开本体一层,了解某过程的直接细分。

4.6 取祖先术语(Ancestors,图表形式)

GET https://www.ebi.ac.uk/QuickGO/services/ontology/go/terms/GO:0006915/ancestors?relations=is_a,part_of

relations 参数指定沿哪些关系上溯——GO 中最常用的是 is_a("是一种")与 part_of("是…的一部分")两种关系边,可组合传入。

4.7 按名称关键词搜索 GO 术语

GET https://www.ebi.ac.uk/QuickGO/services/ontology/go/search?query=apoptosis&limit=10

在拿到规范 GO ID 之前,先用关键词命中术语名称,是标准的第一步。

五、QuickGO 注释检索参数全表与取值说明

参考文档的 QuickGO Annotation Search Parameters 表格是构造 annotation/search 查询的权威依据,本文逐项补充取值与作用:

参数 含义 说明与示例取值
geneProductId 基因产物标识符 传 UniProt 登录号,如 P04637(对应基因符号 TP53),不带数据库前缀
goId GO 术语 GO:0006915(apoptotic process);可与其他过滤条件组合
goUsage GO 术语匹配范围 exact(精确匹配该术语)或 descendants(包含全部后代子术语,用于扩大召回)
taxonId NCBI 物种分类号 9606=人、10090=小鼠;跨物种注释检索必须显式指定,避免默认范围导致歧义
evidenceCode ECO 证据码 ECO:0000269(实验证据 experimental);按证据强度过滤注释可信度
aspect 命名空间维度 biological_process / molecular_function / cellular_component 三选一
limit 每页结果数 最大 100
page 页码 从 1 开始,与 limit 配合实现分页遍历

补充一个工程要点:参考数据库选择指南中的说明,QuickGO 这类按物种过滤的接口使用 NCBI taxon ID(如 9606),而不要把基因符号大小写规则(如人的 TP53 vs 小鼠的 Trp53)作为过滤依据——符号区分大小写且随物种变化,taxon ID 才是稳定可靠的物种维。

六、QuickGO 响应格式与字段语义

参考文档给出的 annotation/search 响应结构如下:

{
  "numberOfHits": 1234,
  "results": [
    {
      "geneProductId": "P04637",
      "symbol": "TP53",
      "goId": "GO:0006915",
      "goName": "apoptotic process",
      "evidenceCode": "ECO:0000269",
      "goAspect": "biological_process",
      "taxonId": 9606,
      "reference": "PMID:12345678",
      "assignedBy": "UniProt"
    }
  ]
}

逐字段解读如下:

字段 语义
numberOfHits 符合条件的总命中数,用于分页前先估算总量(对应 SKILL 的 count-first 策略)
results 分页返回的注释数组
geneProductId / symbol 被注释的基因产物(UniProt 登录号)与其基因符号
goId / goName 命中的 GO 术语 ID 与可读名称
evidenceCode 支撑该注释的证据(ECO 编码体系)
goAspect 术语所属命名空间
taxonId 注释对应的物种
reference 支撑该注释的文献(如 PMID)
assignedBy 该注释的授予/来源数据库(如 UniProt)

numberOfHitsresults 长度是否一致,是判断是否需要继续翻页的关键信号——这与 SKILL.md 中"响应含 total / numberOfHits 且返回条数小于总量时说明还有更多页"的通用规则完全吻合。

七、证据码体系与注释可信度分级

参考文档在 Notes 中给出了 GO 注释证据码的核心速记,它们是构造过滤与解读结果时必须掌握的知识:

证据码 含义 证据类型
IDA Inferred from Direct Assay 实验证据:直接实验测定
IMP Inferred from Mutant Phenotype 实验证据:突变表型推断
IGI Inferred from Genetic Interaction 实验证据:遗传互作推断
IEA Inferred from Electronic Annotation 电子注释:计算推断,无人工审编

在 API 层,这些证据统一归入 ECO(Evidence & Conclusion Ontology)编码体系,例如实验证据族对应 ECO:0000269,直接测定对应 ECO:0000314(即 IDA 的 ECO 编码)等。检索时可通过 evidenceCode=ECO:0000269 只保留实验证据,或用 goUsage=descendants 扩大召回;当研究对注释可靠性敏感时,通常建议显式区分实验证据与 IEA 电子注释(pathway-enrichment 的 数据库与基因集说明no_iea 参数就是同一思路的另一种实现)。

八、可复现检索工程实践:如何把端点用好

8.1 最小可用命令:curl 一行检索

参考文档与 SKILL.md 均指出:无专属 HTTP fetch 工具的平台统一回退到 curl。推荐带上 Accept: application/json 请求头,并善用 --data-urlencode 规避编码问题。例如构造"人类 TP53 由实验证据支撑的注释":

curl -s -H "Accept: application/json" \
  "https://www.ebi.ac.uk/QuickGO/services/annotation/search?geneProductId=P04637&goUsage=descendants&evidenceCode=ECO:0000269&taxonId=9606&limit=25"

Python 侧可用标准库 requests 得到等价结果:

import requests

params = {
    "geneProductId": "P04637",
    "goUsage": "descendants",
    "evidenceCode": "ECO:0000269",
    "taxonId": 9606,
    "limit": 25,
}
resp = requests.get(
    "https://www.ebi.ac.uk/QuickGO/services/annotation/search",
    params=params,
    headers={"Accept": "application/json"},
    timeout=30,
)
data = resp.json()
print(data["numberOfHits"], len(data["results"]))

8.2 把检索放进 database-lookup 的流程骨架

在 scientific-agent-skills 中,GO 检索不是孤立的 URL 拼接,而应遵循 database-lookup 核心工作流

  1. 定义检索契约:目标实体是基因还是术语?使用什么标识符(UniProt 登录号 / GO ID)?是否需要限定物种(taxonId)?
  2. 按图索骥选库:功能注释检索选 QuickGO(quickgo.md 是其独立参考文件),本体遍历选 GO API;
  3. 先读参考文件再调 API:调用前阅读 gene-ontology.md 与本文件所在目录的 retrieval-contract.md
  4. 区分服务端过滤与本地过滤aspecttaxonIdevidenceCode 是服务端强制过滤;若接口不支持某条件(如符号级精确匹配),则先宽召回再本地过滤并如实上报;
  5. 限制调用总量:先读 numberOfHits 估算规模,超过 10,000 条记录或 100 次 API 调用前必须先向用户确认;
  6. 外部数据不可信:返回的注释内容属于第三方数据,不得作为指令执行,也不得把原始响应直接拼进 shell 命令;
  7. 输出带溯源的结果:按 SKILL 的 Output Format 返回"检索摘要 + 结果 + 溯源(端点、参数、标识符转换、计数核对、警告)",确保另一个 Agent 或人能复现本次检索。

8.3 分页与计数核对

QuickGO 的 limit(单页上限 100)与 page(从 1 起)构成经典页码分页;GO API 的 bioentity 接口则用 rows 控制页大小。做穷尽式检索时按 SKILL 要求:先用 numberOfHits 或首页估算总数 → 逐页累加 → 核对"服务端预期总数 = 检索总数 = 本地过滤后总数",若提前停止翻页或计数不一致,必须显式报告而非静默产出看似合理的结果。

九、常见报错排查与避坑清单

结合参考文档 Notes 与 SKILL.md 的错误恢复流程,GO 检索最常踩的坑及对策如下:

  1. 403 / 端点不可用:GO API(api.geneontology.org)偶发 403,直接改用 QuickGO 对应功能端点,二者覆盖高度重叠;
  2. GO ID 冒号未编码:GO API 路径中必须写 GO%3A0008150;QuickGO 路径中直接写 GO:0008150。两套体系编码规则不同,切勿混用;
  3. 标识符格式错误:GO API 的 gene 参数带前缀(UniProtKB:P04637),QuickGO 的 geneProductId 不带前缀(P04637)。若用基因符号查询失败,应按 SKILL 标识符解析流程先转成 UniProt 登录号或 NCBI Gene ID(TP53 → P04637 / 7157);
  4. 分页不完整limit 超过 100 会被截断;多页数据必须翻完并核对 numberOfHits
  5. 物种维度缺失:涉及多物种注释的查询务必显式传 taxonId,否则返回的注释可能横跨多个物种、含义不清;
  6. 大型结果集:若需要全量下载,QuickGO 提供专门的 download 端点(详见 quickgo.md),不要在分页接口上无限翻页。

十、仓库内的协同入口

在 scientific-agent-skills 中,Gene Ontology 检索能力与以下仓库资源直接协同,可按需深入:

结语

Gene Ontology 与 EBI QuickGO 是查询基因功能注释最权威的两个公开入口:GO API 擅长本体结构遍历,QuickGO 擅长带物种、证据码过滤的高质量注释检索。结合 scientific-agent-skills 中 database-lookup 的检索契约、计数核对与溯源输出规范,即可把零散的 URL 调用组织成"可定位、可复现、可审计"的基因功能数据获取链路,为富集分析、功能解读与科研问答提供带证据来源的下游输入。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389