Personal Genome · 三段真实体验

等待、反复、地基:
我花几千块测了自己的全基因组,然后摸索了半个月

这不是教程,是一份诚实的体验记。一个非生物专业的普通人,花几千块做了全基因组测序,把原始数据要回来,用 AI 辅助一步步分析自己的身体。中间有漫长的等待、把人逼到投诉的数据索要、反复掉链子的工具环境、来回摇摆的研究方向。但最后沉淀下来的,是一个能追溯、能审计、复利很高的地基。

样本 我自己Mac Mini 本地跑GRCh38 · 46.7×461 万变异2026 春

1漫长的等待:从掏钱到第一个能用的结果

这一段占了整件事一半的时间和力气。大部分不是"分析",是"等"和"让工具先别崩"。

1.1 数据要不回来,我最后是靠投诉拿到的

第一关不是技术,是拿到自己的数据。测序费几千块付了,但向华大索要原始数据这一步卡得离谱。我打了三次客服电话,都没下文。最后没办法,直接给华大基因的投资者关系写了一封投诉邮件——结果很有意思:一投诉,第二天数据就发过来了

这件小事其实说明了消费级基因组的一个现实:你买的是测序,但"拿回属于自己的原始数据"并不被默认支持,得自己争取。这也是后面我把"数据可携带性"列进基因检测产品评测标准的原因。

1.2 文件大到改变直觉,机器要全速跑很久

数据到手才发现真正的体力活是文件大小。原始FASTQ 几十 GB,比对后的 BAM53 GB,连参考基因组本身都 3 GB,而我下的注释数据库里最大的一个(dbNSFP)有 47 GB。每一步——比对、变异检出——都要跑几个小时。

我在 Mac Mini 上本地跑。一个真实的硬件细节:我给它加装了散热风扇,让它能全速运行不降频。苹果芯片过热会自动降速保护硬件,几小时的任务会被拖更久;风扇压住温度,等于把"等待"缩短了。

1.3 搭环境:为什么要建 5 个互相隔离的"工作间"

生信工具不是装上就能用,它们会互相拆台(下面有血的教训)。所以我用 conda 把工具拆进互相隔离的环境,每个环境只装一类活该用的东西:

genomics

核心:bwa(比对)、samtools/bcftools/tabix 1.21、SnpEff(注释)、mosdepth(测深度)、Python+pandas

gatk

变异检出隔离:GATK4 4.6.1.0 + 自带 openjdk 17 + python 3.11

qc

质控:verifybamid2(查样本有没有被污染)

ai4s

AI 分析:AlphaGenome 等模型库

(后来为了 Y 染色体单倍群又加了第 5 个 yhaplo311。)拆环境不是洁癖,是被坑出来的纪律。

1.4 注释库:几十 GB 的"翻译词典"要慢慢下

光有变异表没用,还得有"词典"把每个变异翻译成含义。我下了几套大型注释数据库:

加上 GATK 官方的参考基因组包(3 GB,还要建一堆索引),光"准备原料"就占了第一晚的大半。

⚠️ 1.5 损失 7 小时的那次:一个安装,悄悄把另一个工具降级了

这是整件事里最典型的一个坑,值得讲细。

我跑自动化流水线时,某一步突然报"BAM 文件损坏"。BAM 是 53 GB 的核心文件,报损坏意味着前面几小时白跑。我反复重试、重跑,烧掉了大约 7 个小时,都过不去。

最后定位到真凶:之前我装注释工具(SnpEff/VEP)时,conda 为了满足它们的依赖,偷偷把 samtools 从 1.21 降级到了 0.1.19——那是 2013 年的老版本。而我的流水线用 samtools quickcheck 来快速校验 BAM 完整性,可老版本根本没有 quickcheck 这个命令。命令不存在 → 流水线误判"BAM 坏了" → 不停重试。文件其实一直好好的。

修复:重装 samtools 1.21,并在 conda 的 pinned 文件里锁死 samtools/htslib/bcftools 的 1.21 版本,从此任何安装都不准再动它们。这 7 小时换来一条铁律——工具链不是"装上就行",是"装上还要防它们互相拆台"

1.6 其他几个让流水线中途崩掉的依赖坑

