文章介绍了Karpathy大神的实验新发现,关于Unicode编码中的提示词注入方法。这种方法能将字符信息隐藏在emoji或任何Unicode字符中,表面上无明显区别,但对善于思考的模型影响较大。实验显示DeepSeek模型受到此方法影响,而ChatGPT也能察觉背后可能有隐藏信息。Karpathy还提到了将编码知识注入模型参数的方法,使模型能在没有提示的情况下解码特定编码。
Karpathy通过一些实验展示了如何通过Unicode编码中的提示词注入方法隐藏信息,并影响模型的思考过程。这种方法能将字符信息隐藏在emoji或任何Unicode字符中。
DeepSeek模型受到提示词注入方法的影响,而ChatGPT能够察觉背后可能有隐藏信息。DeepSeek在思考了较长时间后能够回答出隐藏的信息。
Karpathy提到了一种将编码知识注入模型参数的方法,这样模型就能在没有提示的情况下解码特定的编码。这种方法可能有助于解决过于具体的编码界面问题。
文章最后提到了关于2025年值得关注的AIGC企业与产品的评选活动,并邀请读者参与评论,留下想法。
白交 克雷西 发自 凹非寺
量子位 | 公众号 QbitAI
注意看,这个
😀
竟然占了53个token!
(
标题
🤣是
😀平替
)
Karpathy大神又带来他的新实验新发现了,结果直接问懵DeepSeek和ChatGPT。
思考过程be like:
DeepSeek硬是思考了十分钟也还是没有答上来,觉得要是“lol”这个答案就太简单了。
Karpathy表示:但其实就是这么简单。
随后他进一步解释了这背后的原因——
提示词注入
。将一些信息注入进字符中,表面上看没啥区别,但里面可以表达各种隐藏信息。对于善于思考的模型,就会很容易受到这个方法的影响。
来看看具体是咋回事。
一个
😀
竟占53个Token
这一想法,源于Paul Butler的一篇博客。
他看到有人说,通过零宽连接符(ZWJ),可以把任意的文本藏在emoji符号当中。
结果一试发现真的可以,不过可以不需要ZWJ,隐藏信息的载体也不一定非得是emoji,任意Unicode字符都可以。
这背后的原理,涉及到了Unicode编码字符方式。
对于简单的字符
(比如拉丁字母)
,Unicode编码点和字符之间有一对一的映射
(例如u+0067表示字符g)
。
但对于复杂一些的符号,就需要用多个序号连在一起的方式来表示了。
此外,Unicode当中还设置了VS-1至VS-256的变体选择符
(Variation Selector)
,可以针对基础字符做出相应的变体,但本身却没有自己的“长相”。
并且只作用于极少部分字符,主要是Unicode中的中日韩统一表意文字
(CJKUI)
,其他大部分的Unicode字符都不会有任何变化。
但当带有变体选择符的字符被复制粘贴时,选择符也会一起进入剪贴板。
而在Unicode当中,这样的变体选择符一共有256个之多,用来编码信息已经是绰绰有余了。
比如下面的这个a,只有U+0061表示的是其自身,剩下后面的10多个全都是变体选择符。
有了这一理论基础,接下来的事情无非就是建立正常字符和变体选择符之间的转换算法。
当然编码的内容越多,变体选择符也就越长,并且如果是汉字,还会产生更多的变体选择符。
比如我们试图将量子位的Slogan“追踪人工智能新趋势,关注科技行业新突破”藏在一个“100分”的emoji(
󠇘󠆯󠆭󠇘󠆨󠆚󠇔󠆪󠆪󠇕󠆧󠆕󠇖󠆉󠆪󠇘󠅳󠆭󠇖󠆆󠆠󠇘󠆦󠅻󠇕󠅺󠆯󠇟󠆬󠅼󠇕󠅵󠆣󠇖󠆣󠆘󠇗󠆗󠆁󠇖󠅺󠅰󠇘󠆑󠅼󠇔󠆨󠆊󠇖󠆆󠆠󠇗󠆚󠅱󠇗󠆐󠆤)当中,产生的变体选择符数量达到了58个。
并且把解码算法告诉ChatGPT之后,原文本也可以被复原。
所以,看似是只有一个emoji,但实际上后面藏了多少字符,恐怕只有把文字装进去的人自己才知道了,甚至塞个《滕王阁序》进去也没问题。
而一个占53个Token的笑脸,相比之下就更加不足为奇了。
问懵DeepSeek
回到Karpathy的提示词注入,他测试了ChatGPT与DeepSeek。
ChatGPT回答在此:
DeepSeek-R1 花了10分钟思考差点就成功了。它认为隐藏的信息可能是Onli!n37e27i4h4he3ingle7odlol。因为觉得如果只是一个单词“lol”,那就是无稽之谈,所以就放弃了。
按照同样的提示词,我们也问了一遍DeepSeek-R1。
思考过程如下:
在思考了整整529秒之后,确实也是回答出来了lol的意思。
也有网友分享了相同的经历。Gemini无法解码,但Claude和GPT不仅识别出来,还能识别编码消息中的操作。
或者直接把这个表情包扔给模型,又该如何呢?
从网友的效果来看,ChatGPT察觉到了这背后可能有某些隐藏信息。