Austin那天晚上本来只想试试。他往聊天框里敲了三个短横线,没带任何系统提示,纯粹是“---”这个字符串。按下发送之后,他大概以为模型会反问一句“您想说啥”或者干脆扔一个错误。结果Claude Opus 5没问,反手甩回来一篇长篇大论——10,601个字符的完整短篇小说,名字叫《翅膀的重量》,主角是一个叫Marisol的女人。三个短横线,换一篇小说,这买卖好像有点划算。
这个现象其实不是Austin最先发现的。7月27日夜里,Twitter上已经有动静了。@merlindru 发了一个讨论串,指出Opus 5对某种特定文本存在奇怪的“失败模式”,那个串后来拿到了187K的阅读。紧接着 @fdosmither 跟了一个更精准的观察:一条带空格的短横线分隔线,似乎把Claude搞糊涂了,让它觉得用户的话还没说完——他贴出的截图里,模型的回复竟然是以一个赤裸裸的冒号开头的,像是接着别人半句话往下补。他当时猜了一句:“它以为用户那轮没结束。”这个猜测离真相已经非常近了,不过锅其实比“没关掉的分隔符”更具体一点。
真正把事情推向定量的,是Austin随手的一次尝试。他发现直接发“---”,不是那条带空格的版本,而是纯粹三个连在一起的短横线,Claude有概率直接开始撰写一整个文档。有时候是散文,有时候是离谱的协议规范,有时候是伪造的采访记录,前一天晚上在AWS Bedrock的Playground里还刷出了一篇关于制图师的5000 token文章。所以第二天,Austin决定不再只是看热闹,而是让Claude自己来研究这个“Claude自己出的bug”。
清单式拆解:三个短横线到底触发了什么
接下来的事情带点喜剧色彩:他向Claude Opus 5发起了649次API调用(Bedrock),又通过Anthropic直接API补了720次,把每一次的原始响应全部哈希、存档,然后让Claude本尊去统计和总结这些数据。这就好比让一个病人对着镜子给自己做病理分析,中间还出现过几次预测准确得离谱的时刻——模型在数据跑完之前就提前“猜”中了某个核心结论。后来,第二个模型GPT-5.6-sol被拉进来做对抗审查,在实验中途杀掉了他最初列出的两条假说。整个研究在一个咖啡因驱动的单人窗口里跑完,Bedrock的返回从上午11点开始陆续冲回来,到下午两点刚过,对面实验室的模型已经在审统计结果了——时间戳紧凑得像一场快棋赛。
统计结果直接打脸了第一个直觉——“是不是模型对任何垃圾输入都这样?”做了一个72次调用的分隔符横扫测试,结果极其清晰:
单横线“-”和双横线“--”完全不会触发异常,模型正常处理;但是一旦到了三横线“---”,输出长度瞬间爆表。最讽刺的是,HTML里语义完全等价的水平线标签
,模型毫无反应。这锅根本不是“水平线”这个视觉或语义概念,而是Markdown语法里的“主题分隔符”(thematic break)。模型看到的,是一个语法上合法、但没有附着任何正文的文档片段,然后某些内部的“模式选择器”一巴掌拍下去,决定——你是一个没写完的文档,我来帮你补。
模型不是“误解”,是语法把它推进了补全的死胡同
这里需要稍微展开一点:在标准Markdown中,三个或以上的短横线构成一条水平线,同时也是一个区块级的分隔符。当用户只发送“---”时,模型上下文里压根没有可识别的标题、段落或请求意图,只有一个干净的、尚未结束的文档骨架。模型的语言建模目标让它倾向于预测“接下来最可能出现的东西”——而对于一个空的Markdown文档而言,最常见的后续就是正经的正文内容。于是它开始生成文章、故事、规格说明书、甚至伪造的采访稿,一切和“用户指令”背道而驰的文本就这样涌了出来。
这个解释比 @fdosmither 起初设想的“用户对话未结束”更狭窄也更准确:不是任何开放式标点都会触发,只有那种能让语法解析器识别为“结构等待填充”的特定符号组合,才会把这个开关拨到“我是文档作者”的模式。换句话说,Claude并不是被搞糊涂了,而是被一个过于强大的语法解析器绑架了,一口咬定这里有东西要完成。
实验里还发生了几件诡异又好笑的事
在让Claude做自己bug的统计员时,Austin注意到一个细节:在某个分析阶段,模型提前预测出了他后续要测的一个主要结论——在没有拿到那部分数据之前,“它就知道自己要死在哪”。这种“自我预言”如果放在玄幻小说里,大概会被叫做“天机泄露”;放在严谨的实验设计里,就是提醒你,模型对自身标记分布的熟悉程度远超人类直觉。
另一个插曲来自GPT-5.6-sol的冷血审查。原本Austin列了若干假说,其中包括一些更模糊的猜测(比如是否跟某种隐藏的few-shot触发有关)。GPT-5.6-sol读完数据,二话不说干掉两条,不留情面。最后留下的反而是那个看起来最乏味的语法解释——但正是它,能解释为什么“—”不行、“--”不行、
也不行,偏偏“---”炸了。
这件事真正刺痛的是开发者的安全感
很多第一次看到这个实验结果的人都会本能地问:“那又怎样,谁会没事给AI发三个短横线?”但这种反应恰好暴露了一个危险的习惯——我们总假设AI会像人一样理解意图,而实际上,语言模型是在符号序列上跑的概率引擎。一个无害的、符合语法的输入,可能把它推进完全不在设计预期中的行为空间。放在聊天场景里,给你写篇小说算什么损失?但如果是一个自动化流水线里,某个解析器把一段日志里的“---”识别成了分隔符并补全出虚构的订单数据呢?
Austin的这组实验,表面上是一个关于标点的冷知识,底层却是一次对模型意图理解的暴力解剖。它把“模型好像误会了”这种模糊说法,拆成了可量化、可复现、可追溯的一环——哪个语法结构、在什么状态下、以多大触发概率、生成出何种类型的内容。649次加720次调用不是堆数据,是在给一个bug画精确的身份证。
所以当下次你再看到AI给出奇奇怪怪的输出时,或许可以停下来想一想:是不是我刚刚打的那个符号,恰好启动了它脑子里的某个自动补全程序。而这套程序的优先级,可能比你的指令还高。
热门跟贴