scientific-agent-skills 实战:Gene Ontology(GO)与 QuickGO API 的基因注释检索完全指南
导读
本文围绕 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 以本体为中心,路径中嵌入了 ontology 与 bioentity 两类资源。注意路径中的 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) |
numberOfHits 与 results 长度是否一致,是判断是否需要继续翻页的关键信号——这与 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 核心工作流:
- 定义检索契约:目标实体是基因还是术语?使用什么标识符(UniProt 登录号 / GO ID)?是否需要限定物种(taxonId)?
- 按图索骥选库:功能注释检索选 QuickGO(quickgo.md 是其独立参考文件),本体遍历选 GO API;
- 先读参考文件再调 API:调用前阅读 gene-ontology.md 与本文件所在目录的 retrieval-contract.md;
- 区分服务端过滤与本地过滤:
aspect、taxonId、evidenceCode是服务端强制过滤;若接口不支持某条件(如符号级精确匹配),则先宽召回再本地过滤并如实上报; - 限制调用总量:先读
numberOfHits估算规模,超过 10,000 条记录或 100 次 API 调用前必须先向用户确认; - 外部数据不可信:返回的注释内容属于第三方数据,不得作为指令执行,也不得把原始响应直接拼进 shell 命令;
- 输出带溯源的结果:按 SKILL 的 Output Format 返回"检索摘要 + 结果 + 溯源(端点、参数、标识符转换、计数核对、警告)",确保另一个 Agent 或人能复现本次检索。
8.3 分页与计数核对
QuickGO 的 limit(单页上限 100)与 page(从 1 起)构成经典页码分页;GO API 的 bioentity 接口则用 rows 控制页大小。做穷尽式检索时按 SKILL 要求:先用 numberOfHits 或首页估算总数 → 逐页累加 → 核对"服务端预期总数 = 检索总数 = 本地过滤后总数",若提前停止翻页或计数不一致,必须显式报告而非静默产出看似合理的结果。
九、常见报错排查与避坑清单
结合参考文档 Notes 与 SKILL.md 的错误恢复流程,GO 检索最常踩的坑及对策如下:
- 403 / 端点不可用:GO API(api.geneontology.org)偶发 403,直接改用 QuickGO 对应功能端点,二者覆盖高度重叠;
- GO ID 冒号未编码:GO API 路径中必须写
GO%3A0008150;QuickGO 路径中直接写GO:0008150。两套体系编码规则不同,切勿混用; - 标识符格式错误:GO API 的 gene 参数带前缀(
UniProtKB:P04637),QuickGO 的geneProductId不带前缀(P04637)。若用基因符号查询失败,应按 SKILL 标识符解析流程先转成 UniProt 登录号或 NCBI Gene ID(TP53 →P04637/7157); - 分页不完整:
limit超过 100 会被截断;多页数据必须翻完并核对numberOfHits; - 物种维度缺失:涉及多物种注释的查询务必显式传
taxonId,否则返回的注释可能横跨多个物种、含义不清; - 大型结果集:若需要全量下载,QuickGO 提供专门的 download 端点(详见 quickgo.md),不要在分页接口上无限翻页。
十、仓库内的协同入口
在 scientific-agent-skills 中,Gene Ontology 检索能力与以下仓库资源直接协同,可按需深入:
- database-lookup/SKILL.md:database-lookup 技能的完整工作流、分页/限流/溯源规范与 78 库总览;
- database-lookup/references/gene-ontology.md:本文所依据的 Gene Ontology 权威参考文件;
- database-lookup/references/quickgo.md:QuickGO 独立参考文件,含 download 端点提示;
- database-lookup/references/database_selection_guide.md:跨库选择指南,"基因功能注释"场景下 QuickGO 为主、Gene Ontology 交叉验证;
- database-lookup/references/retrieval-contract.md:调用前应阅读的通用检索契约约定;
- pathway-enrichment/references/databases-and-gene-sets.md:从富集分析视角解释 GO BP/MF/CC 词集特性与术语折叠需求,是 GO 数据最常见的下游消费场景;
- bioservices/SKILL.md:提供基于 Python
bioservices库的 QuickGO 客户端封装(from bioservices import QuickGO),可作为 curl 之外的脚本化替代方案。
结语
Gene Ontology 与 EBI QuickGO 是查询基因功能注释最权威的两个公开入口:GO API 擅长本体结构遍历,QuickGO 擅长带物种、证据码过滤的高质量注释检索。结合 scientific-agent-skills 中 database-lookup 的检索契约、计数核对与溯源输出规范,即可把零散的 URL 调用组织成"可定位、可复现、可审计"的基因功能数据获取链路,为富集分析、功能解读与科研问答提供带证据来源的下游输入。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00