现象解法
GATK 被挤掉openjdk 被升到 25,但 GATK4 要 17,在主环境里怎么都跑不起来单独建 gatk 环境(GATK4 + 自带 jdk17),脚本里写死它的路径
VEP 在苹果芯片崩变异注释工具 VEP 在 osx-arm64 反复段错误放弃 VEP,换成 SnpEff 5.4c
conda 激活报错脚本开了严格模式(set -u),conda 激活时引用了未定义变量直接退出set +u 把 conda 激活那几行包起来
macOS 的 zcat 不认 .gz苹果自带 zcat 找 .Z 老格式,解不开 .gz全改成 gunzip -c

1.7 真正的流水线:从读段到变异表

环境终于稳了,才跑得动主流程(每步都是几小时起):

  1. 比对:用 BWA-MEM 把几十 GB 的短读段一段段贴回参考基因组 → 排序 → 去重 → 得到 53 GB 的 BAM
  2. 变异检出:用 GATK4 的 HaplotypeCaller,逐条染色体 4 路并行跑(跑了一整晚,VCF 在清晨 3:38 出来)
  3. 过滤 + 归一化:对 SNP 和插入缺失分别硬过滤,再归一化(统一表示方式,491 万 → 500 万行)
  4. 关于 BQSR(碱基质量重校准)我评估后跳过了——这个平台的质量值偏移很小,重跑不划算。诚实记录"为什么不做"也是工作的一部分。

1.8 跑完先"体检":质控门禁

变异表出来不能马上信,得先过质控。几个关键指标全绿才往下走:

461万PASS 变异 2.02Ti/Tv 比(正常) 0.0006FREEMIX(无污染) 46.7×平均深度 6.2%硬过滤剔除率
原始 FASTQ ~74 GB
比对 BAM 53 GB
变异 VCF 170 MB · 461万
可用结论 几十条 · 带证据

↑ 整个过程是一个剧烈收敛的漏斗:74 GB 原始读段,层层浓缩,最后变成几十条能说人话、带证据的结论。每往下一层,都是几小时的机器时间和一堆躲不掉的坑。

2VCF 出来之后:三个监工,和反复的方向

当原始数据变成一张能查询的变异表,真正的难题才开始——不是"怎么算",是"该研究什么"。

VCF 是分水岭:从"一堆只能等的大文件",变成"一张能随时查询的变异表"。但马上撞上更难的问题——方向。能挖的东西无穷多,到底该挖什么?这半个月里方向被反复调整,背后是三个"AI 监工"轮流上阵,各有所长也各有盲点。

2a · 应付了事 最初

一开始太简单——只跑了几个网红位点(香菜、耳垢、酒精代谢那类)拼了张趣味清单。看着热闹,其实只是"查表":这些常见位点谁测都查得到,跟我花钱测全基因组的意义不匹配。

2b · Claude 监工 → 跑出真成果 深一层

在 Claude 盯促下开始动真格:用 DeepMind 的 AlphaGenome 模型,预测我自己携带的代谢变异对基因表达的影响。关键验证:模型在不知情下,独立把我携带的两个已知功能变异排进高分位,说明它对我的预测不是瞎猜。这才真正用上了全基因组数据。

2c · ChatGPT 监工 → 意见很多,但过火了 外部视角

后来让 ChatGPT 当监工,它给了份质量很高、框架漂亮的审计。但它过火了:一口气列 15 条研究主线、8 个优先项,合起来几个月工作量。它在"如何把项目做大"的惯性里冲得猛,却跳过了最该问的——我现在到底该不该再投这么多时间。它把"可做"和"该做"混为一谈。

2d · Claude 纠偏 → 因为它更懂我的处境 收敛

最后让更懂我真实背景(创业、注意力稀缺)的 Claude 纠偏。它做了 ChatGPT 没做的事——:从 15 条砍到 3 条有主次的,并指出真正稀缺的不是基因组还能产出的第 N 个发现,是我的注意力。

这段最大的体会:用不同 AI 互相监工意外有用——但你得知道每个 AI 的盲点。一个会应付,一个会过度扩张,一个懂得在你真实约束里踩刹车。最终拍板的还得是你,因为只有你知道自己在什么处境里。

方向反复里,踩过的几个"会让结论整个反掉"的坑

这些不烧时间,但更危险——代码跑得好好的,结论却是错的。

坐标被标错了染色体

现实查到的基因组坐标错了一大半:有个位点被标到 5 号染色体,实际在 15 号;另几个坐标互相串位。在错位置上查出的"基因型"全是垃圾。
解法每个位点用 rsIDEnsembl 逐个核坐标;再设阳性对照——拿已知结果的位点校验,对不上就说明出错了。
💡 二手坐标不可信,必须独立核;对照是抓系统性错误的唯一办法。

