<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Token on 小盒子的技术分享</title><link>https://xiaobox.github.io/tags/token/</link><description>Recent content in Token on 小盒子的技术分享</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Sat, 16 May 2026 05:00:00 +0000</lastBuildDate><atom:link href="https://xiaobox.github.io/tags/token/index.xml" rel="self" type="application/rss+xml"/><item><title>我在 DeepSeek 敲了一个 &lt;think&gt;，它开始自己跟自己说话</title><link>https://xiaobox.github.io/p/2026-05-16-wo-zai-deepseek-qiao-le-yi-ge-think-ta-kai-shi-zi-ji-gen-zi-ji-shuo-hua/</link><pubDate>Sat, 16 May 2026 05:00:00 +0000</pubDate><guid>https://xiaobox.github.io/p/2026-05-16-wo-zai-deepseek-qiao-le-yi-ge-think-ta-kai-shi-zi-ji-gen-zi-ji-shuo-hua/</guid><description>&lt;h2 id="一个奇怪的现象"&gt;&lt;a href="#%e4%b8%80%e4%b8%aa%e5%a5%87%e6%80%aa%e7%9a%84%e7%8e%b0%e8%b1%a1" class="header-anchor"&gt;&lt;/a&gt;一个奇怪的现象
&lt;/h2&gt;&lt;p&gt;今天看到一个挺有意思的现象。&lt;/p&gt;
&lt;p&gt;有人在 DeepSeek 的输入框里敲了几个字符，&lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt;，然后什么问题都没问，直接按回车。&lt;/p&gt;
&lt;p&gt;DeepSeek 给它吐回来一段八竿子打不着的内容。有时候是数学题，刷新一下变成小说开头，再刷新，又开始算日子。&lt;/p&gt;
&lt;p&gt;每次都不一样。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/20260517112700452.png"&gt;&lt;/p&gt;
&lt;p&gt;看到这种截图，很多人第一句就是，完了，模型疯了。再往下一想，又会怀疑是不是漏了训练数据。&lt;/p&gt;
&lt;p&gt;其实都不是。&lt;/p&gt;
&lt;h2 id="special-token-injection"&gt;&lt;a href="#special-token-injection" class="header-anchor"&gt;&lt;/a&gt;Special Token Injection
&lt;/h2&gt;&lt;p&gt;这类问题有个名字，Special Token Injection。&lt;/p&gt;
&lt;p&gt;把输入框后面那点东西摊开看，LLM 在内部不是用我们看到的「问答」格式跟用户交流的，它有自己一套对话协议。打开 DeepSeek 的 tokenizer 配置，你能看到一堆这样的字符。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;｜begin▁of▁sentence｜&amp;gt;&lt;/code&gt; 表示对话开始。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;｜User｜&amp;gt;&lt;/code&gt; 后面接的是用户说的话。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;｜Assistant｜&amp;gt;&lt;/code&gt; 后面接的是模型要回的话。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;/think&amp;gt;&lt;/code&gt; 中间，是模型推理的草稿。&lt;/p&gt;
&lt;p&gt;这些字符叫 special token，是模型训练时用来区分谁在说话、在做什么动作的分隔符。它们在词表里都被分配了独立的 ID，模型看到这些 ID，就会切到对应的模式里。&lt;/p&gt;
&lt;p&gt;平时我们敲一个「你好」，DeepSeek 看到的并不是这两个字。它看到的是一段拼好的模板，类似 &lt;code&gt;&amp;lt;｜begin▁of▁sentence｜&amp;gt;&amp;lt;｜User｜&amp;gt;你好&amp;lt;｜Assistant｜&amp;gt;&lt;/code&gt;，然后从最后那个 &lt;code&gt;&amp;lt;｜Assistant｜&amp;gt;&lt;/code&gt; 之后开始往下说。&lt;/p&gt;
&lt;h2 id="坑在哪里"&gt;&lt;a href="#%e5%9d%91%e5%9c%a8%e5%93%aa%e9%87%8c" class="header-anchor"&gt;&lt;/a&gt;坑在哪里
&lt;/h2&gt;&lt;p&gt;如果用户直接把 &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; 打进输入框，而模板层又没把它当普通文字关起来，tokenizer 就可能把它认成真的控制 token。&lt;/p&gt;
&lt;p&gt;这样一来，DeepSeek 看到的就像一块后台路牌，被人塞进了用户留言里。&lt;/p&gt;
&lt;p&gt;按训练时的样子，模型应该看到「用户问了一个问题，我要回答」。现在模型看到的是 &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; 直接出现在用户位置，然后什么问题都没有。它的训练数据里没有这种结构，但它必须继续生成下去。&lt;/p&gt;
&lt;p&gt;它没去数据库里捞东西。前缀给到这里断了，也没有问题作锚点，它只能顺着训练分布往下接。于是你看到的就是一堆碎片，一会儿数学，一会儿小说，这跟训练数据泄露没关系。&lt;/p&gt;
&lt;p&gt;到这里就能看出来了，麻烦不在模型脑子里，在模板那层字符串胶水里。它没把控制 token 当普通文字锁住。&lt;/p&gt;
&lt;p&gt;&lt;img loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://xiaobox-public-images.oss-cn-beijing.aliyuncs.com/images/ChatGPT%20Image%202026%E5%B9%B45%E6%9C%8817%E6%97%A5%2011_24_29.png"&gt;&lt;/p&gt;
&lt;h2 id="不只是-deepseek-的问题"&gt;&lt;a href="#%e4%b8%8d%e5%8f%aa%e6%98%af-deepseek-%e7%9a%84%e9%97%ae%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;不只是 DeepSeek 的问题
&lt;/h2&gt;&lt;p&gt;这也不是 DeepSeek 一家的毛病。很多模型都有自己的对话格式，早期 ChatML 有 &lt;code&gt;&amp;lt;|im_start|&amp;gt;&lt;/code&gt;，Claude 旧格式也用过 &lt;code&gt;Human&lt;/code&gt; / &lt;code&gt;Assistant&lt;/code&gt; 这种分隔。&lt;/p&gt;
&lt;p&gt;只是有些商业 API 把这层包起来了，用户摸不到原始模板。DeepSeek 把权重和配置放出来，这些后台路牌就明晃晃摆在文件里。&lt;/p&gt;
&lt;p&gt;Trend Micro 去年的红队报告里有个更危险的例子。他们测的是 671B 的 DeepSeek-R1，问题出在 R1 默认就把思考过程放在 &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; 标签里展示。结果最终回答里没泄密，思考区反而把系统提示里的 API key 带了出来。&lt;/p&gt;
&lt;p&gt;所以后面再看到模型突然抽风，我可能会先去翻它前面的模板。很多怪事，就卡在那层字符串胶水里。&lt;/p&gt;
&lt;p&gt;那一行 &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; 撬开的，就是这一层。&lt;/p&gt;</description></item></channel></rss>