377

mRNA 序列优化:密码子、二级结构与稳定性

mRNA 序列优化涉及密码子、二级结构与修饰核苷酸。这篇讲清各个优化维度的作用与权衡。

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 污染即使微量也会毁掉效果,纯度控制与序列设计同等重要。

延伸资源