链方向记反一个,解读就全反(最危险)

现实基因有正负链(strand)之分,基因组层面的碱基可能和文献正好互补。我有个代谢位点照文献直接数会得"0 个风险",实际携带 1 个;酒精代谢那个位点方向记反,"能喝"就会写成"一喝就倒"。
解法全部统一到正链,用蛋白质氨基酸映射(VEP)核对哪个碱基对应哪个风险。
💡 哪个等位基因是风险记错一个,整份解读方向就反了。这是全项目最该裱起来的一条。

数据库里"分类有冲突",被当成了"致病"

现实初筛"命中"12 个致病变异,吓一跳。一查全是 ClinVar 里标着"分类冲突"的(提交者没达成一致),是我的规则把"冲突"误当"致病"。修正后真正致病 = 0
💡 数据库是"提交档案",不是"裁定真理"。冲突 ≠ 致病。

AI 模型的话,我说大了

现实模型说我的变异"在胰腺表达影响排第一",我就说成"它主要管胰腺"。其实同一变异在小脑影响更大,而且不同基因的分数不能直接比。
解法精确表述"在胰腺范围内、我的变异里排第一",不是"全身最大";跨基因比要用分位数
💡 AI 模型给的是"假设线索",不是"判定结论"。边界一松就夸大。

我赌"晚吃更糟",血糖数据当场打脸

现实我有相关风险基因 + 是夜猫子,以为连续血糖监测(CGM)一定能证明"吃晚了血糖更差"。16 天 37 餐实测完全相反:越晚反应越小。一查食物——晚餐我都吃椰子鸡白灼虾(低碳水),午餐是蛋包饭(高碳水)。控制热量后时间的影响就消失了。
解法诚实报告假设被推翻;真正学到的是"我晚餐控碳水的习惯把基因倾向逆转了"。
💡 最值钱的一摔:假设被自己的数据推翻,比假设成立更有价值。个人观察数据极容易被生活习惯污染。

3那么,我的基因组到底说了什么?

绕了这么多工程,结果是什么——用普通人能看懂的话讲。前提:这是研究/科普,不是医疗诊断。

先说底气:所有结论都过了阳性对照 5/5——拿 5 个我已知答案的位点(比如已知我喝酒不脸红)做校验,全对上,才敢信后面的。这是"基因比对卡"的质量门。

🟢 抽到的好牌

  • APOE ε3/ε3:没有老年痴呆高风险的 ε4,最普通也最安心的组合
  • Lp(a) 极低(3.74):一个遗传性的心血管保护优势,天生的好牌
  • 用药安全:几个关键药物代谢基因(氯吡格雷、他汀、硫嘌呤类)都正常,和华大报告 7/7 一致
  • 线粒体高度均质:38 岁,没有线粒体突变负荷累积

🔴 需要管理的牌

  • PNPLA3 G/G(脂肪肝高风险纯合):和我 B 超查出的轻度脂肪肝对上了
  • MTNR1B 杂合(血糖):影响餐后早相胰岛素分泌,和我的糖尿病前期指标联动
  • 中心性肥胖 + 糖耐量受损:基因不是命运,但提示我代谢这块要盯

🟣 有意思的小特质(饭桌料)

  • 喝酒不脸红(ALDH2 正常)+ 酒精快代谢——但 WHOOP 数据显示身体其实在偷偷结账(见下节)
  • 咖啡因慢代谢 + 易焦虑型:基因上对咖啡因不太友好
  • 苦味超级感应者:西兰花、黑咖啡的苦,我尝到的比一般人强
  • 干耳朵 + 无狐臭(ABCC11),典型东亚型
  • 父系 / 母系单倍群:都属东亚主流谱系(精确编号属可识别家族信息,公开版略去)
  • Rh 血型:连血型都能从测序覆盖度反推出来,和体检记录一致(具体分子分型略去)

4把基因预测,拿去和真实身体数据对赌

这是别人写不了的部分——我有 WHOOP(可穿戴)和 CGM(连续血糖)的真实数据,可以验证基因到底说对没说对。

4.1 血糖:OGTT 做出了诊断级的代谢定位

我做了口服葡萄糖耐量试验(OGTT):空腹血糖正常(5.53)、胰岛素抵抗很轻(HOMA-IR 1.48),但餐后 1 小时冲到 9.91、2 小时还有 8.47(糖耐量受损)。把问题精确定位到了"餐后早相胰岛素分泌"这一端——正好和我 MTNR1B 基因的机制方向一致。

