news 2026/9/11 7:16:29

调用 AlphaFold Python API 做蛋白质结构预测:从序列到三维结构的完整实操

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
调用 AlphaFold Python API 做蛋白质结构预测:从序列到三维结构的完整实操

调用 AlphaFold Python API 做蛋白质结构预测:从序列到三维结构的完整实操

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

AlphaFold 把蛋白质氨基酸序列转成三维结构,是蛋白质结构预测里最常被调用的开源实现。本文用它的 Python API 走一遍完整流程:备料、推理、验货。你会碰到三个真正干活的对象——DataPipeline负责把序列喂成模型能吃的特征,RunModel负责吐出原子坐标,AmberRelaxation负责把坐标捋顺并写成 PDB。下面按真实工作流走一遍,代码量很小,能直接跑。

一条序列是怎么变成三维结构的

在动手之前,先有张地图,避免一会儿写代码写晕。整个链路其实就四段:你手里一条氨基酸序列,先去数据库里搜出一大堆"远房亲戚"(同家族的已知序列)做参考,这一步叫 MSA(多序列比对),再顺便找几个长得像的已知结构当模板;然后把这些信息打包成一个特征字典交给神经网络做推理;推理出来的是原子坐标,但还带一点"模型毛刺",最后用分子力场松弛一下,落成标准 PDB。

理解了这条链,下面四段代码各自对应哪个环节就一目了然了。

环境怎么搭、数据库怎么准备

跑通预测前,先得有代码和模型参数。代码从仓库克隆下来,装上 Python 依赖并把它作为包安装;模型参数单独放一个目录,之后用路径指过去即可。

git clone https://gitcode.com/GitHub_Trending/al/alphafold alphafold pip install -r alphafold/requirements.txt pip install -e alphafold

数据库是另一个大头。它决定 MSA 搜得有多全,scripts/download_all_data.sh能一键拉全,但完整体积约 2.2TB,日常开发没必要。更现实的做法是只下 UniRef90、MGnify、BFD、PDB70、PDB mmCIF 这几块,路径约定好、能对上DataPipeline的参数就行。参数文件用scripts/download_alphafold_params.sh单独拉,缺了它后面会直接报"文件找不到"。

先用数据管道给模型备料

DataPipeline是备料的主力,你只需把每个工具的二进制路径、每套数据库的路径告诉它,它就会自己跑 jackhmmer、hhblits、hhsearch 这些比对程序。这里的"为什么"是:模型自己不读原始序列,它读的是 MSA 和模板拼出来的特征,所以这一步的质量直接决定预测上限。

from alphafold.data import pipeline, templates from alphafold.data.tools import hhsearch data_pipeline = pipeline.DataPipeline( jackhmmer_binary_path="/usr/bin/jackhmmer", hhblits_binary_path="/usr/bin/hhblits", uniref90_database_path=f"{data_dir}/uniref90/uniref90.fasta", mgnify_database_path=f"{data_dir}/mgnify/mgy_clusters_2022_05.fasta", bfd_database_path=f"{data_dir}/bfd/bfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt", uniref30_database_path=f"{data_dir}/uniref30/UniRef30_2021_03", template_searcher=hhsearch.HHSearch( binary_path="/usr/bin/hhsearch", databases=[f"{data_dir}/pdb70/pdb70"]), template_featurizer=templates.HhsearchHitFeaturizer( mmcif_dir=f"{data_dir}/pdb_mmcif/mmcif_files", max_template_date="2021-12-01", max_hits=20, kalign_binary_path="/usr/bin/kalign"), use_small_bfd=False, ) feature_dict = data_pipeline.process("input.fasta", "msa_output")

跑完processfeature_dict里就有 MSA、模板、序列三类特征了。msa_output目录会被它用来缓存比对结果,后面复跑同一序列能省时间。

让 RunModel 出坐标

备料完成后,把特征喂给RunModel。它内部先process_features把 NumPy 特征字典规整成模型形状,再predict出结果字典。之所以先做process_featurespredict,是因为这两步用的随机种子可以分开控制,方便你复现同一次预测。

from alphafold.model import model, config, data model_name = "model_1" model_config = config.model_config(model_name) model_params = data.get_model_haiku_params(model_name=model_name, data_dir=data_dir) model_runner = model.RunModel(model_config, model_params) processed = model_runner.process_features(feature_dict, random_seed=42) result = model_runner.predict(processed, random_seed=42)

result是个字典,拿到手后先看这几个键:structure_module里是原子坐标(final_atom_positions),predicted_lddt是逐残基的置信度 logits,predicted_aligned_error是对齐误差的 logits,另外代码会自动帮你算好现成的plddtpredicted_aligned_error数组,读结果时直接用现成的更省事。

松弛并落成 PDB

模型吐出的坐标还带着"毛刺",AmberRelaxation用分子力场把它捋顺并补上氢原子,再交给protein.to_pdb落盘。注意 B 因子用 pLDDT 填进去,这样在可视化工具里颜色就能反映置信度。

