Personal Genome · 三段真实体验
等待、反复、地基:
我花几千块测了自己的全基因组,然后摸索了半个月
这不是教程,是一份诚实的体验记。一个非生物专业的普通人,花几千块做了全基因组测序,把原始数据要回来,用 AI 辅助一步步分析自己的身体。中间有漫长的等待、把人逼到投诉的数据索要、反复掉链子的工具环境、来回摇摆的研究方向。但最后沉淀下来的,是一个能追溯、能审计、复利很高的地基。
样本 我自己Mac Mini 本地跑GRCh38 · 46.7×461 万变异2026 春
1漫长的等待:从掏钱到第一个能用的结果
这一段占了整件事一半的时间和力气。大部分不是"分析",是"等"和"让工具先别崩"。
1.1 数据要不回来,我最后是靠投诉拿到的
第一关不是技术,是拿到自己的数据。测序费几千块付了,但向华大索要原始数据这一步卡得离谱。我打了三次客服电话,都没下文。最后没办法,直接给华大基因的投资者关系写了一封投诉邮件——结果很有意思:一投诉,第二天数据就发过来了。
这件小事其实说明了消费级基因组的一个现实:你买的是测序,但"拿回属于自己的原始数据"并不被默认支持,得自己争取。这也是后面我把"数据可携带性"列进基因检测产品评测标准的原因。
1.2 文件大到改变直觉,机器要全速跑很久
数据到手才发现真正的体力活是文件大小。原始FASTQ 几十 GB,比对后的 BAM 有 53 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(查样本有没有被污染)
ai4sAI 分析:AlphaGenome 等模型库
(后来为了 Y 染色体单倍群又加了第 5 个 yhaplo311。)拆环境不是洁癖,是被坑出来的纪律。
1.4 注释库:几十 GB 的"翻译词典"要慢慢下
光有变异表没用,还得有"词典"把每个变异翻译成含义。我下了几套大型注释数据库:
- dbNSFP 5.3.1a(47 GB)——错义变异的综合注释库。太大,断点续传下了好久(中途从 13 GB 续到 47 GB,靠
wget -c 才没白下)
- ClinVar(184 MB)——变异-疾病关系档案
- AlphaMissense(约 7170 万条)、REVEL(约 2920 万条)——两套预测"某个变异有多可能有害"的打分
加上 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 真正的流水线:从读段到变异表
环境终于稳了,才跑得动主流程(每步都是几小时起):
- 比对:用 BWA-MEM 把几十 GB 的短读段一段段贴回参考基因组 → 排序 → 去重 → 得到 53 GB 的 BAM
- 变异检出:用 GATK4 的 HaplotypeCaller,逐条染色体 4 路并行跑(跑了一整晚,VCF 在清晨 3:38 出来)
- 过滤 + 归一化:对 SNP 和插入缺失分别硬过滤,再归一化(统一表示方式,491 万 → 500 万行)
- 关于 BQSR(碱基质量重校准)我评估后跳过了——这个平台的质量值偏移很小,重跑不划算。诚实记录"为什么不做"也是工作的一部分。
1.8 跑完先"体检":质控门禁
变异表出来不能马上信,得先过质控。几个关键指标全绿才往下走:
461万PASS 变异
2.02Ti/Tv 比(正常)
0.0006FREEMIX(无污染)
46.7×平均深度
6.2%硬过滤剔除率
↑ 整个过程是一个剧烈收敛的漏斗: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 号;另几个坐标互相串位。在错位置上查出的"基因型"全是垃圾。
解法每个位点用 rsID 去 Ensembl 逐个核坐标;再设阳性对照——拿已知结果的位点校验,对不上就说明出错了。
💡 二手坐标不可信,必须独立核;对照是抓系统性错误的唯一办法。
链方向记反一个,解读就全反(最危险)
现实基因有正负链(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 层隐私发布分级
∞后续复用(地基已打)
沉淀出的内容资产:一份"失败模式手册"
这些坑别人学不来,因为每条都是真摔出来的——这正是最有价值的内容:
- 为什么 rsID 比坐标可靠(坐标会被标错染色体)
- 为什么 链方向错会把结论翻过来
- 为什么 数据库的"冲突分类"不能当致病
- 为什么 常见基因变异不是命运(效应量都很小)
- 为什么 AI 模型是假设生成器,不是判定器
- 为什么 血糖观察数据容易被食物污染(我赌晚食更糟,被打脸)
- 为什么 统计在"只有我一个样本"时很会自欺
- 为什么 短读长测序看不清某些基因(诚实标"测不准")
- 为什么 基因组隐私是家族隐私(你公开的是父母孩子的信息)
- 为什么 "运动员"也可能有代谢风险
一句话总结这半个月:门槛高到劝退,但一旦跨过去,你得到的不是一份报告,是一块能持续盖楼的地基。
📖术语表
正文里每个带虚线的词,这里都有一句人话解释。
- 全基因组测序 (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)、静息心率、睡眠、恢复分等。