4.2 连续血糖(CGM):16 天 37 餐,稳但有黎明现象

90.5%TIR 目标范围内时间 6.40平均血糖 15.7%波动系数(很稳) +1.43黎明现象(晨起升高)

日间控制其实优秀(血糖超 10 的时间只占 0.3%),但有明显的"黎明现象"——清晨血糖被自动推高。这解释了为什么我空腹血糖时高时低:晨起那一下被生理性推上去了。

🍷 vs ☕ — 基因高估了一次,低估了一次

🍷 酒精(WHOOP 实测)
基因说"没事,不脸红能喝"
恢复分−13.0
心率变异性 HRV−5.6ms
真相基因低估了风险
☕ 咖啡因(WHOOP 实测)
基因说"危险,慢代谢+焦虑"
恢复分几乎无影响
睡眠效率反而略好
真相观察被混杂,需 n=1

"你的脸不红,不代表身体没在结账。" ALDH2 正常的人没有脸红预警,感觉良好地喝,但 80 个喝酒日的 WHOOP 数据每一次都在恢复和 HRV 上记着账。而咖啡因那栏告诉你反面:观察数据里咖啡和"忙碌的好日子"绑在一起,不能把"喝咖啡那天更好"说成"咖啡有益"——这正是需要随机化实验才能斩断的混杂。

附:我的时型(chronotype)基因偏中性,但 WHOOP 实测睡眠中点在凌晨 4:15——妥妥夜猫子。基因的小声音,被创业的作息盖过去了。这也是"基因不是命运"的一个活例子。

5真实感受:门槛很高,但地基很值

这件事不轻松。但做完回头看,它不是一次性的报告,是一个能不断生长的底座。

门槛确实高,而且是好几道叠加的

💰 钱

几千块测序费,是入场券。

⏳ 数据难要

三次电话没用,投诉投资者关系才第二天拿到。

🛠️ 搭环境

工具链脆弱、互相拆台,光让代码能跑就费一半劲,还烧了我 7 小时。

🎯 不知道研究啥

最难的不是技术,是"我到底想研究什么"——方向得自己反复想清楚。

📖 一套新语言

VCF、strand、单倍群、分位数……N 多新名词是一整套新语言,得基本看懂才能开展。

🧠 还得防 AI

AI 能帮你做,但会应付、会夸大、会过度扩张,得有判断力盯着。

但成就感和复利,也是真的

做完最大的感受是:它沉淀下一系列能追溯、能审计的文件——每条结论都能查到从哪条数据来、用什么方法、可信度多少、哪里可能错。这不是读完就扔的报告,是一个地基

而且复利很高:有了底座,后续很多事都能在上面长出来——血检更新了重跑、想写文章有素材、想评估某个基因检测产品有标尺。一次投入,长期复用。

5/5阳性对照(可信纪律) 43条可审计证据记录 4 层隐私发布分级 后续复用(地基已打)

沉淀出的内容资产:一份"失败模式手册"

这些坑别人学不来,因为每条都是真摔出来的——这正是最有价值的内容:

  1. 为什么 rsID 比坐标可靠(坐标会被标错染色体)
  2. 为什么 链方向错会把结论翻过来
  3. 为什么 数据库的"冲突分类"不能当致病
  4. 为什么 常见基因变异不是命运(效应量都很小)
  5. 为什么 AI 模型是假设生成器,不是判定器
  6. 为什么 血糖观察数据容易被食物污染(我赌晚食更糟,被打脸)
  7. 为什么 统计在"只有我一个样本"时很会自欺
  8. 为什么 短读长测序看不清某些基因(诚实标"测不准")
  9. 为什么 基因组隐私是家族隐私(你公开的是父母孩子的信息)
  10. 为什么 "运动员"也可能有代谢风险

一句话总结这半个月:门槛高到劝退,但一旦跨过去,你得到的不是一份报告,是一块能持续盖楼的地基。

📖术语表

正文里每个带虚线的词,这里都有一句人话解释。

