让 gpt-4.1 从 1 到 100 里“随机”选一个整数,连续问 1 万次,结果会是什么?

不是一条平线。37、42、73 冒尖,整十数几乎蒸发,69 反而低于预期。

这事真正有意思的地方,不是“AI 连随机数都不会选”。LLM 本来就不是骰子。它吐出的所谓随机,更像人类语料、采样机制和后训练规范共同压出来的分布。

这次实验测到什么

边界先说清楚:这个 GitHub 项目测的是 OpenAI gpt-4.1,通过 Responses API 调用,不是 ChatGPT 消费端 App。

这点很重要。ChatGPT App 里可能还有系统提示词、产品路由、工具调用和其他策略层。不能把这次 API 测试直接说成“ChatGPT 的表现”。

实验设置很简单:固定提示词,只要求模型输出 1 到 100 的一个整数。样本量 N=10000,temperature=1.0。

项目信息
测试对象OpenAI gpt-4.1
调用方式Responses API
样本量10000 次
温度temperature=1.0
任务输出 1 到 100 的一个整数
统计检验χ²=15604,df=99,p≈0
含义与均匀分布差异极大

如果是真正均匀随机,100 个数字每个大约应出现 100 次。实际不是。

37 和 42 的出现次数约为均匀预期的 4 倍。73 约为 3.4 倍。最高频的几个数字是 47、57、72、37、42。

整十数更反常。除 10 外,所有 10 的倍数出现 0 次;10 也只出现 1 次。

还有一个小刺点:69 没有像很多人类随机数测试里那样被高估,反而只有预期的 0.29 倍。项目作者猜测,这可能与安全过滤或后训练有关。

这个猜测合理,但还不能当结论。现在能确定的只是:在这组条件下,gpt-4.1 的输出分布严重不像均匀随机。

为什么重要:它暴露的是“采样人格”

人类本来就不擅长随机。

让人随口说一个 1 到 100 的随机数,很多人会避开 1、100、50 和整十数,转而选择看起来“不那么整”的数字。37、73 这类数容易被偏爱。42 还有《银河系漫游指南》的文化梗。

gpt-4.1 这次像什么?像一个读过大量人类回答、又被产品规范修剪过的人。

它不是在理解“随机”。它是在“请给我一个随机数”这个语言场景里,采样那些更像答案的 token。

“蓬生麻中,不扶而直。”环境会塑形。放到 LLM 上,就是语料会塑形,后训练也会塑形。模型输出不是凭空来的,它沿着过去的文本、偏好和规训流动。

所以我不太买账那种轻飘飘的嘲笑:你看,AI 连随机数都不会选。

这个嘲笑太浅。真正该警惕的是,很多人正在把 LLM 当成“通用不确定性机器”来用。

它的不确定性不是白噪声。它有纹理,有偏好,有产品痕迹。

这对两类人影响最大。

受影响对象容易踩的坑更稳的做法
开发者 / Agent 工程师让模型自己选随机样本、随机分支、随机编号用程序随机数生成器,再把结果交给模型解释或格式化
AI 产品评测者把模型多次输出当成独立、均匀、无偏的采样记录提示词、温度、调用方式和分布,单独做统计检验

普通用户偶尔让模型“随便选一个数”,问题不大。错了也只是娱乐。

开发者不一样。只要这个“随机”进入评测、抽样、路由、A/B 流程或 Agent 决策,偏差就会变成系统行为。

别向说书人借骰子。说书人会给你一个像故事的答案,不会给你一个干净的随机源。

接下来该看哪些变量

这次实验不能外推太远。

不能说所有大模型都这样。不能说所有 OpenAI 模型都这样。也不能说换提示词、换温度、换上下文后仍然一样。

这组结果更像一个探针:它把 gpt-4.1 在特定调用条件下的分布偏差照了出来。

接下来最该看四个变量。

变量为什么关键
提示词写法“随机选一个数”和“使用均匀分布选一个数”可能触发不同模式
temperature温度变化会改变采样分布,但不等于自动变均匀
模型版本不同模型、不同后训练策略,偏好峰值可能不同
69 这类敏感数字若长期偏低,才更能支持“安全/后训练影响”的假设

我更在意最后一个。

42 这种“聪明梗”被继承,69 这种“粗俗梗”被压低。如果更多实验也出现类似模式,它说明模型偏差不只来自人类语料,也来自平台希望模型成为什么样的人。

后训练不是擦除偏差,而是重新分配偏差。

有些东西被放大,有些东西被压低。最后呈现出来的,不是中性的智能,而是一种产品人格。

这并不等于说后训练不好。安全、可控、稳定,都是产品必须付的账。问题在于,用户和开发者不能把这种被调教过的输出误认成自然分布。

骰子没有人格。LLM 有。

这就是这次随机数实验最短的结论。