关于 bioservices
BioServices 是用于查询生物数据服务并整合蛋白质、基因、通路、化合物及基因组信息的 Python 包与技能。它提供按服务区分的客户端和工作流,并说明标识符、响应处理、服务限制及证据解读。
主要功能
- 01蛋白质搜索与序列获取
- 02基因、通路及标识符映射
- 03化合物交叉引用
- 04获取 QuickGO 注释
- 05BLAST 任务与 STRING 关联
- 06分析和标识符转换工作流
适用场景
- 01跨服务收集蛋白质注释
- 02将通路数据导出为 CSV 或 SIF
- 03解析不同数据库间的化合物标识符
- 04批量转换生物标识符
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ k-dense-ai/ scientific-agent-skills --skill bioservices安装后在 Claude Code 中输入/bioservices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/identifier_mapping.mdservices_reference.mdworkflow_patterns.mdscripts/batch_id_converter.pycompound_cross_reference.pypathway_analysis.pyprotein_analysis_workflow.py详细介绍
BioServices
何时使用
当需要在 Python 中组合蛋白质注释、基因/通路归属、化合物交叉引用或基因组资源时,请使用 BioServices。其各服务客户端共享传输辅助工具,但请求参数和返回类型各不相同。在组合客户端之前,请先查阅服务参考;来自 PubChemPy、mygene 或旧版 BioServices 的方法名不可移植。
目标版本为 bioservices 1.16.0,即评审时的当前 PyPI 发布版本。包元数据允许 Python >=3.9,<4;随附测试在隔离的 Python 3.13 环境中运行。此前 3.12 的上限并非包要求。
uv pip install "bioservices==1.16.0"
工作流
- 将所请求的生物体和实体解析为稳定的登录号。在选择之前先审查搜索命中;基因符号和化合物名称可能存在歧义。
- 检查服务的实际响应类型,包括分页和错误。BioServices 可能返回类似整数的 HTTP 错误或
None,而不仅仅是抛出异常。 - 在衍生表旁保留一对多映射、失败的标识符、分类学、数据库版本、查询参数和检索日期。
- 区分注释和推断关联与实验证据。仅凭通路归属并不构成富集分析或因果结论。
- 在批量处理前先运行一次小规模查询;遵守提供商限制,并将失败与确认的空结果分别保留。
蛋白质搜索、序列检索与映射
from bioservices import UniProt
u = UniProt(verbose=False)
u.services.TIMEOUT = 30
rows = u.search(
"gene_exact:ZAP70 AND organism_id:9606 AND reviewed:true",
frmt="tsv", columns="accession,gene_names,organism_name,length",
limit=5, size=5,
)
if not isinstance(rows, str):
raise RuntimeError("UniProt search failed")
print(rows)
fasta = u.retrieve("P43403", frmt="fasta")
record = u.retrieve("P43403", frmt="json")
mapping = u.mapping(fr="UniProtKB_AC-ID", to="KEGG", query="P43403")
if not isinstance(mapping, dict) or "results" not in mapping:
raise RuntimeError("Mapping incomplete or failed")
kegg_ids = [row["to"] for row in mapping["results"] if row["from"] == "P43403"]
print(kegg_ids, mapping.get("failedIds", []))
使用 frmt="tsv",而不是 "tab";当前字段名包括 accession、gene_names、organism_name、protein_name、go_id 和 xref_pdb。mapping() 返回 results/failedIds 信封,而非源到列表的字典。映射到 UniProt 使用 to="UniProtKB",并在 row["to"] 中返回完整记录;提取 primaryAccession。UniProtKB_AC-ID 是源代码。有关允许的配对、规范化和限制,请参阅标识符映射。对于有界搜索,设置 size=limit(最多 500);1.16.0 在其分页循环中混用了这两个值。
KEGG 通路与网络
from bioservices import KEGG
k = KEGG(verbose=False)
k.services.url = "https://rest.kegg.jp"
pathway_names = k.get_pathway_by_gene("7535", "hsa") # dict: pathway ID -> name
print(pathway_names)
kgml = k.parse_kgml_pathway("hsa04660")
entries = {entry["id"]: entry for entry in kgml["entries"]}
for relation in kgml["relations"][:5]:
print(entries[relation["entry1"]]["name"], relation["name"],
entries[relation["entry2"]]["name"])
经审查的 /list/organism 端点尽管仍保留在手册中,却返回 HTTP 400。依据该目录进行验证的 SDK 方法可能会失败。随附的化合物和通路列表脚本通过 k.services.http_get 使用文档所述的作用域端点,以避免该无关目录依赖。
KEGG get 每次最多允许十个条目;KGML 每次请求只允许一个通路。请将请求保持在每秒三次或以下。list/find 返回 TSV 字符串;get 返回平面文件字符串,除非某个选项改变了表示形式。KGML 条目包括基因、化合物、组和图谱。一个关系可能产生多条子类型记录;这些计数既不是唯一基因,也不是独立的物理相互作用。条目 ID 在每个通路内是局部的。随附的 SIF 导出将其命名空间化为 pathway#entry,因此组合通路时不会合并无关节点。pathway2sif(..., uniprot=False) 是基因到基因激活/抑制的可选有损投影,并非完整的通路网络。
化合物交叉引用
from bioservices import UniChem
uc = UniChem(verbose=False)
response = uc.get_compounds("CHEBI:15365", "chebi") # aspirin
if not isinstance(response, dict) or "compounds" not in response:
raise RuntimeError("UniChem request failed")
chembl_ids = sorted({source["compoundId"]
for match in response["compounds"] for source in match.get("sources", [])
if source.get("shortName") == "chembl"})
print(chembl_ids)
UniChem 2 使用带 JSON 正文的 POST /api/v1/compounds;BioServices 负责组装。通过 uc.source_ids 发现源名称;评审时 KEGG 缺失。从 KEGG 化合物出发,保留每一个 ChEBI 交叉引用,并仅使用唯一解析且经过结构审查的候选。在合并数据前检查电荷、立体化学、盐形式和母体形式。多个未解析的名称命中或映射在随附的化合物脚本中保持未解析。空结果不能证明不存在。
QuickGO 注释
from bioservices import QuickGO
g = QuickGO(verbose=False)
terms = g.get_go_terms("GO:0003824") # list of term dictionaries
page = g.Annotation(geneProductId="UniProtKB:P43403", includeFields="goName",
limit=100, page=1)
if not isinstance(page, dict) or "results" not in page:
raise RuntimeError("QuickGO request failed")
for annotation in page["results"][:5]:
print(annotation["goId"], annotation["goName"], annotation["goAspect"])
print(page["pageInfo"]) # current, total, resultsPerPage
Term、Annotation(protein=..., format="tsv") 以及固定的 TSV 列偏移量
属于旧 API。请抓取第 1 页至 pageInfo.total 页;该 SDK 每页允许
1–100 行。保留限定符、证据代码、参考文献和分类单元。
该蛋白脚本汇总不同的正向词条并排除 NOT
断言;其汇总结果不是原始注释导出,也不是富集检验。
序列相似性与关联
NCBIblast 封装的是 EMBL-EBI Job Dispatcher,而非 NCBI 的 BLAST URL API。
该 SDK 当前的方法为 get_status、get_result、get_result_types
和 get_parameter_details。EMBL-EBI 要求提供联系邮箱;本技能的
NCBI_EMAIL 变量是本地约定,SDK 不会自动读取。
提交示例仅作说明之用;审查期间未提交任何实时 BLAST 任务。
import os
from bioservices import NCBIblast
blast = NCBIblast(verbose=False)
blast.services.url = "https://www.ebi.ac.uk/Tools/services/rest/ncbiblast"
# protein_sequence must contain the actual query sequence.
job_id = blast.run(program="blastp", sequence=protein_sequence, stype="protein",
database="uniprotkb", email=os.environ["NCBI_EMAIL"])
status = blast.get_status(job_id)
if status == "FINISHED":
result_types = blast.get_result_types(job_id)
report = blast.get_result(job_id, "out")
以延迟和截止时间进行轮询。遇到 FAILURE、ERROR 或 NOT_FOUND 时停止;
仅获取已完成的任务。当本地等待超时时,保留任务 ID。
请使用随附脚本的有界轮询,而非无界循环。
PSICQUIC 在 1.16.0 中不存在。如需带评分的关联,请使用
STRING.get_interaction_partners 并提供经过验证的分类学 ID;这是不同的
证据来源,并非 PSICQUIC 的等效替代。STRING 默认的功能性边
可能是间接的,并不构成物理结合。
随附工作流
安装后,从本技能目录运行:
python scripts/protein_analysis_workflow.py P43403 --skip-blast
python scripts/pathway_analysis.py hsa output_directory/ --limit 2
python scripts/compound_cross_reference.py Geldanamycin
python scripts/batch_id_converter.py input_ids.txt --from UniProtKB_AC-ID --to KEGG
python scripts/batch_id_converter.py --list-databases
- 蛋白分析:UniProt、可选的 BLAST、所有已映射的 KEGG 基因、STRING 关联、分页的 QuickGO 词条。 优先使用稳定的登录号;自由文本搜索会显示并使用第一个命中项。
- 通路分析:KGML 条目/子类型计数以及 CSV/SIF 导出。缺失的 KGML 会被报告并跳过。
- 化合物查询:唯一的精确 KEGG 名称匹配(或唯一命中项)、 所有 ChEBI 候选、带防护的 UniChem 映射、ChEBI/ChEMBL 属性。
- 批量转换器:保留多个目标;
CSV 区分
Success、显式Unmapped以及请求/不完整的Failed。
集成示例请参见工作流模式。 网络冒烟测试覆盖了公共核心查询;单元测试使用当前 响应夹具。基因组规模的下载、付费/需认证的资源以及 实时 BLAST 提交均未测试。服务可用性不作保证。
来源与服务限制
当前签名已对照 1.16.0 SDK 文档
和已安装源代码进行核对。提供方契约:UniProt 映射字段、
KEGG API、
QuickGO API、
Job Dispatcher、
STRING API。
在实际传输层配置超时,例如 k.services.TIMEOUT = 30;
k.TIMEOUT = 30 在许多包装类上仅会创建一个未使用的属性。
在受支持的构造函数中使用 cache=True;CACHE/DELAY 并非统一的
BioServices 控制项。STRING 1.16.0 发出直接请求,不使用传输层的
超时或速率限制器;请对大型工作流进行外部限制,并适时使用提供方的
批量下载。
引用 Scientific Agent Skills
本技能是 K-Dense 出品的 Scientific Agent Skills 的一部分。如果它对一篇论文、报告、演示文稿或代码发布有实质性贡献,请将该论文加入参考文献或软件部分,并告知用户你已这样做:
Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065
请始终引用当前版本。该 DOI 和 https://arxiv.org/abs/2609.00065 都指向最新的 arXiv 版本,因此切勿附加 v1 之类的版本后缀。当有网络访问时,请在撰写参考文献前获取 https://arxiv.org/abs/2609.00065(或
http://export.arxiv.org/api/query?id_list=2609.00065),并从该记录中获取作者列表、年份和版本。如果该记录列出了期刊参考文献或出版商 DOI,请改为引用已发表版本。