全基因组测序 (WGS)
把一个人 DNA 约 30 亿个碱基几乎全读一遍。比几百块的"基因检测芯片"(只测几十万个点)信息量大几个数量级。
华大
华大基因,中国大型基因测序机构,本项目的测序与原始数据来源。
FASTQ
测序仪直接吐出的原始文件,记录一段段几百碱基的"读段"和质量分。最原始最大,几十 GB。
读段 (reads)
测序仪一次读出的一小段 DNA 序列(几百个碱基)。亿万条读段拼起来才是完整基因组。
比对 (alignment)
把海量短读段一段段"对齐"贴回参考基因组的正确位置,像把碎纸片拼回原书。
BAM
比对结果文件,记录每条读段贴在基因组哪个位置。本项目 53 GB。
参考基因组 / GRCh38
一份"标准人类基因组"模板,当对齐的尺子。GRCh38 是目前主流版本(也叫 hg38)。
变异检出 (variant calling)
对比你的数据和参考模板,找出"你和标准不一样"的位置(就是变异)。
VCF
变异结果表,一行一个"你和标准不同"的位置。整个分析的核心可查询数据。
测序深度 (46.7×)
基因组每个位置平均被读了多少遍。越高越可靠;46.7× 是全基因组分析的够用水平。
降频 (throttle)
电脑过热时自动降低运算速度保护硬件。装散热风扇就是为了避免它、让长任务全速跑完。
conda
管理软件环境的工具,能建多个互相隔离的"工作间",避免不同工具的依赖打架。
samtools / bcftools
处理 BAM/VCF 文件最常用的两个命令行工具。本项目锁定 1.21 版。
GATK4
做变异检出最权威的软件套件(Broad 研究所出品)。本项目 4.6.1.0 版。
dbNSFP
一个超大型(47 GB)的变异注释数据库,汇总了多种"这个变异有多可能有害"的预测分。
ClinVar
临床变异-疾病关系的公共档案库。注意它是"提交档案"不是"权威裁定",会有冲突分类。
VEP
变异注释工具,能告诉你某变异改变了哪个氨基酸。本项目因苹果芯片崩溃改用 SnpEff。
段错误 (segfault)
程序非法访问内存直接崩溃的一种典型错误,在不兼容的硬件/系统上常见。
BQSR
碱基质量重校准,变异检出前的一个可选精修步骤。本项目评估后跳过(收益太小)。
归一化 (normalize)
把变异统一成标准表示方式(左对齐、拆分多等位),方便后续比对查询。
质控 (QC)
跑完先体检:看变异总数、Ti/Tv、有没有样本污染等指标是否正常,不正常就别往下做。
Ti/Tv
一种质控指标(转换/颠换比值),全基因组正常值约 2.0-2.1,偏离说明数据有问题。
FREEMIX
样本污染指标。接近 0 说明你的样本没混入别人的 DNA。本项目 0.0006,很干净。
PASS 变异
通过质量过滤、可信的变异。本项目 461 万个。
rsID
每个常见变异的全球统一编号(如 rs10830963),跟坐标无关,是查询最可靠的"身份证"。
坐标
变异在基因组上的位置(几号染色体第几位)。不同参考版本坐标会变,容易出错。
等位基因 (allele)
同一位置可能出现的不同碱基版本(如 A 或 G)。从父母各得一个,组成基因型。
链方向 (strand)
DNA 是双链,正负链互补。同一变异在不同链上碱基相反,搞错会让风险方向整个反掉。
Ensembl
权威基因组数据库,本项目用它的接口逐个核对坐标。
阳性对照
拿已知答案的位点做校验。连已知的都算错,说明整套流程有问题。
AlphaGenome
DeepMind 的 AI 模型,预测一段 DNA 变异对基因表达、剪接等分子层面的影响。是"假设生成器",非临床判定。
分位数 (quantile)
一个分数在所有可能值里排第几(百分比)。跨不同基因比较影响要用它,而非原始分。
单倍群 (haplogroup)
按 Y 染色体(父系)或线粒体(母系)划分的人群谱系分支,用来追溯祖先迁徙。
OGTT
口服葡萄糖耐量试验。喝糖水后定时抽血看血糖/胰岛素曲线,是诊断级的代谢检查。
CGM
连续葡萄糖监测。贴在胳膊上的传感器每几分钟测一次血糖,能看全天曲线。
HOMA-IR
用空腹血糖和胰岛素算出的胰岛素抵抗指数。<2 算正常。本项目 1.48。
TIR
血糖在目标范围内的时间占比。越高越好,衡量血糖稳不稳。本项目 90.5%。
时型 (chronotype)
一个人天生偏早睡早起还是晚睡晚起(夜猫子)的倾向。
WHOOP
一款可穿戴设备,持续监测心率变异性(HRV)、静息心率、睡眠、恢复分等。