
1. 蛋白质“水印”到底是个什么东西第一次看到“给AI设计的蛋白质加水印”这个说法我脑子里冒出来的第一个念头是蛋白质又不是图片怎么加水印难道是在结构图上叠一层半透明文字后来仔细琢磨了一下DeepMind这套思路才发现此“水印”非彼“水印”——它不是在蛋白质表面贴标签而是把一段可识别的编码信息直接写进蛋白质的氨基酸序列里让这段序列本身成为“防伪码”。说白了蛋白质水印本质上是一种序列层面的隐写术。你设计了一个蛋白质它的功能、结构、活性都符合预期但你怎么证明这个蛋白质是你设计的而不是别人设计的传统做法是发论文、申请专利、保留实验记录但这些手段都是“外部证据”一旦序列被别人拿走你很难从序列本身判断它的来源。DeepMind的做法是在设计蛋白质的时候就把一段特定的氨基酸序列模式嵌进去这段模式不影响蛋白质的折叠和功能但可以被检测出来从而追溯来源。这个事情的背景其实挺有意思。过去几年AI设计蛋白质的能力突飞猛进从RFdiffusion到AlphaFold3再到各种基于大语言模型的蛋白质生成工具设计一个全新蛋白质的门槛已经从“博士五年”降到了“跑个脚本”。但随之而来的问题是当AI能批量生成蛋白质序列时谁设计了哪个蛋白质怎么界定这不仅仅是学术诚信问题还涉及到生物安全、知识产权、甚至未来的蛋白质数据库管理。你想想如果一个人用AI生成了上万个蛋白质序列其中某个序列恰好有潜在风险你怎么追溯它是谁生成的水印就是在这个背景下被提出来的。适合读这篇内容的人我觉得有三类一是做蛋白质工程和合成生物学的同行你们可能已经在用AI工具设计蛋白了需要了解怎么保护自己的设计二是做生物信息学和序列分析的朋友水印检测本质上是一个序列模式识别问题你们会有很多可以借鉴的思路三是对AI生成内容溯源感兴趣的人蛋白质水印的思路其实和文本水印、图像水印有相通之处理解了这个案例你对“AI生成内容可追溯”这件事会有更具体的认知。2. 水印设计的核心思路拆解2.1 为什么不能直接改序列最朴素的想法是我在蛋白质序列里插一段标签序列不就行了比如在N端加一个His-tag或者插一段已知的抗原表位。但问题是蛋白质不是字符串它的序列决定了它的三维结构而三维结构决定了它的功能。你随便插一段序列轻则影响折叠效率重则让整个蛋白质失活。尤其是AI设计的蛋白质很多都是从头设计的序列和结构之间的对应关系非常敏感你动一个氨基酸都可能让整个设计崩掉。所以水印设计的第一个约束就是不能破坏蛋白质的折叠和功能。这就意味着水印不能是简单的“插入”而必须是“替换”或者“编码”——用同义替换的方式在不改变蛋白质结构和功能的前提下把信息写进去。2.2 同义密码子的思路这里要引入一个概念简并密码子。蛋白质是由20种氨基酸组成的但DNA/RNA层面有64种密码子很多氨基酸对应多个密码子。比如亮氨酸有6个密码子丝氨酸有6个精氨酸有6个。这意味着同一个蛋白质序列可以对应很多不同的核酸序列。如果你是在核酸层面做水印那很简单选同义密码子就行了蛋白质序列完全不变但核酸序列变了你可以把信息编码在密码子选择上。但DeepMind这套水印是针对蛋白质序列本身的不是核酸序列。蛋白质序列只有20个字母没有简并性你改一个氨基酸就是改一个氨基酸没有“同义”的说法。那怎么办2.3 利用蛋白质序列的“可塑性”关键洞察在于蛋白质序列并不是每一个位置都严格保守的。虽然蛋白质的功能由序列决定但很多位置是“容忍突变”的——你换一个化学性质相似的氨基酸蛋白质照样能折叠功能也不受太大影响。这种位置在自然界中大量存在在AI设计的蛋白质中同样存在。DeepMind的思路是找到那些对结构和功能不敏感的位置在这些位置上用特定的氨基酸替换规则来编码水印信息。比如某个位置本来是亮氨酸你可以换成异亮氨酸或者缬氨酸三者都是疏水氨基酸对局部结构影响很小。如果你把这种“可替换”的位置找出来并且约定一套替换规则那就可以在不影响蛋白质功能的前提下把一段二进制信息写进去。这个思路和图像水印里的“最低有效位”替换很像——图像像素的低位改变人眼看不出来但机器可以读出来。蛋白质水印也是在“人眼或者说功能筛选看不出来”的层面做文章。2.4 水印的编码容量和鲁棒性这里有一个权衡水印容量越大对蛋白质的扰动就越大功能风险就越高。你不可能把一整篇论文写进一个蛋白质里那蛋白质肯定废了。所以水印的编码容量通常很小可能只有几十个比特够存一个标识符或者一个哈希值就行。另一个问题是鲁棒性。水印要能抵抗什么如果别人拿到了你的蛋白质序列他可能会做定向突变、截短、或者重新设计。你的水印要能在这些操作之后还能被检测出来才算有用。DeepMind的方案里水印是分散在多个位置的不是集中在一个区域这样即使部分序列被修改剩下的水印片段仍然可以被检测到。这有点像分布式存储的思路——不把鸡蛋放在一个篮子里。3. 具体怎么实现从序列设计到水印嵌入3.1 第一步确定可替换位点实现水印的第一步是找出蛋白质序列中哪些位置是“可替换”的。这个判断不能靠猜得有依据。常用的方法有几种基于进化保守性分析如果你要水印的蛋白质有同源序列可以做多序列比对看看哪些位置在不同物种间高度保守哪些位置变异很大。变异大的位置通常是可替换的。基于结构分析如果蛋白质有实验解析的结构或者高质量的预测结构可以看每个残基的溶剂可及性、二级结构归属、以及与其他残基的相互作用。表面暴露的、不参与活性位点的残基通常更容忍突变。基于计算突变扫描用Rosetta或者FoldX这类工具做in silico突变扫描计算每个位置突变成其他氨基酸后的能量变化。能量变化小的位置就是可替换的。基于AI模型的注意力权重如果是用AlphaFold或者ESM这类模型设计的蛋白质可以看模型对每个位置的注意力权重权重低的位置通常对整体结构贡献小。实际操作中通常会把这几种方法结合起来取交集或者加权打分选出一批高置信度的可替换位点。这些位点就是水印的“载体”。3.2 第二步设计编码规则有了可替换位点接下来要设计一套编码规则。最简单的方案是二进制编码每个可替换位点代表一个比特原来的氨基酸代表0替换成另一个氨基酸代表1。但这样容量太小而且容易受干扰。更高效的方案是多进制编码。比如如果一个位置可以容忍3种不同的氨基酸那这个位置就可以表示3种状态相当于log2(3)≈1.58个比特。如果你有20个这样的位置理论上可以编码31个比特足够存一个标识符了。DeepMind的具体编码方案没有完全公开但根据论文和专利里的描述他们用的是一种基于氨基酸物理化学性质的编码。不是简单地把氨基酸映射成数字而是利用氨基酸的疏水性、电荷、体积等性质设计一套正交的编码维度。这样即使某个位置发生了意外突变只要物理化学性质没变水印仍然可以被解码。3.3 第三步嵌入水印并验证功能编码规则确定后就可以把水印信息嵌入到蛋白质序列里了。这个过程不是简单地把序列改掉就完事还要做几件事重新预测结构用AlphaFold或者ESMFold对加水印后的序列做结构预测确认整体折叠没有大的变化。通常会用RMSD均方根偏差来衡量如果RMSD小于1埃说明结构基本没变。评估功能影响如果蛋白质有已知的功能比如酶活性、结合亲和力需要用计算工具或者实验验证水印版本的功能是否受影响。计算工具可以用Rosetta做ddG计算实验的话就是表达纯化后做活性 assay。检测水印可读性从加水印的序列里把水印信息解码出来确认和原始信息一致。这一步看起来简单但实际中可能会因为编码规则的设计问题导致解码错误需要反复调试。3.4 第四步水印的检测和追溯水印嵌入之后检测就是逆过程拿到一个蛋白质序列用同样的可替换位点识别方法和编码规则把水印信息读出来。如果读出来的信息和你数据库里记录的设计信息匹配就能确认这个蛋白质的来源。但这里有一个实际问题你不可能对每一个未知序列都做全套的可替换位点分析那样太慢了。所以实际的水印检测通常会简化只检查那些预先定义好的“水印位点”看这些位置上的氨基酸是否符合编码规则。这就像验钞机只检查几个关键防伪点而不是把整张钞票分析一遍。4. 实操中会遇到哪些坑4.1 水印位点选得不好蛋白质直接废掉这是我见过的最常见的问题。有些人为了追求水印容量选了很多可替换位点结果改完之后蛋白质不折叠了。原因通常是有些位点看起来“可替换”但实际上参与了长程相互作用或者折叠核的形成。这些位点在局部看起来不重要但在全局折叠过程中是关键节点。避坑技巧选位点的时候不要只看局部环境要看全局。可以用折叠核分析工具比如FoldX的AlaScan找出哪些残基对折叠自由能贡献大这些残基一律排除。另外保守性分析要用足够多的同源序列如果同源序列太少保守性判断会不准。4.2 水印被意外突变破坏即使你选的可替换位点很安全蛋白质在表达、纯化、储存过程中也可能发生意外突变。尤其是如果你用的是大肠杆菌表达系统某些序列可能会有翻译错误或者自发突变。如果水印位点恰好是突变热点水印就可能丢失。应对方案冗余编码。不要只在一个位置编码一个比特而是在多个位置重复编码同一个比特。这样即使部分位点突变整体水印仍然可以被恢复。这就像RAID磁盘阵列的思路——用冗余换可靠性。4.3 水印检测的假阳性和假阴性假阳性是指一个没有水印的蛋白质被误判为有水印。这通常是因为编码规则太简单随机序列恰好符合规则。假阴性是指一个确实有水印的蛋白质没被检测出来。这通常是因为水印位点发生了突变或者检测方法的阈值设得太严。降低假阳性的方法是增加水印的特异性比如用更复杂的编码规则或者要求多个位点同时匹配才算阳性。降低假阴性的方法是增加检测的容错性比如允许一定比例的位点不匹配或者用软判决代替硬判决。4.4 水印和功能之间的权衡这是一个根本性的矛盾水印容量越大对蛋白质的扰动越大功能风险越高。你不可能既要大容量又要零影响。实际中需要根据应用场景来权衡。如果只是做来源追溯几十个比特就够了对功能影响可以控制在很小范围内。但如果想在水印里存更多信息比如设计参数、版本号那就需要更多的可替换位点功能风险也会增加。我的经验是先确定功能容忍度再确定水印容量。如果这个蛋白质对功能要求极高比如要做临床药物那水印容量就要压到最低甚至可能不值得加水印。如果只是做研究工具功能要求没那么严可以适当增加容量。5. 常见问题速查与排查思路5.1 水印检测不出来怎么办先确认几个事情第一你用的可替换位点列表和编码规则是不是和嵌入时一致有时候不同版本的工具会更新位点列表导致不匹配。第二序列有没有经过截短或者修饰如果N端或C端被截掉了而水印恰好在那段区域那就检测不到了。第三测序质量有没有问题如果测序有错误水印位点可能被误读。排查顺序先比对原始设计序列和当前序列看差异在哪里然后用原始编码规则手动解码几个关键位点确认是不是规则问题最后检查测序数据质量。5.2 水印影响了蛋白质表达量有时候水印本身不影响折叠但影响了mRNA的二级结构或者翻译效率导致表达量下降。这种情况在核酸层面加水印时更常见但蛋白质层面也可能间接影响。如果你发现加水印后表达量明显下降可以试试换一组可替换位点避开那些可能影响翻译的区域比如N端前10个残基。5.3 多个水印之间互相干扰如果你在一个蛋白质里嵌入了多个水印比如一个来源标识加一个版本号它们之间可能会互相干扰。尤其是如果两组水印用了重叠的可替换位点解码时会冲突。解决方案是给每组水印分配独立的位点集合互不重叠。如果位点不够可以降低每组水印的容量或者用时分复用——不同水印用不同的编码维度。5.4 水印能不能被恶意去除这是一个安全相关的问题。如果有人拿到了你的蛋白质序列想故意去掉水印他可能会做定向突变或者重新设计。你的水印能不能抵抗这种攻击答案是取决于水印的鲁棒性设计。如果水印是集中式的攻击者只要找到那几个位点改掉就行了。如果水印是分布式的而且和蛋白质功能耦合在一起改了水印就影响功能那攻击者就很难在不影响功能的前提下去除水印。DeepMind的方案里水印是和蛋白质序列深度耦合的不是外挂的标签。这意味着攻击者要移除水印就得改变蛋白质序列而改变序列就可能影响功能。这种耦合设计是水印鲁棒性的关键。6. 这套思路还能用在哪些地方蛋白质水印的思路其实可以推广到很多AI生成内容的场景。核心逻辑是一样的在生成内容的时候嵌入一段不影响内容功能的标识信息用于后续追溯。比如在AI生成的文本里你可以通过同义词替换、句式调整、标点选择等方式嵌入水印。在AI生成的图像里你可以在像素层面做微小扰动或者调整频域系数。在AI生成的代码里你可以通过变量命名、注释风格、代码结构来嵌入标识。这些思路和蛋白质水印是相通的——都是在“不影响功能”的约束下把信息藏进去。但蛋白质水印有一个特殊之处它的功能约束非常强。文本水印改几个词可能没人注意图像水印改几个像素可能看不出来但蛋白质水印改一个氨基酸就可能让整个蛋白质失活。所以蛋白质水印对“可替换位点”的识别要求极高这也是为什么DeepMind要花大力气做结构预测和功能验证。另一个值得关注的方向是水印和AI模型训练的结合。如果AI模型在生成蛋白质的时候自动嵌入水印那所有由该模型生成的蛋白质都自带来源标识。这有点像相机在拍照时自动写入EXIF信息。未来如果蛋白质设计工具都内置水印功能那蛋白质数据库的管理和溯源会容易很多。我个人在实际操作中的体会是水印这件事技术实现只是一部分更重要的是建立一套标准。如果每个人用的编码规则不一样那水印就没法互通。DeepMind这套方案能不能推广关键看有没有人跟进有没有形成社区共识。就像二维码一样技术本身不复杂但大家都用同一个标准它才有价值。