660 微生物代谢建模GSMM¶
一句话概述:基因组规模代谢模型(GSMM)将基因组信息转化为可计算的代谢网络,用FBA等方法预测微生物的代谢能力和种间互作。
核心知识点速查表¶
| 知识点 | 关键内容 |
|---|---|
| GSMM定义 | 将基因组所有代谢基因→酶→反应→代谢网络 |
| FBA | 流量平衡分析,预测稳态代谢通量 |
| 自动化工具 | CarveMe(快速)、gapseq(全面)、Gempipe(2025混合) |
| 群落建模 | MICOM/COMETS结合多个GSMM模拟群落代谢 |
| 大规模资源 | AGORA2(7302个人类微生物模型) |
| gap-filling | 补全不完整模型的关键步骤 |
一、什么是GSMM?(白话解释)¶
打个比方:GSMM就像给细菌画了一张完整的"代谢地图"——从基因组出发,找到所有能编码酶的基因,然后把这些酶催化的所有代谢反应串联起来,形成一个巨大的网络。有了这张地图,就可以用数学方法模拟细菌"吃什么、产什么"。
二、GSMM构建流程¶
2.1 自动化构建工具对比¶
| 工具 | 速度 | 数据库 | 特点 | 2024-2025状态 |
|---|---|---|---|---|
| CarveMe | ~10分钟/模型 | BiGG | 自上而下,速度快 | 活跃维护 |
| gapseq | 1-2小时/模型 | SEED+多源 | 全面准确,gap-filling优秀 | 活跃维护 |
| ModelSEED/KBase | ~10分钟 | SEED | 网页版易用 | 活跃维护 |
| Gempipe(2025新) | 中等 | 混合 | 泛基因组/多菌株建模 | 新发布 |
2.2 用CarveMe构建模型¶
# CarveMe安装
conda create -n carveme python=3.9 # 创建conda环境
conda activate carveme # 激活环境
pip install carveme # 安装CarveMe
# 从蛋白质序列构建GSMM
carve genome.faa \ # 输入:蛋白质fasta文件
-o model.xml \ # 输出:SBML格式的代谢模型
--solver cplex \ # 求解器(也可用glpk)
-g M9 \ # Gap-filling用的培养基(M9)
--init M9 # 初始化培养基
# 从基因组直接构建(自动调用Prodigal预测基因)
carve genome.fna \ # 输入:核酸fasta文件
-o model.xml \ # 输出模型
--dna # 表示输入是DNA序列
2.3 用gapseq构建模型¶
# gapseq安装
git clone https://github.com/jotech/gapseq.git # 克隆仓库
cd gapseq # 进入目录
bash src/update_sequences.sh # 下载参考序列
# 1. 预测代谢通路
./gapseq find \
-p all \ # 预测所有代谢通路
-b 200 \ # BLAST比特分数阈值
genome.fna # 输入基因组
# 2. 预测转运蛋白
./gapseq find-transport \
genome.fna # 预测膜转运蛋白
# 3. 构建草稿模型
./gapseq draft \
-r genome-all-Reactions.tbl \ # 反应预测结果
-t genome-Transporter.tbl \ # 转运蛋白预测
-c genome.fna \ # 基因组序列
-p genome-all-Pathways.tbl # 通路预测结果
# 4. Gap-filling(补全模型)
./gapseq fill \
-m genome-draft.RDS \ # 草稿模型
-n gut_medium.csv \ # 培养基组成
-c genome-rxnWeights.RDS \ # 反应权重
-g genome-rxnXgenes.RDS # 基因-反应对应
三、FBA(流量平衡分析)¶
# 使用COBRApy进行FBA分析
import cobra # 基于约束的代谢建模
# 读取模型
model = cobra.io.read_sbml_model("model.xml") # 读取SBML格式模型
print(f"模型包含: {len(model.reactions)} 反应, "
f"{len(model.metabolites)} 代谢物, "
f"{len(model.genes)} 基因")
# 1. 基本FBA:最大化生物量
solution = model.optimize() # 求解FBA
print(f"最大生长速率: {solution.objective_value:.4f} h⁻¹") # 目标函数值
print(f"求解状态: {solution.status}") # optimal=成功
# 2. 查看关键反应的通量
import pandas as pd
fluxes = solution.fluxes # 所有反应的通量
# 找出活跃反应(通量>0)
active = fluxes[fluxes.abs() > 1e-6] # 过滤掉零通量反应
print(f"活跃反应数: {len(active)}/{len(fluxes)}")
# 3. 模拟不同培养基条件
with model: # 上下文管理器,不修改原模型
# 关闭葡萄糖摄入,打开乳糖
model.reactions.get_by_id("EX_glc__D_e").lower_bound = 0 # 禁止葡萄糖摄入
model.reactions.get_by_id("EX_lcts_e").lower_bound = -10 # 允许乳糖摄入
sol_lactose = model.optimize() # 用乳糖的生长速率
print(f"乳糖培养基生长速率: {sol_lactose.objective_value:.4f}")
# 4. 基因敲除分析
with model:
gene = model.genes.get_by_id("gene_001") # 获取目标基因
gene.knock_out() # 基因敲除
sol_ko = model.optimize() # 敲除后的生长
print(f"敲除后生长速率: {sol_ko.objective_value:.4f}")
四、群落代谢建模¶
4.1 MICOM¶
# MICOM群落代谢建模
# pip install micom
from micom import Community # MICOM群落类
from micom.workflows import build, grow # 工作流函数
import pandas as pd
# 1. 准备群落组成数据
taxonomy = pd.DataFrame({
"id": ["bac1", "bac2", "bac3"], # 物种ID
"genus": ["Bacteroides", "Faecalibacterium", "Bifidobacterium"], # 属名
"abundance": [0.3, 0.25, 0.15], # 相对丰度
"file": ["models/bac1.xml", "models/bac2.xml", "models/bac3.xml"] # 模型路径
})
# 2. 构建群落模型
com = Community(taxonomy,
id="gut_community", # 群落ID
progress=True) # 显示进度
# 3. 合作权衡FBA(群落FBA)
sol = com.cooperative_tradeoff(fraction=0.5) # fraction=个体目标的最低比例
print(f"群落生长速率: {sol.growth_rate:.4f}") # 群落总生长
print(sol.members) # 各成员的生长状态
# 4. 代谢物交换分析
exchanges = sol.exchanges # 物种间代谢物交换
# 找出交叉喂养(cross-feeding)
cross_feeding = exchanges[exchanges["flux"].abs() > 1e-6] # 有显著交换的代谢物
print("代谢物交换:")
print(cross_feeding[["metabolite", "taxon", "flux"]].head(20))
4.2 COMETS空间建模¶
# COMETS空间代谢建模
# pip install cometspy
import cometspy as c # COMETS Python接口
# 1. 创建布局(空间网格)
layout = c.layout() # 初始化空间布局
layout.grid = [10, 10] # 10x10网格
# 2. 添加物种模型
model1 = c.model(cobra.io.read_sbml_model("ecoli.xml")) # 大肠杆菌
model2 = c.model(cobra.io.read_sbml_model("bsubtilis.xml")) # 枯草杆菌
layout.add_model(model1) # 添加到布局
layout.add_model(model2)
# 3. 设置培养基
layout.set_specific_metabolite("glc__D_e", 0.01) # 葡萄糖浓度
layout.set_specific_metabolite("o2_e", 0.001) # 氧气浓度
# 4. 模拟参数
params = c.params() # 模拟参数
params.set_param("maxCycles", 100) # 最大模拟步数
params.set_param("timeStep", 0.1) # 时间步长(小时)
# 5. 运行模拟
experiment = c.comets(layout, params) # 创建COMETS实验
experiment.run() # 运行模拟
biomass = experiment.total_biomass # 获取生物量时间序列
print(biomass.head())
五、从MAG到GSMM¶
# 从宏基因组MAG构建GSMM的流程
# 1. MAG质量评估
checkm lineage_wf mag_folder/ checkm_output/ -x fa -t 8 # CheckM质量评估
# 2. 基因预测
prodigal -i mag.fa -a mag_proteins.faa -o mag_genes.gff -p meta # Prodigal基因预测
# 3. 用CarveMe构建模型
carve mag_proteins.faa -o mag_model.xml -g M9 # 从MAG蛋白构建GSMM
# 4. 模型质量检查(MEMOTE)
memote run --filename mag_model_report.html mag_model.xml # MEMOTE评分
常见报错与解决¶
| 报错 | 原因 | 解决方案 |
|---|---|---|
| FBA求解infeasible | 模型有不可行约束 | 检查培养基设置,确保必需营养物可用 |
| Gap-filling添加了太多反应 | 基因组不完整(MAG) | 用2024年iScience的深度学习方法补全 |
| MICOM群落FBA不收敛 | 物种太多/通量冲突 | 减少物种数或调整cooperative_tradeoff参数 |
| 模型无法在给定培养基生长 | 培养基缺少必需营养 | 用gapseq的-n参数指定正确的培养基文件 |
| CarveMe报"no CPLEX license" | 缺商业求解器 | 改用免费的glpk:--solver glpk |
速查表¶
# GSMM分析流程
基因组/MAG → 基因预测(Prodigal) → 功能注释
→ 模型构建(CarveMe/gapseq) → Gap-filling
→ 质量评估(MEMOTE) → FBA分析(COBRApy)
→ 群落建模(MICOM/COMETS)
# 工具选择
速度优先 → CarveMe
准确性优先 → gapseq
多菌株分析 → Gempipe (2025)
群落代谢 → MICOM (Python) / COMETS (空间模拟)
模型质量评估 → MEMOTE
# 大规模模型资源
AGORA2: 7,302个人类微生物GSMM (Nature Biotechnology 2022)
2025年Cell Systems: 247,092个多大洲微生物GSMM
面试高频问题¶
Q1:什么是FBA?它的核心假设是什么? A:FBA(Flux Balance Analysis)通过线性规划在代谢网络的稳态约束下最大化目标函数(通常是生物量)来预测代谢通量。核心假设:(1) 稳态(代谢物浓度不变);(2) 优化某个目标(如最大化生长)。
Q2:CarveMe和gapseq有什么区别? A:CarveMe是自上而下方法(从通用模型剪裁),快速(~10min)但可能不够精确;gapseq是自下而上方法(从头预测通路),更全面(1-2h)但更慢。2024年npj Systems Biology研究建议用共识模型(多工具整合)减少不确定性。
Q3:什么是gap-filling?为什么需要它? A:gap-filling是补全代谢模型中缺失反应的过程。因为基因组注释不完整(尤其MAG),有些已知存在的代谢能力在模型中缺少相应反应,需要用算法推断并添加这些缺失的反应,使模型能够模拟真实的代谢行为。
Q4:如何用GSMM分析群落代谢互作? A:(1) 为每个物种构建GSMM;(2) 用MICOM/COMETS组合成群落模型;(3) cooperative tradeoff FBA求解群落最优;(4) 分析代谢物交换找出交叉喂养关系。2025年的Virtual Colon还能模拟肠道的空间结构和粘液层。