from alphafold.common import protein, residue_constants from alphafold.relax import relax import numpy as np plddt = result["plddt"] b_factors = np.repeat(plddt[:, None], residue_constants.atom_type_num, axis=-1) unrelaxed = protein.from_prediction( features=processed, result=result, b_factors=b_factors, remove_leading_feature_dimension=False, ) amber_relaxer = relax.AmberRelaxation( max_iterations=0, tolerance=2.39, stiffness=10.0, exclude_residues=[], max_outer_iterations=3, use_gpu=True, ) relaxed_pdb, _, _ = amber_relaxer.process(prot=unrelaxed) open("predicted.pdb", "w").write(relaxed_pdb)

use_gpu=True时松弛会明显更快;如果结构里有比较刁钻的残基,把max_outer_iterations调大一点,能覆盖到更多需要反复修的情况。

怎么读懂 pLDDT 和 PAE

这两个数别混着看,它们回答的是两个不同的问题。

pLDDT 是"每个残基靠不靠谱"。打个比方,它像老师给每个单词打的置信分:90 以上的区域,模型很确定它摆在这儿,坐标基本能信;50 到 70 之间,骨架大方向对但细节晃;低于 50 的多是无序区,模型干脆没把握。读结构时,先看这条曲线,低分的尾巴通常不用纠结。

PAE 是"任意两个残基之间的相对位置有多稳"。它是一张二维矩阵,你可以把它想成"谁和谁挨着是确定的":如果两块在序列上离得很远,但它们在矩阵里对应的格子误差很小,说明这两块在空间里确实是稳定挨在一起的——对找结合界面、看结构域相对取向特别有用。

想看 PAE 矩阵,把现成的误差数组画出来就行:

from alphafold.common import confidence import matplotlib.pyplot as plt pae = confidence.compute_predicted_aligned_error( logits=result["predicted_aligned_error"]["logits"], breaks=result["predicted_aligned_error"]["breaks"]) plt.figure(figsize=(8, 8)) plt.imshow(pae["predicted_aligned_error"], cmap="viridis") plt.colorbar(label="PAE (Å)") plt.title("Predicted Aligned Error") plt.show()

逐残基的 pLDDT 也可以直接用confidence.compute_plddt(result["predicted_lddt"]["logits"])从 logits 算出来,再存成 JSON 随结构一起走。

踩坑速查

  • 显存 / 内存不够use_small_bfd=True换小数据库,或把 MSA 上限调小;超长序列考虑切片预测。
  • 数据库体积吓人:完整下载约 2.2TB(见scripts/download_all_data.sh),开发测试只下用到的几块即可。
  • 不想每次重搜 MSA:给DataPipelineuse_precomputed_msas=True,命中msa_output里已有文件就直接读,不再跑比对。
  • get_model_haiku_params报文件找不到:参数没下,先跑scripts/download_alphafold_params.sh,再确认data_dir指向对。
  • RunModel慢得离谱:多半是 JAX 没识别到 GPU,确认 CUDA 配置正确。
  • 极端结构松弛不干净:把max_outer_iterations调大,让力场多修几轮。

接下来可以看什么

上面这条单体链路通了之后,很多事就是换参数的活:跑多链复合物把数据管道换成pipeline_multimer.DataPipeline、模型名改成model_1_multimer,其余结构基本一样,细节可看 alphafold/data/pipeline_multimer.py。想要更完整的可运行示例,notebooks/AlphaFold.ipynb 里有带可视化的全流程;想抠模型内部机制,去读 docs/technical_note_v2.3.0.md 和 run_alphafold.py 的组装方式。数据库怎么下、下到哪儿,对照 scripts/download_all_data.sh 一路点过去就行。

【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 7:15:28

区块链存证技术实战:低成本保护原创内容

1. 项目背景与核心价值在信息爆炸的时代,"谁先发布"往往比"谁更准确"更容易获得传播优势。我去年参与的一个媒体项目就深刻体会到了这点——当我们耗时两周完成的深度报道发布时,发现同主题内容已被三四个营销号用碎片化信息抢占先机…

作者头像 李华
网站建设 2026/9/11 7:15:12

QEMU仿真Apple Silicon:构建可调试的XNU内核实验床

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 7:14:36

Qt6+CMake构建工业相机图像显示软件:从SDK适配到实时渲染

简介:一款基于C与Qt 6框架、采用CMake构建的显微镜图像显示软件完整源码包,主要面向需要集成各类工业相机的软件开发者与科研人员,用于解决显微成像过程中不同品牌、分辨率、接口相机的图像采集与实时显示问题。压缩包共313个文件&#xff0c…

作者头像 李华
网站建设 2026/9/11 7:14:32

数据确权与定价技术:区块链与动态模型解析

1. 数据要素市场的价值困局2023年某省会城市的数据交易所里,一份包含10万用户消费行为的数据包正以"面议"方式挂牌出售。这个看似普通的交易场景,却暴露出数据要素市场的根本矛盾——数据持有方无法准确评估资产价值,需求方难以验证…

作者头像 李华
网站建设 2026/9/11 7:14:29

SUMO NetEdit编辑模式全解:从路网绘制到信号交叉口搭建

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 7:11:58

macOS开源工具组合拳:用Flameshot、Kap等免费替代Snipaste全家桶

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华