1. 从一次真实的对话翻车说起
前阵子帮一个做智能客服的朋友调模型,遇到个挺有意思的现象。用户用中文问“帮我对比一下这两款产品的续航和充电速度”,模型前面回答得好好的,中文流畅、逻辑清晰,结果一到“让我想想”这个环节,画风突变——它开始用英文自言自语:“Let me compare the battery life and charging speed of these two products...” 然后才切回中文给出正式回答。
朋友当时就懵了,问我是不是模型坏了,或者训练数据里混进了什么奇怪的东西。我告诉他,这其实不是故障,而是一个在国产大模型里相当普遍的现象:模型在“思考”阶段会突然切换到英文,而在最终输出阶段又回到中文。这个现象在推理类模型上尤其明显,比如那些带思维链(Chain-of-Thought)能力的版本。
这件事值得单独拿出来聊,因为它牵扯到的东西比表面看起来多得多。它涉及训练数据的语言分布、模型内部的语言对齐机制、推理阶段的解码策略,甚至和模型“用哪种语言思考更省力”这件事直接相关。如果你正在做模型微调、提示词工程,或者只是单纯好奇为什么国产 AI 会有这种“中英夹杂”的表现,这篇文章会把我知道的、试过的、踩过的坑都摊开来讲。
先给个结论性的判断:模型说英语不是因为它“更爱英语”,而是因为英文在训练语料中占据了推理任务的“效率优势位”。这个效率优势来自多个层面,下面一层层拆。
2. 模型“思考”时到底在干什么
2.1 思维链不是给人看的,是给模型自己用的
很多人第一次看到模型输出“Let me think step by step”的时候,会以为这是某种预设的模板。其实不是。思维链的本质是让模型在给出最终答案之前,先展开一系列中间推理步骤。这些步骤的作用是给后续的 token 生成提供更丰富的上下文,相当于模型在“打草稿”。
打个比方:你让一个人心算 37 乘以 48,他可能直接报答案,也可能先嘀咕“37 乘 50 是 1850,再减去 37 乘 2 是 74,所以是 1776”。后面这种嘀咕就是思维链。模型也一样,它需要把中间步骤写出来,才能更稳定地推导出正确答案。
关键在于,这个“打草稿”的过程,模型是用它认为最高效的语言来进行的。而目前大多数国产大模型的基座,在预训练阶段接触到的英文推理类语料——尤其是数学、代码、逻辑推导——在数量和质量上都占据优势。所以模型在需要“认真思考”的时候,会不自觉地滑向英文。
2.2 一个容易被忽略的事实:推理语料的语言分布极不均衡
我翻过一些公开的语料统计报告,也自己做过小规模的语料分析。结论很直接:在通用对话领域,中文语料的比例这些年上来了,日常闲聊、百科问答、文案生成这些任务,中文表现已经相当能打。但一旦进入数学推理、代码生成、形式逻辑这些“硬推理”领域,英文语料的比例仍然压倒性地高。
这不是说中文没有推理语料,而是说在公开可获取的高质量推理数据集里,英文的占比可能达到七成以上。模型在预训练阶段吸收这些数据时,会形成一种隐式的“语言-任务”关联:英文和推理任务的绑定更紧密,中文和日常对话的绑定更紧密。
所以当模型被要求“思考”时,它激活的神经元模式更偏向英文那一边。这不是设计缺陷,而是数据分布的自然结果。
2.3 解码阶段的“语言惯性”
还有一个机制层面的原因。模型生成 token 是一个接一个来的,每一步都会参考前面已经生成的 token。如果模型在思维链的开头不小心生成了一个英文词,比如“Let”,那么后续生成英文的概率就会显著上升,因为上下文里已经有了英文的“惯性”。
这有点像你在键盘上打字,如果第一个字母打成了拼音,输入法就会顺着拼音的思路给你推荐候选词。模型也是一样,思维链的开头语言选择会形成路径依赖。而由于英文在推理任务上的“启动优势”,模型很容易在第一步就滑向英文。
3. 为什么偏偏是“一开始思考”就切英文
3.1 触发点往往是一个“思考指令”
我观察过很多次,模型切英文的时机非常一致:基本都发生在它接收到“需要推理”的信号之后。这个信号可能来自用户的提问方式(比如“帮我分析一下”“一步步推导”),也可能来自系统提示词里的“Let's think step by step”。
一旦模型识别出“现在要进入推理模式”,它就会调用那些在推理任务上训练得更充分的参数路径。而这些路径,如前所述,和英文的关联更强。所以不是模型“想说英文”,而是模型“用英文思考更顺手”。
3.2 中文推理语料的“表达效率”问题
这里还有一个更深层的原因,和语言本身有关。中文在表达某些逻辑关系时,确实比英文更简洁,比如“因为...所以...”可以压缩成“故”。但在数学推导和代码逻辑里,英文的符号体系和术语体系更标准化。
举个例子:中文说“对两边同时取对数”,英文说“take the logarithm of both sides”。在模型的内部表示里,英文的表述可能对应着更明确的数学操作向量,因为训练数据里这种表述和具体数学操作的共现次数更多。模型选择英文,某种程度上是在选择更明确的语义锚点。
3.3 一个反直觉的发现:强制中文思考反而可能降智
我做过一组小实验,在提示词里明确要求“请全程用中文思考”,然后对比模型在数学题上的表现。结果挺有意思:强制中文思考后,模型在简单题上没什么变化,但在复杂推理题上,错误率上升了。
原因不难理解:模型被迫用一条它不太擅长的路径来推理,相当于让一个习惯用右手的人改用左手写字,能写,但别扭,容易出错。所以后来我在实际项目里,除非有明确的合规要求,一般不会强行限制思维链的语言。
提示:如果你在做面向用户的产品,思维链通常不会直接展示给用户,所以中英夹杂的问题对用户体验影响有限。真正需要关注的是最终输出的语言一致性。
4. 训练数据里的语言博弈
4.1 预训练阶段的“语言混装”是常态
国产大模型的预训练语料,基本都包含中英双语,有的还包含多语种。这些语料在进入训练管道之前,会经过清洗、去重、质量过滤等步骤,但不会按语言严格隔离。也就是说,模型在训练时看到的文本流,本身就是中英混杂的。
这种混装带来一个后果:模型学到的不是“中文一套参数、英文一套参数”,而是一套共享的参数,在不同语言上表现出不同的激活模式。当任务类型偏向推理时,英文的激活模式更容易被触发。
4.2 指令微调阶段的语言配比很关键
预训练之后是指令微调(SFT),这个阶段的数据配比会显著影响模型的语言行为。如果 SFT 数据里的推理类样本以英文为主,模型就会进一步强化“推理用英文”的倾向。反之,如果 SFT 数据里中文推理样本足够多、质量足够高,模型切英文的频率会下降。
我见过一些团队的做法:在 SFT 阶段专门加入一批中文思维链数据,覆盖数学、逻辑、代码等场景。效果是有的,但需要的数据量和质量都不低。少量中文推理数据不足以扭转预训练阶段形成的语言偏好。
4.3 一个实操中的观察:模型规模越大,切英文越“自然”
这个观察不一定普适,但在我接触过的几个模型里成立:参数量越大的模型,思维链切英文的现象越明显。小模型反而更“听话”,你让它用中文它就用中文,虽然推理质量可能一般。
我的解释是:大模型在预训练阶段吸收的英文推理语料更多,形成的语言-任务关联更强。小模型容量有限,学不到那么精细的关联,反而更容易被提示词“掰”过来。
5. 这件事对实际项目意味着什么
5.1 如果你的产品要展示思维链
有些产品会把模型的思考过程展示给用户,比如教育类应用、编程助手。这种情况下,中英夹杂的思维链会显得很不专业。我的建议是:要么不展示思维链,要么在展示前做一层语言后处理。
后处理的思路很简单:检测思维链里的英文段落,用翻译模型转成中文。但要注意,翻译可能引入误差,尤其是数学符号和代码片段,翻译后可能失真。所以更稳妥的做法是只翻译自然语言部分,保留符号和代码原样。
5.2 如果你在做提示词工程
提示词里可以加入语言约束,但要讲究方式。直接说“用中文思考”效果一般,更好的做法是在提示词里给出中文思考的示例。比如:
请参考以下思考方式: 第一步,先分析题目给出的条件。 第二步,找出条件之间的数量关系。 第三步,逐步推导出结果。这种示例式的引导,比单纯的指令更有效,因为它给模型提供了一个中文推理的“模板”,降低了模型滑向英文的概率。
5.3 如果你在做模型微调
微调阶段是扭转语言偏好的最佳窗口。我的经验是:中文推理数据的质量比数量更重要。与其堆一万条低质量的中文思维链,不如精挑一千条高质量的、覆盖多类推理任务的中文数据。质量高的数据能更有效地塑造模型的激活模式。
另外,微调时的损失计算策略也有讲究。如果只对最终答案计算损失,思维链的语言偏好很难被纠正。对思维链部分也计算损失,能让模型更认真地学习中文推理的表达方式。
6. 几个常见的误解和澄清
6.1 “模型说英文是因为它觉得中文低人一等”
这个说法在情感上容易引起共鸣,但从技术角度看并不准确。模型没有“语言地位”的概念,它只是在做概率计算。英文在推理任务上的高概率,来源于训练数据的统计分布,和语言本身的价值判断无关。
6.2 “只要把英文语料删掉就能解决”
且不说工程上是否可行,单纯删掉英文语料会带来另一个问题:模型的推理能力会显著下降。因为大量高质量的推理知识本身就存在于英文语料中。正确的做法不是删除,而是补充高质量的中文推理语料,让中文在推理任务上的“竞争力”提上来。
6.3 “这是国产模型独有的问题”
不是。这个问题在非英语母语的模型上普遍存在。比如一些欧洲团队训练的模型,在推理时也会滑向英文。英语作为当前学术和技术领域的主导语言,在推理类语料上的优势是全局性的,不是某个国家或团队的问题。
7. 我试过的几种缓解方案和实际效果
7.1 方案一:提示词里嵌入中文思维链示例
这是成本最低的方案,不需要动模型,只需要改提示词。我在几个客服和问答场景里试过,切英文的频率大概能降一半左右。但复杂推理任务上仍有残留,尤其是多步数学推导。
效果评分:中等。适合快速上线、对思维链语言要求不高的场景。
7.2 方案二:微调阶段加入中文推理数据
这个方案成本高,但效果最扎实。我参与过的一个项目,在 SFT 阶段加入了约五千条中文思维链数据,覆盖数学、逻辑、代码三类任务。微调后,模型在中文推理任务上切英文的比例从原来的六成降到了不到两成。
需要注意的是,这批数据的质量必须过硬。我们当时是人工审核加模型辅助筛选,确保每条思维链的逻辑是通的、语言是自然的。
效果评分:高。适合有微调资源、对语言一致性要求高的团队。
7.3 方案三:解码阶段的语言约束
这个方案比较取巧:在模型生成思维链时,对英文 token 的概率进行惩罚,强制模型偏向中文 token。实现上可以通过修改 logits 来实现。
我试过一版,效果是切英文确实少了,但推理质量有轻微下降,因为模型被迫走了一条它不太擅长的路径。后来我把惩罚系数调小,找到一个平衡点,切英文频率降了约三成,推理质量基本持平。
效果评分:中等偏上。适合不想动模型、但有一定工程能力的团队。
7.4 方案四:思维链后处理翻译
这个方案不改变模型行为,只在输出后做处理。实现简单,但翻译质量依赖翻译模型的能力,而且会增加延迟。对于实时性要求高的场景不太友好。
效果评分:中等。适合对延迟不敏感、只想让展示层看起来统一的场景。
8. 从语言切换看模型内部的语言组织方式
8.1 模型没有“语言开关”,只有激活模式
很多人想象模型内部有一个“语言开关”,中文任务开中文,英文任务开英文。实际不是这样。模型内部是一大片共享的参数,不同语言、不同任务对应的是不同的激活模式。这些模式之间有重叠,也有差异。
思维链切英文,本质上是推理任务的激活模式把模型推向了英文那一片区域。这不是开关切换,而是激活重心的漂移。
8.2 语言和任务的绑定是统计性的,不是逻辑性的
模型学到的“英文-推理”关联,是统计性的。它看到大量英文推理文本,就形成了这种关联。这种关联不是逻辑必然,而是数据分布的反映。所以它是可以被改变的,只要改变数据分布。
这也解释了为什么小模型更容易被提示词“掰”过来:小模型的统计关联没那么强,提示词的影响相对更大。
8.3 一个值得关注的趋势:中文推理语料正在变多
这两年中文推理语料的质量和数量都在提升,尤其是数学和代码领域。我注意到一些新出的国产模型,思维链切英文的频率已经比一年前明显降低了。这说明数据生态的改善正在慢慢改变模型的行为。
如果你在做相关的工作,我的建议是:与其抱怨模型说英文,不如参与到中文推理语料的建设中去。哪怕只是整理一批高质量的、带中文思维链的问答数据,对社区也是贡献。
9. 给不同角色的实操建议
9.1 产品经理:别把思维链语言当核心指标
思维链是模型的“草稿纸”,用户最终看到的是正式回答。只要正式回答的语言一致、质量过关,思维链里中英夹杂不是什么大问题。把精力放在最终输出的语言一致性和内容质量上,性价比更高。
9.2 算法工程师:微调时注意思维链的损失计算
如果你在做 SFT,记得对思维链部分也计算损失。只对答案计算损失,模型学不会用中文“打草稿”。另外,中文推理数据的质量比数量重要,宁缺毋滥。
9.3 提示词工程师:用示例代替指令
“请用中文思考”这种指令效果有限。更好的做法是在提示词里给出中文思考的示例,让模型有样学样。示例不需要很长,两三步就行,关键是逻辑清晰、语言自然。
9.4 普通用户:不用太在意
如果你只是日常使用 AI,思维链说英文这件事对你几乎没有影响。你看到的是最终回答,而最终回答通常是中文的。除非你专门去看模型的思考过程,否则这个问题不会影响你的使用体验。
10. 最后分享几个我踩过的坑
第一个坑:我曾经在一个教育类项目里,强行要求模型全程中文思考,结果模型在数学题上的准确率掉了将近一成。后来改成“最终答案必须中文,思考过程不限语言”,准确率回来了,用户体验也没受影响。不要为了语言一致性牺牲推理质量。
第二个坑:我试过用翻译模型把英文思维链转成中文再喂回给模型,想让模型“用中文继续思考”。结果模型被搞糊涂了,因为翻译后的思维链和模型原本的推理路径对不上,后续推理直接跑偏。思维链是模型自己的草稿,不要随便改。
第三个坑:我在微调时曾经把中文推理数据的比例调得过高,导致模型在英文任务上的表现下降。后来把中英推理数据的比例控制在合理范围,两边都保住了。语言能力的平衡很微妙,不要矫枉过正。
这些经验不一定适用于所有场景,但至少能帮你少走点弯路。模型的语言行为是数据分布的一面镜子,理解了这一点,很多看似奇怪的现象就都有了解释。