耐药性感染正在压缩现有抗生素的有效空间。César de la Fuente 的实验室把 Codex 和 ChatGPT 引入抗菌分子搜索流程,从现生与已灭绝物种的基因组中寻找候选序列。这里真正值得关注的并不是让语言模型直接“发明药物”,而是用它们加快代码编写、数据整理、候选排序和分析迭代,同时把生物学判断与实验验证牢牢留在研究人员手中。
AI 适合承担哪部分工作
从基因组到抗菌候选,通常要经过序列获取、开放阅读框识别、肽段生成、特征计算、候选排序和实验验证。Codex 更适合处理其中可明确描述、可测试的工程任务,例如:
- 编写 FASTA 解析、序列过滤和批量特征计算脚本。
- 把散落的分析步骤整理成可复现的数据管线。
- 为已有模型生成推理代码、测试和命令行接口。
- 定位格式错误、性能瓶颈或不一致的数据处理逻辑。
ChatGPT 则可以帮助研究人员梳理分析假设、解释结果、设计对照组,或者把自然语言研究问题转成具体的计算任务。例如,与其提问“哪些肽能杀菌”,更可靠的请求是:
你是一名生物信息学分析助手。给定候选肽表格,请完成以下任务:
1. 检查长度、净电荷代理值和疏水残基比例是否存在缺失或异常;
2. 按明确给出的评分公式重新计算排名;
3. 列出排名变化最大的 20 条序列及变化原因;
4. 不推断未经实验验证的抗菌活性;
5. 输出可审计的 Python 代码和 CSV 结果。
这种提示把模型限制在数据检查和可复现计算上,避免它把相似性、评分或语言上的合理性误写成真实药效。
一个可运行的候选肽初筛脚本
下面是一个可以直接运行或改造的最小示例。它读取候选肽 FASTA,计算长度、简化净电荷代理值和疏水残基比例,再输出排序结果。这里假设候选序列已经由经过审查的上游流程从基因组翻译得到;评分公式只是演示工程管线,不代表经过验证的抗菌活性模型。
先创建 rank_peptides.py:
#!/usr/bin/env python3
import argparse
import csv
HYDROPHOBIC = set("AILMFWVY")
POSITIVE = set("KR")
NEGATIVE = set("DE")
VALID_AA = set("ACDEFGHIKLMNPQRSTVWY")
def read_fasta(path):
name = None
chunks = []
with open(path, encoding="utf-8") as handle:
for raw_line in handle:
line = raw_line.strip()
if not line:
continue
if line.startswith(">"):
if name is not None:
yield name, "".join(chunks).upper()
name = line[1:].split()[0]
chunks = []
else:
chunks.append(line)
if name is not None:
yield name, "".join(chunks).upper()
def describe(sequence):
length = len(sequence)
charge_proxy = sum(aa in POSITIVE for aa in sequence) - sum(
aa in NEGATIVE for aa in sequence
)
hydrophobic_fraction = sum(aa in HYDROPHOBIC for aa in sequence) / length
score = 1.5 * charge_proxy + 4.0 * hydrophobic_fraction - 0.08 * abs(length - 25)
return length, charge_proxy, hydrophobic_fraction, score
def main():
parser = argparse.ArgumentParser()
parser.add_argument("fasta", help="Candidate peptide FASTA")
parser.add_argument("-o", "--output", default="ranked_candidates.csv")
args = parser.parse_args()
rows = []
for peptide_id, sequence in read_fasta(args.fasta):
if not 8 <= len(sequence) <= 60 or set(sequence) - VALID_AA:
continue
length, charge, hydrophobic, score = describe(sequence)
rows.append(
{
"id": peptide_id,
"sequence": sequence,
"length": length,
"charge_proxy": charge,
"hydrophobic_fraction": f"{hydrophobic:.3f}",
"demo_score": f"{score:.3f}",
}
)
rows.sort(key=lambda row: float(row["demo_score"]), reverse=True)
with open(args.output, "w", newline="", encoding="utf-8") as handle:
writer = csv.DictWriter(handle, fieldnames=rows[0].keys() if rows else ["id"])
writer.writeheader()
writer.writerows(rows)
print(f"Wrote {len(rows)} candidates to {args.output}")
if __name__ == "__main__":
main()
再准备一份演示输入并运行:
cat > candidates.fasta <<'EOF'
>candidate_001
KWKLFKKIGAVLKVL
>candidate_002
GIGKFLHSAKKFGKAFVGEIMNS
>candidate_003
DEDEAGSTNQ
EOF
python3 rank_peptides.py candidates.fasta
head ranked_candidates.csv
实际项目应替换演示公式,使用经过验证并具有版本记录的模型或统计方法。还应保存输入数据校验和、代码版本、模型版本、参数和随机种子,以便追踪每一个候选为何进入后续实验。
从现生到已灭绝基因组,数据问题会被放大
搜索已灭绝物种的基因组时,序列覆盖率、组装错误、污染和注释不确定性都会影响结果。模型可以生成处理这些数据的代码,却无法自动消除输入数据的偏差。候选记录至少应携带物种、样本或组装来源、基因组坐标、阅读框、翻译规则和质量标记。
去重也不能只比较字符串是否完全相同。研究人员可能需要同时检查序列同一性、共同祖先导致的重复、低复杂度区域,以及候选是否来自可疑组装片段。若 AI 生成了聚类或过滤代码,应使用小型已知数据集测试边界条件,并人工审查被排除的样本。
把模型输出变成可审计的研究流程
语言模型的输出并不是实验结果。它可能引用不存在的方法、误解字段含义,或生成表面正确但悄悄改变单位和过滤条件的代码。更稳妥的采用方式包括:
- 把提示词、模型名称和关键回答与代码一起版本化。
- 要求生成单元测试,并用人工构造的正反例验证每个过滤条件。
- 将候选发现数据与最终评估数据分开,避免选择偏差和数据泄漏。
- 在合成或实验测试前,检查毒性、溶血风险、稳定性和序列来源等指标。
- 由具备相应设施和审批条件的实验室完成安全、活性与机制验证。
Codex 和 ChatGPT 最有价值的角色,是把研究人员从重复的数据工程工作中释放出来,让假设更快地变成可运行、可检查的分析。但候选排名只是起点:只有透明的数据来源、可复现的计算流程和严格的实验验证,才能把基因组中的信号推进为可信的抗菌分子。