AlphaFold Server 任务 JSON 文件格式详解:多任务批量建模请求的完整结构与字段规范
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
本篇技术指南以 AlphaFold 开源仓库中server/README.md为核心,系统讲解 AlphaFold Server 任务请求 JSON 文件的整体结构、name/modelSeeds/sequences三个顶层字段,以及proteinChain、dnaSequence、rnaSequence、ligand、ion五类实体(分子)的字段定义与允许取值,并逐节给出可直接复制的 JSON 示例。读完本文,你可以独立编写支持糖基化、翻译后修饰(PTM)、核酸化学修饰、配体与离子的多任务建模请求文件,并理解随机种子在本项目 JAX 推理链路中的实际作用。
1. 任务请求文件的总体结构:一个列表对应多个 Job
AlphaFold Server 的任务请求文件是一个JSON 列表——即使只提交一个任务,也必须使用单元素列表包裹。列表中每个元素是一个字典,对应一个独立的建模 Job:
[ { "name": "Test Fold Job Number One", "modelSeeds": [], "sequences": [ ... ] }, { "name": "Test Fold Job Number Two", "modelSeeds": [], "sequences": [ ... ] } ]仓库中提供的完整示例文件 server/example.json 正是这一结构的实例:它包含两个 Job,第一个 Job 同时建模两条蛋白链、一对 DNA 双链(两条dnaSequence)、一条 RNA、两个配体和两种离子,第二个 Job 则是一个"一条蛋白链 + 一条 DNA"的简单组合。
每个 Job 字典包含三个键:
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 任务名,在 Server 的作业历史表中以此显示 |
modelSeeds | list of uint32 字符串 | 随机种子列表,例如["1593933729", "4273"];推荐留空[],由 Server 自动分配一个随机种子 |
sequences | list of dict | 待建模实体(分子)列表,每个元素描述一个实体 |
两个关键特性值得注意:
- 一个文件可指定多个 Job——这使得该格式天然适合自动化重复性建模任务(例如筛查一个蛋白与若干个候选分子的相互作用);
- JSON 文件不允许写注释,编写自动化脚本生成请求文件时要避免在生成器中注入注释。
文档同时给出了一条实用建议:最简单的起步方式是通过 AlphaFold Server 的 Web GUI 提交一次任务,然后从结果 zip 包中取出<job_name>_job_request.json(其中保存了该任务的完整输入 JSON),用它作为模板在文本编辑器或 Colab 等编程环境中修改,比从零手写更可靠。
2. 随机种子(modelSeeds)在本项目推理链路中的真实含义
modelSeeds看起来只是 Server 服务端的输入参数,但从本仓库的源码结构看,它对应的是 JAX 推理管线中的随机数发生器(PRNG)种子,具有明确的复现语义:
- 在本地推理入口 run_alphafold.py 中,若未显式指定
--random_seed,系统会随机抽取一个种子:random_seed = random.randrange(sys.maxsize // len(model_runners));随后在 run_alphafold.py 按模型索引派生每个模型的种子:model_random_seed = model_index + random_seed * num_models。 - 种子最终在 alphafold/model/model.py 的
RunModel.predict中消费:result = self.apply(self.params, jax.random.PRNGKey(random_seed), feat)。该方法的文档字符串特别指出:在 Multimer 模型中,随机种子控制 MSA 采样——这意味着固定种子可以在一定程度上复现同一输入下的采样行为。 - 仓库还通过 alphafold/model/prng.py 中的
SafeKey包装器管理 PRNG key 的使用(防止同一 key 被重复消费),说明种子在整个前向计算图中是被严格追踪的。
因此 Server 侧的modelSeeds语义与本地--random_seed一脉相承:提供多个种子即等价于运行多次独立采样。官方推荐做法是提交空列表[],让服务自动分配单个随机种子;只有在需要复现性验证或多采样比较时才显式指定 uint32 种子值。
3. 实体类型总览
sequences列表中每个元素的键名即实体类型,与 AlphaFold Server Web 界面支持的类型一一对应:
| 实体类型 | 用途 |
|---|---|
proteinChain | 蛋白质链 |
dnaSequence | DNA(单链) |
rnaSequence | RNA(单链) |
ligand | 允许的配体 |
ion | 允许的离子 |
每类实体都带一个整数count字段,表示该分子的拷贝数。以下按类型逐一展开字段说明与示例(均继承自 server/README.md,并对照 server/example.json 校验过)。
3.1 蛋白质链(proteinChain)
sequence:蛋白序列字符串。约束与 Web UI 相同,只允许 IUPAC 定义的氨基酸字母,仅支持 20 种标准氨基酸;count:该链的拷贝数(整数);glycans(可选):糖基化描述列表,每项包含:residues:定义糖链的字符串(格式与允许的糖基类型可参考 Server FAQ);position:糖链连接的氨基酸位置(整数,1-based 索引);
modifications(可选):翻译后修饰(PTM)描述列表,每项包含:ptmType:修饰的CCD 码字符串(与 UI 允许的一致);position:被修饰氨基酸的位置(整数)。
允许出现的蛋白 PTM CCD 码共 22 个:CCD_SEP、CCD_TPO、CCD_PTR、CCD_NEP、CCD_HIP、CCD_ALY、CCD_MLY、CCD_M3L、CCD_MLZ、CCD_2MR、CCD_AGM、CCD_MCS、CCD_HYP、CCD_HY3、CCD_LYZ、CCD_AHB、CCD_P1L、CCD_SNN、CCD_SNC、CCD_TRF、CCD_KCR、CCD_CIR、CCD_YHA。
示例(与 server/example.json 中第一个 Job 的两条蛋白链一致):
{ "proteinChain": { "sequence": "PREACHINGS", "glycans": [ { "residues": "NAG(NAG)(BMA)", "position": 8 }, { "residues": "BMA", "position": 10 } ], "modifications": [ { "ptmType": "CCD_HY3", "ptmPosition": 1 }, { "ptmType": "CCD_P1L", "ptmPosition": 5 } ], "count": 1 } }, { "proteinChain": { "sequence": "REACHER", "count": 1 } }注意glycans中residues使用括号表达分支结构(NAG(NAG)(BMA)表示一个 NAG 上挂有 NAG 与 BMA 两个分支),position是 1-based,编写脚本换算 0-based 索引时要小心。
3.2 DNA 链(dnaSequence)
dnaSequence类型指的是单链 DNA。若要建模双链 DNA,需要另外添加一条携带反向互补序列的dnaSequence——server/example.json 中GATTACA与TGTAATC两条链即构成一对互补双链。
sequence:DNA 序列字符串,只允许A、T、G、C四个字母(与 UI 约束相同);count:该 DNA 链的拷贝数(整数);modifications(可选):DNA 化学修饰列表,每项包含:modificationType:修饰的 CCD 码字符串;basePosition:被修饰核苷酸的位置(整数)。
允许的 DNA 修饰 CCD 码共 9 个:CCD_5CM、CCD_C34、CCD_5HC、CCD_6OG、CCD_6MA、CCD_1CC、CCD_8OG、CCD_5FC、CCD_3DR。
示例:
{ "dnaSequence": { "sequence": "GATTACA", "modifications": [ { "modificationType": "CCD_6OG", "basePosition": 1 }, { "modificationType": "CCD_6MA", "basePosition": 2 } ], "count": 1 } }, { "dnaSequence": { "sequence": "TGTAATC", "count": 1 } }3.3 RNA 链(rnaSequence)
sequence:RNA 序列(单链)字符串,只允许A、U、G、C四个字母;count:该 RNA 链的拷贝数(整数);modifications(可选):RNA 化学修饰列表,字段结构与 DNA 相同(modificationType+basePosition)。
允许的 RNA 修饰 CCD 码共 14 个:CCD_PSU、CCD_5MC、CCD_OMC、CCD_4OC、CCD_5MU、CCD_OMU、CCD_UR3、CCD_A2M、CCD_MA6、CCD_6MZ、CCD_2MG、CCD_OMG、CCD_7MG、CCD_RSQ。
示例:
{ "rnaSequence": { "sequence": "GUAC", "modifications": [ { "modificationType": "CCD_2MG", "basePosition": 1 }, { "modificationType": "CCD_5MC", "basePosition": 4 } ], "count": 1 } }3.4 配体(ligand)
ligand:配体的CCD 码字符串(与 UI 允许的一致);count:该配体的拷贝数(整数)。
允许的配体共 19 个:CCD_ADP、CCD_ATP、CCD_AMP、CCD_GTP、CCD_GDP、CCD_FAD、CCD_NAD、CCD_NAP、CCD_NDP、CCD_HEM、CCD_HEC、CCD_PLM、CCD_OLA、CCD_MYR、CCD_CIT、CCD_CLA、CCD_CHL、CCD_BCL、CCD_BCB。
示例:
{ "ligand": { "ligand": "CCD_ATP", "count": 1 } }, { "ligand": { "ligand": "CCD_HEM", "count": 2 } }3.5 离子(ion)
ion:离子的 CCD 码字符串(与 UI 允许的一致);离子电荷由 CCD 码隐含指定,无需单独写电荷字段;count:该离子的拷贝数(整数)。
允许的离子共 10 个:MG、ZN、CL、CA、NA、MN、K、FE、CU、CO。
示例:
{ "ion": { "ion": "MG", "count": 2 } }, { "ion": { "ion": "NA", "count": 3 } }4. 多任务示例与本地推理的对照
文档末尾给出"一个蛋白链 + 两份回文 DNA 拷贝"的多任务示例,这里完整保留:
{ "name": "Test Fold Job Number Two", "modelSeeds": [], "sequences": [ { "proteinChain": { "sequence": "TEACHINGS", "count": 1 } }, { "dnaSequence": { "sequence": "TAGCTA", "count": 2 } } ] }需要强调的是,这套 JSON 格式面向的是AlphaFold Server 托管服务,而非本仓库的本地推理流程。本仓库开源的本地运行入口是 FASTA 文件 + docker/run_docker.py 命令行参数(--fasta_paths、--model_preset、--db_preset等),多序列 FASTA 用于multimer预设下的复合物预测(参见 README.md 中 "Folding a heteromer" 一节)。两条路径的理念相通:
- 本地多拷贝复合物通过在 FASTA 中重复序列条目实现,对应 Server JSON 中的
count字段; - 本地
--random_seed的缺省随机行为对应modelSeeds: []的自动种子分配(见第 2 节源码分析)。
因此,当你用 Server JSON 完成交互筛查后,需要把筛选出的候选迁移到本地开源管线做深度验证时,只需把 JSON 中的序列按实体类型转写为多序列 FASTA 即可,实体定义本身是等价的。
5. 编写请求文件的检查清单
结合 server/README.md 的约束与 server/example.json 的实例,生成请求文件前建议核对:
- 顶层是否为列表(即使只有一个 Job);
- 每个 Job 是否同时具备
name、modelSeeds、sequences三个键,modelSeeds留空即采用推荐的可自动分配种子的模式; - 蛋白序列是否只含 20 种标准氨基酸字母;核酸序列是否只含合法字母(DNA 为 ATGC,RNA 为 AUGC);
- 双链 DNA 是否同时提供了反向互补的第二条
dnaSequence; glycans的position是否为 1-based 且落在序列长度内;- 所有
ptmType/modificationType/ligand/ion取值是否落在本文列出的允许清单内; - 文件中是否误写了 JSON 不支持的注释。
满足以上条件后,该 JSON 即可作为批量建模任务的请求文件提交给 AlphaFold Server,结果将以 zip 包形式返回,其中同样包含<job_name>_job_request.json作为下一次迭代的模板。
【免费下载链接】alphafoldOpen source code for AlphaFold 2.项目地址: https://gitcode.com/GitHub_Trending/al/alphafold
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考