MatrAIx 的 83 亿人设:真功夫还是花架子?
先说结论:这到底是在模拟全世界人口,还是又一场角色扮演?8 月 4 日,哈佛和 MIT 发表论文 MatrAIx,给它的定位是模拟全球人口。我们读完了论文,也复现了代码仓库。里面确实有真东西,但它模拟的并不是人口。所谓 83 亿个人设,其实是一个研究生水准的采样器,做得扎实,却顶着一个它兑现不了的标题。它用的方法是人口属性人设条件化,已有研究早就测过,结论是不够用;它实际发布的东西,连自己定的门槛也没过。我们自己也在做合成人口,这篇是对它的第一份独立评估。

半年前我们开始做 iMario,想做的是让智能体做决定前,先听听受影响的人怎么说。道理一句话就能说清,做起来却很难:一个 AI 系统或数字产品,在真正接触真人之前,就要能测出它在形形色色的真实人群里各会引起什么反应。
所以 8 月 4 日,哈佛和 MIT 的团队一发表 MatrAIx: Simulating the World with 8.3 Billion Persona Agents(用 83 亿个人设智能体模拟世界),我们就没法只在一旁看热闹了。我们把论文连同附录一页不落地读完,下载了开源仓库,跑了采样器和渲染器,也把他们在 Hugging Face 上公开的 100 万条数据集跑了一遍。
论文做对了什么
论文里的 App 环境,是这个领域迄今为止工程上做得最扎实的东西。真实的 iPhone 17 模拟器,系统是 iOS 26.4,装的是真正的 Apple News 应用,智能体自己从屏幕上读出 $12.99 的价格。72 次试验全部返回了符合 schema 的提交结果,没有一个实验组凭空编出价格。论文自己做的能力对比表里,“原生设备执行”这一行只有他们打了勾。
配套的记账也严谨得少见。计划的样本组和实际跑出来的样本组分开存放;失败的试验留在分母里,没有悄悄换掉;批量汇总时先跑一遍确定性的统计,之后才允许模型去总结任何东西。
论文还大方公布了几组自己拆自己台的数字。同一组人设、同一个任务,用一个模型,付费套餐转化率是 23.2%;换一个模型,就成了 93.9%。不同模型两两比较,88 个可对齐字段上的 Cohen's kappa 中位数是 0.000。让模型说出自己所扮演人设的年龄段,GPT 5.5 的命中率是 16.3%,Opus 4.8 是 16.9%,而随机猜中的概率是 16.7%。附录 M 自己就把结论写了出来:
“文中报告的每一个结果,都是人设智能体的结果,并不直接说明一个真人会怎么做。”
白纸黑字,是作者自己写的。
把方法说白了
把论文剥到只剩机制,一共三步。
- 抽一条记录。 4 个根属性取自联合国人口数据的边际分布,其余 1,286 个属性,在一张手工搭建的图上顺着 6,999 条边做条件抽样。
- 渲染成提示词。 记录变成系统提示词里各个小标题下的一条条列表项:“You are X.
### Identity- Age bracket: 25-34.” - 只问一次。 模型一次性答完整份问卷,答案直接记下来。
没有微调,没有激活引导(activation steering),也没有对输出做校准。我们在整个运行时代码里搜了事后分层(poststratification)、迭代比例加权(raking)和重新加权(reweighting),一处都没找到。所谓人口层面的估计,就是 N 次单轮生成结果的简单平均,不做任何加权。
这套机制就是人口属性人设条件化(demographic persona conditioning),过去一年里学界已经反复测过。它的天花板比论文里任何一个数字都重要,因为规模再大,也抬不高这个天花板。
这种方法,学界早就测过
今年有三项发现和这套设计直接相关。我们只引用近期的研究,因为在更早几代模型上测出来的结果,说明不了今天的 Opus 4.8 或 GPT 5.5 会怎么表现。
先看人,再看模型。Salesforce Research 的 SCOPE 研究让 124 名美国参与者完成了一套两小时的社会心理学测试,然后在 134 道题上,计算每两个人之间人口属性的相似度和回答的相似度有多相关。他们的结论是,人口属性相似度“只能解释回答相似度中 r²≈1.5% 的方差”。一个人和另一个人答得不一样,原因几乎从来不在人口属性上。
模型如果只拿到人口属性,不会把它当成一个弱因素,反而会放大它。同一项研究测出,只写了人口属性的人设,会把人口属性的影响夸大 100% 以上,GPT-4o 的偏差指数达到 101.23。
纸面上各不相同的人设,行为上也会趋同。4 月发表的 The Chameleon's Limit(变色龙的极限)评测了 10 个大模型,给这个毛病起了个名字,叫“人设坍塌”(Persona Collapse):“每个智能体分到的档案各不相同,行为却收敛到一个狭窄的模式里,模拟出来的是一群同质化的人。”它的逐题诊断发现,回答之间虽有差异,反映的却是“粗糙的人口刻板印象,而不是每个人设里写明的细微个体差异”。这篇论文里有一句话,值得直接摆在 MatrAIx 主打的验证数字旁边:
“与直觉相反,单个人设还原度最高的模型,生成的人群总是最刻板化的。”
这些,作者并不是不知道。他们在自己的“相关工作”一节里,一句话就说清了:模型“可能抹平组内差异、放大刻板印象、忽略人设字段,或者以其他方式偏离人类行为”。论文点出了问题,也引用了四个记录过这个问题的研究团队,却从没拿这些问题检查过自己生成的人群。
所以,维度多少从来就不是关键。这套机制已知的毛病,恰恰是会忽略给它的大部分属性;往提示词里再加属性,治不了这个病。
宣传的说法,和实际发布的东西
| 论文的说法 | 实际发布的东西说明了什么 |
|---|---|
| 83 亿个人设智能体 | 84 亿行数据。按论文自己的定义,一条记录要和模型配对之后才算智能体。采样器在一台笔记本上 2.76 秒就能产出 20,000 行 |
| 以真人为依据 | 84 亿条记录里,来自真人的有 2,222,496 条,占 0.03%。一个 GSS 人设渲染进提示词的属性只有 14 个,里面没有年龄 |
| 每个人设 1,290 个维度 | 实验跑的是 124 个。其中 35 个是菜系偏好,35 个是写作风格属性。前面的研究已经说明,维度数量从来不是真正卡脖子的地方 |
| 依赖图让每个人设前后自洽 | 6,999 条边里只有 107 条是从数据估计出来的,全部来自同一份调查。一致性审核大约就是 20 条手写规则。我们实测发现:态度和人口属性在统计上相互独立 |
| 模拟整个世界 | 地理信息只有 10 个取值。1,290 个维度里,哪儿都找不到“国家”这个属性 |
| 1,010 个评测任务 | 按论文自己的表格,其中 956 个来自三批模板生成。真正执行的只有 8 个 |
| 经验证的遵循度 91.5% | 只测了 10 个风格属性。而按前面引用的研究,单个人设还原度高,恰恰是人群坍塌时会看到的数字 |
83 亿,到底是 83 亿个什么
按代码仓库自带的计时报告,采样器单核每秒能出 25,394 行。一台笔记本,4 个工作进程,不用 GPU,生成 2 万个人设只要 2.76 秒,启动时间也算在内。全部 84 亿行大约要 92 个核心小时,也就是一个周末的事。
而且 84 亿也不是生成器实际造出来的数。表 7 显示,进入后处理的有 10,002,288,277 行,经过一个确定性的截断,正好砍到 8,400,000,000 行。这个目标值在图的元数据里写得明明白白:target_population_frame: "global_all_humans_current_schema"。实际造出来的是 100 亿,多出来的直接丢掉,为的是对上联合国统计的在世人口数。
这里面没有任何不诚实的地方。也得说清楚,单看一行数据造起来多便宜,什么也证明不了;要追问上限在哪里,成本才开始说明问题。把 1,290 个维度各自的熵加起来,是 1,542 奈特(nats),大约对应 10^670 种可区分的组合。产出 84 亿条互不重复的行,也就是 10^9.9,离把这台机器用到极限还差得远。再花一个周末,就能拿到 160 亿,或者 800 亿,标题要多少有多少。
对一个数据集来说,这么做合情合理;写进标题就有些奇怪了。论文第 5 页有一句很容易一扫而过的话,给自己的计数单位下了定义:一条记录要和模型配对,才算一个人设智能体。不配对,它就只是 Parquet 文件里的一行。
文件里的“真人”长什么样
84 亿条记录里,能追溯到真人的有 2,222,496 条。其中约 194 万条是维基百科上的人物传记,也就是有名到能上百科的人;剩下的是调查受访者和亚马逊上的评论者。
数清楚有多少条不难,难的是另一个问题:一个真人经过抽取,还能剩下多少。答案在代码仓库里:拼装提示词的渲染器,会跳过所有停在 schema 默认值上的属性。
| 来源 | 100 万条公开数据中的行数 | 进入提示词的属性数 |
|---|---|---|
| GSS | 63,532 | 14 |
| 亚马逊 | 97,915 | 19 |
| Stack Overflow | 113,120 | 62 |
| 维基百科 | 323,438 | 157 |
| 合成 | 400,000 | 666 |
下面是一个完整的 GSS 人设,不是节选。模型要扮演这个人,而关于这个人,它能拿到的全部文字就是这么一段:
### Identity
- Region: North America
- Socioeconomic band: Lower-middle
- Marital status: Single
- Employment status: Full-time
- Ethnic background: White / European
### Career & education
- Highest education: Secondary
### Worldview
- Political lean: Left
### Lifestyle & health
- General health: Good里面没有年龄。论文测试的三个前沿模型里,有两个说不出自己人设的年龄段,准确率和瞎猜差不多,很大程度上就是这个原因。
没用上的 1,290 个维度
论文图 10 写明,News+ 那组人设跑的是 124 个维度。膳食规划那组用的是“82 个 schema 维度加 42 个任务专属”属性,加起来也是 124。这套维度就在代码里:其中 35 个是菜系偏好,另外 35 个是调节写作风格的开关,真正能描述一个人的背景属性只有 47 个。论文里全部 18,189 次试验,用的都是这一套。
所以,1,290 是数据集的规格,124 才是实验的规格。真正值得问的是,多出来的 1,166 个维度要是用上了,会不会有帮助。人设坍塌的研究已经回答过:行为差异跟着粗糙的刻板印象走,“而不是每个人设里写明的细微个体差异”。模型只按少数几个刻板印象鲜明的属性行事,塞给它 1,200 个属性,它也不会因此还原得更准。
Schema 自己的熵预算,从数据这一侧给出了同样的结论。在这 1,290 个维度的总变异里,兴趣、媒体和饮食占 15.8%,熟悉度评分占 9.2%,工具与编程占 5.8%,态度占 4.6%。47 个核心的人口、职业和人格属性,只占 4.7%。让这些人设彼此区分开的,大多是从近乎相互独立的先验里抽出来的偏好噪声。
还有一处小出入,值得记一笔。论文说,每个有值的属性都附带一段自然语言描述,所以一条记录“读起来像一份个人档案,而不是一串分类取值”。可拼装提示词的代码读的是原始分类值,从来没碰过这些描述。
论文全靠这张图,图却大多是人为设定
如果 1,290 个属性各抽各的,就会抽出怪物:8 岁的孩子有 20 年工作经历,母语是英语的人却不会说英语。论文的办法是一张有 1,308 个节点、6,999 条有向边的图,每条边带一张条件概率表,让教育、语言和资历联动起来。这是论文真正的技术贡献。第 6 页对这些边的来历,有一句明确的承诺:
“只有某个数据源直接报告了这种条件关系,我们才加一条边。任何现有数据集都没有提供的联合分布,我们不会拿来推断边。”
公开发布的图里,每条边都标了依据:
| 依据等级 | 边数 | 占比 |
|---|---|---|
schema_semantic_prior(按 schema 语义设定) | 5,072 | 72.5% |
| 未标注 | 1,269 | 18.1% |
manual_structural_prior | 550 | 7.9% |
raw_direct(从数据估计) | 107 | 1.5% |
这 107 条有数据支撑的边,全部出自同一个地方:Stack Overflow 2025 年开发者调查。它们是整张图里记录得最完整的部分,标注了 26,121 到 47,821 不等的实测行数,也写明了源文件。构建时用到的另外 12 个真实数据源,只用来估计节点的边际分布和 54 张完整的条件概率表,没有贡献任何一条两两之间的边。
哪些属性之间连了边,本身也值得追问。如果是逐条判断,任意两类属性之间的连边应该很稀疏;如果是按类别规则批量生成,密度就会接近全连接:
| 关系组 | 源节点数 × 目标节点数 | 实际连边 | 密度 |
|---|---|---|---|
| education_domain_to_expertise | 5 × 351 | 1,748 | 99.6% |
| programming_exposure_to_code_style | 33 × 12 | 396 | 100% |
| domain_to_industry_exposure | 5 × 50 | 250 | 100% |
| life_course_causal_prior | 22 × 10 | 219 | 99.5% |
一条规则就铺下了 1,748 条边。全部 6,999 条边,一共用了 53 种不同的理由说明,最常见的那一种用在了 1,748 条边上。元数据里提到的三个建图脚本不在仓库里,所以开源出来的是成品,而不是造出它的过程。
一致性把关就更单薄了:一个审核模块,大约 20 条手写规则,只管到 1,290 个维度里的 25 个左右。它报出的结果是“存在硬性问题的人设占 0.00%”,意思只是这 20 条规则一条都没触发。抽 20 万个人设,去看规则管不到的地方,这批人马上就乱了套:
- 生成出来的 0 到 12 岁儿童里,12.7% 带着服兵役、离婚或结婚这类重大人生事件。没有任何规则把人生事件和年龄挂钩。
- 12 岁以下的儿童里,4.6% 经常用 Python。
- 在这个生成出来的“全人类”里,40.5% 的人用过 Python。真实比例远低于 2%。
最后这一条,恰好出自那 107 条有数据支撑的边之一,所以值得多说几句。这个条件概率在 Stack Overflow 的受访者里是准的,可 Stack Overflow 的受访者都是开发者。生成出来的世界人口里,24.5% 务农,21% 是儿童,把这个条件概率原封不动地套上去,得到的就是一个五个人里有两个写 Python 的星球。图里没有一条边记录自己的条件概率是在哪个人群上估计的,整个流程里也找不到任何重新加权的步骤。这不是抽样误差,而是把来源人群错当成了目标人群。
说句公道话,这一切底下的骨架是扎实的。年龄、地区、性别和城乡这 4 个根边际分布,都按联合国《世界人口展望 2024》(World Population Prospects 2024)做了校准;54 张多父节点的条件概率表,是从 ACS PUMS、GSS、WVS 第 7 轮和 ILOSTAT 等 13 个真实数据源估计出来的。仓库在自己的依据字段里,也坦白交代了边界:“边际分布按全球数据校准过,并不意味着两两之间的关系就有原始数据支撑。”
这些关系,在生成的人群里还剩多少
手写的表也可能是对的。要知道对不对,就拿一组真实强度已知的关联,看生成的人群能不能复现出来。
我们用了 ANES 2020 的 8,280 条加权个人记录,两边都用偏差校正后的 Cramer's V 衡量两两关联,再把其中一列随机打乱 200 次,确定这么大的样本在完全独立时数值会落在哪里。参照基准是美国数据,为了比得公平,生成样本只取北美成年人,n = 6,760。
| 维度组合 | 真实世界 | MatrAIx | 独立基线 | 结论 |
|---|---|---|---|---|
| 意识形态 × 移民态度 | 0.338 | 0.000 | 0.020 | 坍塌 |
| 宗教虔诚度 × 意识形态 | 0.274 | 0.000 | 0.021 | 坍塌 |
| 种族 × 收入 | 0.137 | 0.000 | 0.023 | 坍塌 |
| 教育 × 意识形态 | 0.130 | 0.034 | 0.021 | 偏弱 |
| 教育 × 收入 | 0.200 | 0.118 | 0.019 | 保留 |
| 年龄段 × 教育 | 0.105 | 0.092 | 0.022 | 保留 |
底下有真实条件概率表的地方,关联保留了下来;只靠一条手写边撑着的地方,关联和噪声分不出来。在这个人群里,一个人的态度和他是谁,在统计上毫无关系:档案上写着政治倾向偏左,移民态度却是另外单独掷骰子掷出来的。
这和坍塌研究说的不是同一种问题。人设坍塌讲的是模型作答时出的问题,发生在生成文字的那一刻。这里的坍塌,数据里就已经有了。哪怕有一个完美的模拟器,把给它的每个属性都照单全收,也还原不出一个当初根本没抽样进去的相关性。
这样一来,论文自己那两个没测出差异的结果也就说得通了。Candy Land 任务按经济动机把 1,000 个人设分层,结果对价格的反应没有任何差别。膳食规划任务测了 82 个维度,校正后最好的 q 值也只有 0.51。知道了这个人群里态度和身份毫无关系,这两个结果就一点也不意外。
整个世界只有 10 个地方
1,290 个维度里,找不到任何“国家”属性。地理信息只有一个字段 region,取值只有 10 个:北美、拉丁美洲、西欧、东欧、撒哈拉以南非洲、中东和北非(MENA)、南亚、东亚、东南亚、大洋洲。
| 地区取值 | 实际人口 | 并入的国家数 |
|---|---|---|
| 南亚 | 约 20.6 亿 | 8 |
| 东亚 | 约 16.8 亿 | 7 |
| 撒哈拉以南非洲 | 约 12.7 亿 | 54 |
| 东南亚 | 约 7.0 亿 | 11 |
| 拉丁美洲 | 约 6.6 亿 | 33 |
| 中东和北非 | 约 5.8 亿 | 20 |
尼日利亚、印度尼西亚、孟加拉国、巴西、越南和埃塞俄比亚,都没法单独抽样,丹麦也不行。语言也补不上这个窟窿:primary_language 只有 12 个取值,所以说印尼语、乌尔都语、旁遮普语、爪哇语、韩语、越南语、土耳其语、意大利语、波兰语和波斯语的人统统不存在,加起来远远超过 10 亿人。
国家名在 schema 里确实出现过,但只在一个地方。40 个 cult_* 维度,比如 cult_united_states 和 cult_kenya,用 5 分量表记录一个人设对这个国家文化的熟悉程度。这衡量的是接触多少,不是住在哪里。世界上大约 155 个国家在 schema 里压根没有出现;那 4 个经过校准的边际分布,也都是全球层面的,不分国家。
所以说到较小的市场,实话是:问题不在于 MatrAIx 模拟得不好,而在于它根本没法表示这些市场。你想要印尼消费者,能抽到的只有“东南亚”:11 个国家、7 亿人共用的一个分类值。
上千个任务,只跑了 8 个
表 9 对任务库的交代还算老实:405 加 200 加 351,也就是 1,010 个任务里的 956 个,来自三批模板生成的任务集,放在合成任务分支上。公开仓库里有 18 个任务目录,其中 8 个是真正的研究,论文实际执行的也正好是 8 个。论文的原话是:“任务数量并不意味着 1,010 项研究都已执行。”到了媒体报道里,这句话就没了。
91.5%,是什么的 91.5%
主打的验证数字背后是 10 个属性,列在附录 I.1:emoji 使用、幽默、礼貌、讲故事、行话、啰嗦程度、语体,外加三种代码格式习惯。这项测试只看一件事:让模型啰嗦一点,它是不是真的啰嗦了。论文明确说,这测的是条件化有没有生效,而不是“生成的用户像不像真人”。而且换一个扮演人设的模型,数字就变了:换成 GPT 5.6 就掉到 79.2%,在全部 4 个环境里,“啰嗦程度”一项都是 5 分得 0 分。
更棘手的问题是,这项指标得分高,对整个人群意味着什么。回想一下 The Chameleon's Limit 的结论:单个人设还原度最高的模型,生成的人群总是最刻板化的。这是在 10 个模型上观察到的相关性,不能当作对这套系统的证明,但至少说明,单个人设遵循度高,不能拿来担保多样性没问题。再看这套系统自己跨模型的 kappa 中位数是 0.000,加上前面测出的关联结果,91.5% 就再也不能当成没有坍塌的依据,反倒更像坍塌正在发生时该有的数字。
它的价值在哪
去掉标题,剩下的是一套测试框架和一批公开数据。只按这两样来评价,它是有用的:4 个能跑起来的环境,可复现的试验记账,一份公开的 100 万条数据集,问卷和知情同意文件也一并公开,还有一份比大多数厂商材料都坦诚的局限性附录。附录 M 关于共用基座的警告是实打实的方法论贡献:如果扮演人设的模型和受测系统共用一个基座模型,得到的好结果就没法和“模型偏爱自己的输出”区分开。
论文第 2 页对自己的上限也很坦白:“这种方法不需要一个完美的人类行为模型也能派上用场。”拿这句话形容一套测试框架,很公允;放在一个许诺了整个世界的标题下面,就不公允了。
麻烦就出在标题和附录之间的落差上:
| 标题与摘要 | 附录 | |
|---|---|---|
| 规模 | 83 亿个人设智能体 | 表 7:220 万来自真人,占 0.03% |
| 验证 | 91.5% 遵循度 | I.1:10 个风格属性 |
| 结论 | 揭示了不同人设群体之间的差异 | M:只用于提出假设 |
这谈不上欺骗。标题需要一个传得开的数字。坏就坏在下游:在那些从没打开过代码仓库的文章里,这个数字变成了“AI 现在能精确复刻 83 亿人”。
我们从中得到什么
半年前我们选定这个方向,让智能体做决定前先听听受影响的人怎么说。当时的判断是:难点不在规模,而在校准和验证。
这篇论文从反方向印证了这一点。它把规模推到了物理极限:84 亿行、1,290 个维度、10^670 的组合空间,公布出来的跨模型一致性却是 kappa 等于零。我们的测量补上了中间缺的那个机制:在背后没有真实联合数据的维度上,属性之间的关联是 0.000。
规模换不来还原度。 一个人群可以每个边际分布都对,各个维度之间却彼此独立。这样的人群撑不起任何子群体分析,而光看边际分布,永远发现不了问题。所以上面那个关联测试,比标题里的任何数字都重要:它便宜,结果确定,不需要调用模型,而且一旦不通过,一眼就能看出来。
这个领域真正缺的不是更大的人群池,而是三样别的东西:实际观测到的联合分布,而不是假设出来的;说得清是在哪个人群上估计出来的先验;还有一块外部记分牌,让谁都没法自欺欺人。



