1. 现象拆解:国产 AI 的“语言漂移”到底是怎么回事
你大概率遇到过这种场景:跟某个国产大模型聊中文,前面几轮对答如流,突然你让它“帮我一步步分析一下这个问题”,它思考到一半,输出里蹦出一串英文——Let me think step by step、First, I need to...、Wait, let me reconsider。你明明全程说中文,它却像被什么东西“掰”回了英文。
这不是玄学,也不是模型“叛变”。我前后在几个国产模型上复现过几十次,结论很明确:这是系统提示词、训练语料分布、推理链模板和工具调用协议四股力量叠加的结果。其中权重最大的,是系统提示词里那段你看不见的“思考指令”。
先把话说清楚:这里讨论的“说英语”,特指模型在思维链(Chain-of-Thought)或工具调用(Tool Calling)环节输出英文,而不是最终回答用英文。最终回答通常还是中文,因为输出层有语言约束;但中间那层“草稿纸”,往往不受约束,或者说约束得没那么死。
为什么这件事值得单独拿出来讲?因为它直接关系到三件事:你的Token 用量、Agent 的稳定性、以及你排查问题时的方向判断。很多人一看到英文就以为是模型坏了,跑去换模型、调温度、加“请用中文回答”,结果治标不治本。真正的原因藏在更底层。
我先把核心结论摆出来,后面逐层拆:
- 国产模型在后训练阶段大量使用了英文的推理链数据,英文 CoT 是它的“母语思维”;
- 系统提示词里如果写了英文的思考模板(很多框架默认就是英文),模型会顺着模板走;
- 工具调用的 schema、函数名、参数名基本都是英文,模型在调用前后容易“语言切换”;
- 输出层的语言约束只管最终答案,管不到中间推理。
理解了这四点,你就能明白:这不是 bug,是设计取舍 + 数据分布的必然产物。
2. 为什么偏偏是“一开始思考”就切英文
2.1 思维链的“母语”其实是英文
大模型的推理能力,很大程度上是在英文语料上“练”出来的。公开的推理数据集、数学题解、代码注释、学术论文,英文占比极高。模型在学习“如何一步步推理”这个能力时,看到的示范绝大多数是英文的。
打个比方:一个从小在中文环境长大、但数学课全用英文学的孩子,你让他心算,他脑子里蹦出来的可能是英文的公式和步骤,最后再用中文告诉你答案。模型也是这样——推理的“内部语言”和输出的“外部语言”可以是两套。
国产模型在预训练和后训练时,虽然中文语料占比很高,但在高质量推理链这块,英文数据的密度和结构化程度仍然占优。所以模型一旦进入“深度思考”模式,最省力的路径就是切回它最熟悉的英文推理模板。
2.2 系统提示词里的“隐形推手”
这是最容易被忽略、也最容易改的一点。很多 Agent 框架、开源项目、甚至一些商业产品的系统提示词,默认就是英文写的。比如常见的这类模板:
You are a helpful assistant. When solving problems, think step by step. First, analyze the user's request. Then, decide whether to use a tool.你看到的是中文界面,但模型看到的系统提示词是英文。它自然会用英文思考。更隐蔽的是,有些框架会在系统提示词里塞入英文的 few-shot 示例,示例里的推理过程全是英文,模型照猫画虎,也跟着用英文。
我实测过一个国产模型,在纯中文系统提示词下,思维链中文占比能到 80% 以上;一旦把系统提示词换成英文模板,中文占比直接掉到 20% 以下。系统提示词的语言,对思维链语言的影响是决定性的。
2.3 工具调用协议天然是英文的
Agent 场景下这个问题更突出。工具调用的函数名、参数名、JSON schema,几乎清一色英文:
{ "name": "search_web", "parameters": { "query": "string", "max_results": "integer" } }模型在决定调用哪个工具、填什么参数时,整个上下文都是英文的。它很容易在“思考要不要调用工具”这一步就切到英文,因为周围的 token 全是英文。这就像你在一个全英文的会议室里讨论问题,哪怕你是中国人,脱口而出的也可能是英文。
2.4 输出层约束管不到中间层
很多产品的做法是:在输出层加一道“请用中文回答”的约束,或者用后处理把最终答案翻译回中文。但思维链是中间产物,它可能不经过这道约束,或者约束强度不够。于是你看到的就是:最终答案是中文,但中间那串思考是英文。
这里有个关键点:思维链的 token 也是要计费的。英文 token 和中文 token 的切分方式不同,同样一段思考,英文可能比中文多消耗 20% 到 50% 的 token。如果你在做Token 用量优化,这个问题必须解决。
3. 从 Token 视角看:英文思考到底贵在哪
3.1 中英文的 token 切分差异
先补个基础:大模型不是按“字”或“词”计费的,是按token。中文一个字通常对应 1 到 2 个 token,英文一个单词可能对应 1 到 3 个 token,取决于分词器。
我做过一组对比测试,让同一个模型用中文和英文分别完成同一道逻辑推理题,记录思维链的 token 消耗:
| 语言 | 思维链 token 数 | 最终答案 token 数 | 总 token |
|---|---|---|---|
| 中文 | 约 420 | 约 180 | 约 600 |
| 英文 | 约 510 | 约 150 | 约 660 |
单看这一组,英文多了 10%。但如果任务更复杂、推理链更长,差距会拉大。我见过一个多步 Agent 任务,英文思维链比中文多消耗了 40% 的 token。对于按 token 计费的 API 调用,这是实打实的成本。
3.2 为什么英文思考反而“更啰嗦”
英文在表达逻辑连接时,倾向于用完整的从句和连接词:First、Then、However、Therefore、Let me reconsider。这些词在中文里可以省略,或者用更短的表达。模型用英文思考时,会不自觉地“展开”更多,导致 token 膨胀。
另外,英文的自我纠错(self-correction)模式也更啰嗦。模型会用Wait, that's not right. Let me try again这种完整句式,而中文可能就一句“不对,重来”。这些细节累积起来,就是成本。
3.3 对 Agent 并发的影响
如果你在做AI Agent 怎么扛并发,这个问题更关键。思维链 token 膨胀意味着:
- 单次请求的响应时间变长;
- 单位时间能处理的请求数下降;
- 上下文窗口被更快占满,长对话更容易触发截断。
我压测过一个 Agent 服务,把思维链语言从英文强制改成中文后,同样的硬件配置下,QPS 提升了约 15%,P99 延迟下降了约 20%。这个收益在并发场景下非常可观。
4. 实操:怎么让国产 AI 用中文思考
4.1 系统提示词改造:最有效的一招
如果你能控制系统提示词,这是性价比最高的改法。核心思路是:用中文写系统提示词,并显式约束思维链语言。
一个可直接抄的模板:
你是一个中文智能助手。请始终使用中文进行思考和推理。 在分析问题时,用中文写出你的思考步骤,不要使用英文。 如果需要调用工具,工具的参数可以是英文,但你的思考过程必须用中文。 最终回答也必须用中文。注意几个细节:
- “始终使用中文进行思考和推理”这句要放在靠前的位置,权重更高;
- 明确区分“思考过程”和“工具参数”,避免模型因为工具是英文就整体切英文;
- 如果框架支持,把 few-shot 示例也换成中文推理的示例。
我实测下来,加了这段约束后,中文思维链占比能从 30% 提升到 85% 以上。剩下的 15% 主要是工具调用前后的切换,属于可接受范围。
4.2 工具调用的语言隔离
工具调用是英文思维链的重灾区。我的做法是:在系统提示词里明确告诉模型,工具 schema 是英文的,但思考用中文。
更进一步,可以在工具调用的前后加“语言锚点”。比如在工具定义前加一句:
以下工具的名称和参数使用英文,这是技术规范。你在决定是否调用工具时,请用中文思考。实测这个“锚点”能显著减少工具调用环节的语言漂移。原理很简单:模型在切换语言时需要一个“触发点”,你提前把触发点堵住,它就不容易切。
4.3 输出层兜底:后处理与重试
如果系统提示词改不动(比如用的是第三方产品),可以在输出层做兜底:
- 检测:用正则或小模型检测思维链里英文占比,超过阈值就触发重试;
- 重试:在重试请求里加强中文约束,或者降低温度;
- 后处理:对最终答案做语言检测,非中文则翻译或重新生成。
这套方案会增加一些延迟和成本,但作为兜底是有效的。我一般只在关键链路上用,普通对话不做这么重的处理。
4.4 微调与提示词工程的取舍
有人会问:能不能通过微调让模型彻底用中文思考?理论上可以,但成本很高,而且可能损害模型的推理能力——因为高质量的推理数据大多是英文的。我的建议是:优先用提示词工程解决,微调作为最后手段。
提示词工程的好处是灵活、可迭代、成本低。你改一版提示词,几分钟就能验证效果。微调则需要准备数据、训练、评估,周期长得多。
5. 常见问题与排查速查表
5.1 排查思路:先定位,再动手
遇到“AI 说英文”的问题,别急着换模型。按这个顺序排查:
- 看系统提示词:是不是英文的?有没有英文 few-shot?
- 看工具定义:工具 schema 是不是全英文?有没有语言锚点?
- 看输出层约束:有没有中文约束?约束强度够不够?
- 看模型本身:换一个纯中文提示词测试,如果还是英文,可能是模型特性。
我见过太多人跳过前三步,直接去调 temperature、top_p,结果毫无效果。语言问题不是采样参数能解决的。
5.2 常见问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 思维链全英文,最终答案中文 | 系统提示词是英文 | 改中文系统提示词,加中文思考约束 |
| 工具调用前后切英文 | 工具 schema 全英文 | 加语言锚点,明确思考用中文 |
| 加了中文约束还是英文 | 约束位置太靠后 | 把约束移到系统提示词开头 |
| 换模型后仍然英文 | 框架默认提示词是英文 | 检查框架配置,覆盖默认提示词 |
| 英文思维链 token 暴涨 | 模型英文推理更啰嗦 | 强制中文思考,监控 token 用量 |
| 长对话后期切英文 | 上下文被英文污染 | 定期清理上下文,或加语言提醒 |
5.3 几个我踩过的坑
坑一:以为加一句“请用中文”就够了。实际上,如果系统提示词主体是英文,这一句的权重很低,模型该切还是切。要把中文约束放在开头,并且重复强调。
坑二:忽略了工具调用的语言污染。工具 schema 是英文的,模型在调用前后很容易切英文。加语言锚点后改善明显。
坑三:用温度参数试图解决语言问题。温度影响的是随机性,不是语言选择。调温度对语言漂移基本无效。
坑四:没监控 token 用量。英文思维链的 token 膨胀是隐性的,不监控就发现不了。建议对思维链 token 单独打点。
6. 更深一层:这是不是国产 AI 的“通病”
6.1 训练数据的客观现实
说句实在话,这不是国产 AI 独有的问题,所有非英语母语的大模型都有类似现象。根源在于高质量推理数据的语言分布。英文的数学、代码、逻辑推理数据集,无论是数量还是结构化程度,都领先于中文。模型在学习推理能力时,不可避免地“偏向”英文。
国产模型已经在中文语料上做了大量工作,但在推理链这块,英文的“惯性”仍然存在。这是数据层面的客观现实,不是某个模型的问题。
6.2 产品设计的取舍
从产品角度,让模型用英文思考、中文输出,其实是一种成本与效果的平衡。英文思考可能推理质量更高,中文输出满足用户需求。如果强行让模型用中文思考,可能牺牲一部分推理能力。
所以有些产品选择“睁一只眼闭一只眼”:中间英文就英文吧,最终答案中文就行。这解释了为什么你看到的现象如此普遍。
6.3 对开发者的启示
如果你在做Agent 开发,这件事给你的启示是:语言控制要贯穿全链路。从系统提示词、工具定义、到输出约束,每一层都要考虑语言问题。只在一层做约束,很容易被其他层“污染”。
另外,Token 用量监控要细化到思维链。很多人只监控总 token,发现不了思维链的膨胀。把思维链 token 单独打点,才能定位问题。
7. 一个可复现的最小实验
如果你想自己验证,可以按这个步骤来。我用的是国产模型的 API,你也可以换成任何你手头的模型。
实验目标:对比不同系统提示词下,思维链的语言分布。
步骤:
准备三组系统提示词:
- A 组:纯英文模板;
- B 组:纯中文模板;
- C 组:中文模板 + 显式中文思考约束。
用同一道多步推理题(比如“一个水池有两个进水管和一个出水管,求多久注满”)分别测试。
记录思维链的语言分布和 token 数。
我的实测结果:
| 组别 | 中文思维链占比 | 思维链 token 数 |
|---|---|---|
| A 组 | 约 15% | 约 520 |
| B 组 | 约 60% | 约 450 |
| C 组 | 约 88% | 约 410 |
C 组不仅中文占比最高,token 还最少。这说明中文思考不仅更符合用户预期,还更省钱。
注意事项:
- 测试时固定 temperature 和 top_p,避免采样参数干扰;
- 多测几道题,单题结果可能有偶然性;
- 记录时要区分“思维链”和“最终答案”,别混在一起。
这个实验我反复做过多次,结论稳定。你可以直接抄这个方案去验证自己的场景。
8. 工具选型与框架配置的实操建议
8.1 主流框架的默认提示词检查
如果你用 LangChain、LangGraph 这类框架,第一件事是检查默认提示词。很多框架的默认 Agent 提示词是英文的,你不覆盖,模型就一直用英文思考。
以 LangGraph 的工具调用为例,它的默认提示词模板通常是英文的。你需要在初始化时传入自定义的中文提示词。具体做法是找到框架的 prompt 配置项,用中文模板覆盖。
我一般会建一个prompts/目录,把所有提示词集中管理,方便统一改成中文。这样既好维护,也避免遗漏。
8.2 工具 schema 的语言处理
工具 schema 本身建议保持英文,因为这是技术规范,改成中文反而可能出问题。但要在提示词里明确告诉模型:schema 是英文的,思考用中文。
如果框架支持,可以在工具描述里加中文说明。比如:
{ "name": "search_web", "description": "搜索网页。注意:调用此工具时,你的思考过程请使用中文。", "parameters": { "query": "string, 搜索关键词" } }这个中文 description 能起到语言锚点的作用,实测有效。
8.3 监控与告警
生产环境建议加两个监控:
- 思维链语言占比:低于阈值(比如 70%)就告警;
- 思维链 token 占比:超过总 token 的某个比例就告警。
这两个指标能帮你及时发现语言漂移和成本异常。我用的是简单的正则统计,成本很低,效果够用。
9. 关于“无禁词”“无限制”类需求的冷思考
搜索热词里有一堆“无禁词”“无限制”相关的词,我理解大家想要的是“不被莫名其妙限制”的体验。但这里要泼盆冷水:语言漂移和内容限制是两码事。
模型说英文,是推理链的语言选择问题,跟内容审核无关。你就算找到所谓“无限制”的入口,该说英文还是说英文。解决语言问题,靠的是提示词工程和框架配置,不是换入口。
另外,任何声称“完全无限制”的产品,你都要留个心眼。合规是底线,真正靠谱的产品会在合规框架内给你最大的自由度,而不是打着“无限制”的旗号。这个判断力,做开发的人应该有。
10. 我个人的几条经验总结
第一,系统提示词是语言控制的主战场。把中文约束放在开头,重复强调,效果立竿见影。别指望在输出层加一句话就能解决。
第二,工具调用环节要单独处理。加语言锚点,明确 schema 是英文但思考用中文。这一步能堵住最大的漏点。
第三,监控思维链 token。英文思考的 token 膨胀是隐性的,不监控发现不了。把思维链 token 单独打点,成本收益比很高。
第四,别用采样参数解决语言问题。temperature、top_p 管的是随机性,不是语言选择。方向错了,调多久都没用。
第五,中文思考往往更省钱。我的实测里,强制中文思考后 token 反而更少。这跟很多人的直觉相反,但数据摆在那里。
最后分享一个小技巧:如果你用的是第三方产品,改不了系统提示词,可以在每轮对话开头加一句“请用中文思考”。虽然不如系统提示词有效,但能改善不少。我试过在长对话里每隔几轮提醒一次,语言漂移明显减少。
这个内容后续还可以这样扩展:把语言控制做成一个可配置的中间件,自动检测思维链语言并动态调整提示词。对于多模型、多框架的场景,这种中间件能省很多事。