mRNA 药物(疫苗、蛋白替代疗法)的效力很大程度取决于序列设计:同样编码一个蛋白,不同的序列可能让表达量相差数十倍。优化涉及几个相互关联的维度。
mRNA 的结构组成
| 元件 | 作用 | 优化空间 |
|---|---|---|
| 5′ 帽 | 稳定性、翻译起始、免疫逃避 | Cap1 优于 Cap0(降低免疫识别) |
| 5′ UTR | 翻译起始效率 | 序列与二级结构 |
| 编码区(CDS) | 蛋白序列 | 密码子选择(主要优化对象) |
| 3′ UTR | 稳定性、定位 | 可用已知稳定元件 |
| poly(A) 尾 | 稳定性、翻译 | 长度(通常 100~150 nt) |
密码子优化:不只是「用最常见的密码子」
from collections import Counter
import numpy as np
# 人类密码子使用频率(示例,实际应用完整表)
HUMAN_CODON_USAGE = {
"L": {"CUG": 0.41, "CUC": 0.20, "UUG": 0.13, "CUU": 0.13,
"CUA": 0.07, "UUA": 0.07},
"S": {"AGC": 0.24, "UCC": 0.22, "UCU": 0.19, "AGU": 0.15,
"UCA": 0.15, "UCG": 0.05},
# ... 其余氨基酸
}
def codon_optimize_naive(protein_seq, usage=HUMAN_CODON_USAGE):
"""最朴素的做法:每个氨基酸都选最高频密码子"""
return "".join(max(usage[aa].items(), key=lambda x: x[1])[0]
for aa in protein_seq)
# 但这个做法有问题!见下文
为什么不该简单地全用最高频密码子:
- 会造成极高的 GC 含量:人类高频密码子多以 G/C 结尾,全用它们会让 GC 含量过高,导致强二级结构,反而抑制翻译;
- 破坏翻译节奏:某些位置的「慢密码子」对共翻译折叠是必要的,全部换成快密码子可能导致蛋白错误折叠;
- 可能引入非预期基序:剪接位点、poly(A) 信号、限制酶位点等;
- tRNA 丰度的组织特异性:不同组织的 tRNA 池不同。
多目标优化
import RNA # ViennaRNA
def evaluate_mrna_sequence(cds, utr5="", utr3=""):
"""综合评估 mRNA 序列质量"""
full = utr5 + cds + utr3
metrics = {}
# 1) GC 含量 —— 影响稳定性与二级结构
gc = (cds.count("G") + cds.count("C")) / len(cds)
metrics["gc_content"] = gc # 通常 50~60% 较好
# 2) 密码子适应指数(CAI)
metrics["cai"] = compute_cai(cds) # 越接近 1 越「宿主友好」
# 3) 二级结构自由能
fc = RNA.fold_compound(full)
structure, mfe = fc.mfe()
metrics["mfe"] = mfe
# 4) 关键:起始密码子区域的可及性
# 5'UTR 与起始密码子附近的强二级结构会严重抑制翻译起始
start_region = full[len(utr5)-20 : len(utr5)+30]
fc_start = RNA.fold_compound(start_region)
_, mfe_start = fc_start.mfe()
metrics["start_region_mfe"] = mfe_start # 越接近 0(越松散)越好
# 5) 有害基序检查
BAD_MOTIFS = {
"cryptic_splice_donor": "GGTAAG",
"cryptic_splice_acceptor": "TTTTTTTTTTNCAG",
"polyA_signal": "AATAAA",
"are_element": "ATTTA", # AU 富集元件,降低稳定性
}
metrics["bad_motifs"] = {
name: cds.replace("U","T").count(m)
for name, m in BAD_MOTIFS.items() if "N" not in m
}
# 6) 均聚物(影响合成与保真度)
metrics["max_homopolymer"] = max(
len(run) for run in __import__("re").findall(r"(.)\1*", cds))
return metrics
二级结构的双面性
- 不利的一面:5′ UTR 与起始密码子附近的强二级结构阻碍核糖体扫描与翻译起始——这是最需要避免的。
- 有利的一面:编码区内适度的二级结构能提高 mRNA 的稳定性(抵抗核酸酶降解),从而延长表达时间。
- 因此优化目标是分区的:5′ 端保持松散,编码区适度折叠。
LinearDesign 等工具(见 189《PaddleHelix》)正是同时优化密码子使用与二级结构稳定性——把这个多目标问题形式化为可高效求解的形式。
修饰核苷酸:降低免疫原性的关键
| 修饰 | 作用 |
|---|---|
| N1-甲基假尿苷(m1Ψ) | 降低先天免疫识别 + 提高翻译效率,现已成为标准 |
| 假尿苷(Ψ) | 较早使用,效果不如 m1Ψ |
| 5-甲基胞苷(m5C) | 降低免疫刺激 |
| Cap1 结构 | 被识别为「自身」RNA,避免 RIG-I 激活 |
用修饰核苷酸替换尿苷是 mRNA 药物可行的关键突破之一:未修饰的体外转录 mRNA 会强烈激活先天免疫(TLR7/8、RIG-I),导致炎症反应并抑制翻译。m1Ψ 修饰同时解决了免疫原性与表达量两个问题。
纯度控制:双链 RNA 污染
# 体外转录过程会产生双链 RNA(dsRNA)副产物
# dsRNA 是强免疫刺激物,即使含量很低也会显著影响效果
#
# 控制手段:
# 1) 优化转录条件(温度、酶、模板设计)
# 2) 纯化:HPLC、纤维素层析
# 3) 质控:dsRNA 特异性抗体(J2)点杂交
#
# 这是从实验室到临床的关键工艺环节 ——
# 序列设计得再好,dsRNA 污染也会毁掉效果
优化的现实
- 密码子优化的效果难以精确预测:影响因素太多(tRNA 池、共翻译折叠、mRNA 结构、细胞状态),通常需要合成几个候选序列实测比较。
- UTR 的选择往往比密码子优化影响更大:用已验证的高效 UTR(如某些球蛋白基因的 UTR)是常见做法。
- 实验验证不可替代:设计 3~5 个变体,在细胞和动物中测表达量与持续时间。
- 递送是另一个决定因素:再好的序列,递送不到细胞里也没用(见 378《LNP 递送系统》)。
关键要点
- 不要简单地全用最高频密码子——会造成 GC 过高、二级结构过强、破坏共翻译折叠;
- 优化目标是分区的:5′ 端与起始密码子附近保持松散,编码区适度折叠;
- m1Ψ 修饰同时解决免疫原性与表达量,是 mRNA 药物可行的关键;
- dsRNA 污染即使微量也会毁掉效果,纯度控制与序列设计同等重要。
延伸资源
- 递送:378《LNP 递送系统》;ASO/siRNA 对照:375《反义寡核苷酸 ASO》、376《siRNA 设计》;
- 工具:189《PaddleHelix》(LinearDesign)。