# MatrAIx 的 83 亿人设：真功夫还是花架子？

> 哈佛和 MIT 号称一比一模拟了全世界人口。我们逐行读完论文，复现了代码仓库，又把它的方法放回人设条件化的已有研究里对照了一遍。哪些站得住，哪些站不住，都在这篇里。

Source: https://imario.ai/zh/blog/matraix-8-3-billion-personas-substance-or-sizzle
Published: 2026-08-10
Author: Xiao（iMario.ai 创始人）

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

![](https://cdn.imario.ai/blog/matraix-8-3-billion-personas-substance-or-sizzle.png)

半年前我们开始做 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 自己就把结论写了出来：

> “文中报告的每一个结果，都是人设智能体的结果，并不直接说明一个真人会怎么做。”

白纸黑字，是作者自己写的。

## 把方法说白了

把论文剥到只剩机制，一共三步。

1. **抽一条记录。** 4 个根属性取自联合国人口数据的边际分布，其余 1,286 个属性，在一张手工搭建的图上顺着 6,999 条边做条件抽样。
2. **渲染成提示词。** 记录变成系统提示词里各个小标题下的一条条列表项：“You are X. `### Identity` `- Age bracket: 25-34`.”
3. **只问一次。** 模型一次性答完整份问卷，答案直接记下来。

没有微调，没有激活引导（activation steering），也没有对输出做校准。我们在整个运行时代码里搜了事后分层（poststratification）、迭代比例加权（raking）和重新加权（reweighting），一处都没找到。所谓人口层面的估计，就是 N 次单轮生成结果的简单平均，不做任何加权。

这套机制就是人口属性人设条件化（demographic persona conditioning），过去一年里学界已经反复测过。它的天花板比论文里任何一个数字都重要，因为规模再大，也抬不高这个天花板。

## 这种方法，学界早就测过

今年有三项发现和这套设计直接相关。我们只引用近期的研究，因为在更早几代模型上测出来的结果，说明不了今天的 Opus 4.8 或 GPT 5.5 会怎么表现。

先看人，再看模型。Salesforce Research 的 [SCOPE 研究](https://arxiv.org/abs/2601.07110)让 124 名美国参与者完成了一套两小时的社会心理学测试，然后在 134 道题上，计算每两个人之间人口属性的相似度和回答的相似度有多相关。他们的结论是，人口属性相似度“只能解释回答相似度中 r²≈1.5% 的方差”。一个人和另一个人答得不一样，原因几乎从来不在人口属性上。

模型如果只拿到人口属性，不会把它当成一个弱因素，反而会放大它。同一项研究测出，只写了人口属性的人设，会把人口属性的影响夸大 100% 以上，GPT-4o 的偏差指数达到 101.23。

纸面上各不相同的人设，行为上也会趋同。4 月发表的 [The Chameleon's Limit](https://arxiv.org/abs/2604.24698)（变色龙的极限）评测了 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 人设，不是节选。模型要扮演这个人，而关于这个人，它能拿到的全部文字就是这么一段：

```markdown
### 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。

**规模换不来还原度。** 一个人群可以每个边际分布都对，各个维度之间却彼此独立。这样的人群撑不起任何子群体分析，而光看边际分布，永远发现不了问题。所以上面那个关联测试，比标题里的任何数字都重要：它便宜，结果确定，不需要调用模型，而且一旦不通过，一眼就能看出来。

这个领域真正缺的不是更大的人群池，而是三样别的东西：实际观测到的联合分布，而不是假设出来的；说得清是在哪个人群上估计出来的先验；还有一块外部记分牌，让谁都没法自欺欺人。
