正文
前段时间SBTI 火了,于是我也想到做一个自己的人格测评系统,但是奈何理科生只会敲代码,却不怎么会出题,于是我想到了能不能让AI出题,但问题是AI出的题目如何保证质量?
如果我只说"帮我出 10 道关于 XX 的选择题",AI给的题目很可能并不会理想。(实际也确实如此,AI曾给我一套题目,其中某一个人格的占比最终高达70%)。
于是经过不断的探索,我就做出了这套能够带有验收标准,给AI强制约束的系统,AI自我进行迭代,最终交付一个可用的产品。让 AI 真正理解数据结构、自动设计维度、确保分布合理、验证结果语义——如果验证不通过,自己调整,直到通过。
折腾了一段时间,做出来了。项目叫 PMD(Personality Model Distillation,人格蒸馏系统),今天分享一下是怎么做的。
演示图
它是什么
简单说,PMD 是一个通用的人格测评生成框架。
你只需要做三件事:
- Clone 仓库,
npm install - 告诉你的 AI Agent:"我想做一个 [你的主题] 人格测试,参考 prompts.md"
- AI 自己搞定剩下的——读协议、设计题目、跑验证、调分布、直到通过
不需要手动写题目,不需要调分布,不需要验证结果。
和传统测试不一样的地方
传统人格测试的流程是:出题 → 发布 → 完事。
没人验证过:
- 有没有某个人格永远不会被触发?
- 某个结果占比 60% 合不合理?
- 选了一条"典型用户路径",到底能不能走到预期的人格?
PMD 的流程是:出题 → 暴力验证 → 不通过 → 自动调整 → 通过。
以我做的"程序员人格测试"为例:
- 12 种人格类型
- 13 道题目,每题 3 个选项
- 总共 1,771,470 种可能的答案组合
引擎把这 177 万种组合全部跑一遍,统计每种人格的出现比例,然后检查:
| 指标 | 要求 | 实际 |
|---|---|---|
| 全覆盖 | 每种人格都必须能被触发 | ✅ 12/12 |
| 最大值 | ≤ 25% | ✅ 16.60% |
| 稀有类型 | < 1% 的不能超过总数的 25% | ✅ 3 个 |
| 标准差 | ≤ 7 | ✅ 5.10 |
这还不够。每个人格还有一条"验收案例"——用真实用户会走出的答案路径表示——引擎会验证这条路能不能走到预期的人格结果。同时还会进行随机模拟选择,随机选择20条路径,让AI分析每一条对应的结果是否合理。
12 个人格 = 12 条验收路径,全部命中,0 条失败。
这不是"写个测试页面",这是"写一个能验证自己的测试框架"。
底层是怎么做的
不是把题目写死,而是定义协议
PMD 不是把题目和逻辑耦合在一起,而是定义了一套完整的数据协议。每个主题只需要写一个配置文件。
interface Option {
text: string;
scores: Record<string, number>; // 各维度得分
evidence?: {
supports: EvidenceRef[]; // 显式支持哪些人格
conflicts: EvidenceRef[]; // 显式排斥哪些人格
};
}
关键是 evidence 这个字段。它让选项不再是孤立的——每个选项都明确声明了自己和人格类型的关系。
匹配算法
不是简单的"哪个选项选得多就匹配哪个人格"。
最终得分 = (维度相似度 × 0.55 + 证据评分 × 0.45) × 约束乘子
三个层次:
- 维度相似度:用户在各维度的得分 vs 人格模板的匹配程度
- 证据评分:选项声明的支持/冲突关系,支持越多匹配越高
- 约束乘子:如果某个维度违反了人格的硬性约束,得分直接降到 0
举个例子——"古法编程大师"要求 AI 依赖度 ≤ 1.3(硬约束)。如果你在这个维度上的得分是 3.0,不管你其他维度多匹配,直接排除。
验证失败时,AI 知道该怎么调
这不是最关键的——最关键的是验证失败时输出的内容。
📊 分布问题:
❌ 1 个人格类型从未被触发 (0%)
- 人格 X (type_x): 0%
❌ 最大占比 25.93% (人格1) 超过 25% 限制
💡 改进建议:
- 为从未触发的人格类型在相关题目中添加指向该类型的选项
- 降低占比过高人格类型的核心维度分数
AI Agent 拿到这个报告,知道哪里出了问题、该怎么调。这才是"自动迭代"的基础。
AI Agent 是怎么工作的
prompts.md 定义了完整的 AI 工作流,不是一句"帮我出一个测试"就完事的。
Step 1: 信息搜集
→ 搜索目标领域的行为模式、梗文化、用户痛点
→ 至少三轮搜索
Step 2: 阅读协议
→ 读 types.ts 理解数据结构
→ 读 programmerTest.ts 学习完整配置示例
Step 3: 生成配置
→ 设计维度、人格、题目
→ 为每个选项补充 evidence
→ 为每个人格写 acceptanceCase
Step 4: 运行验证
→ node scripts/validate.js
Step 5: 迭代优化
→ 看报告 → 调整 → 再跑验证 → 直到通过
AI 不是在"瞎猜",它是在一个有明确验收标准、有自动化验证工具、有详细错误提示的框架里工作。
一些我觉得比较有意思的细节
题目是场景化的
不是"你喜欢用什么工具?",而是:
群里有人突然聊起"灾难性遗忘",你第一反应是:
A. 先把 Continual Learning 这些词甩出来,再去翻论文装作刚刚只是确认一下
B. 虽然我不是搞底层的,但先让 AI 和文档把我临时包装成懂哥也不是不行
C. 老子不懂,这是什么玩意
这种场景化的问题,比直接问"你依赖 AI 吗"准确得多,也有趣得多。
每个人格有独立的 meme
- "Vibe Coding 大师" → "我不写代码,我 vibe"
- "已死的前端兄弟" → "AI?AI 懂个屁的前端"
- "码奸" → "我是码奸,我骄傲"
结果页直接展示,传播性拉满。
纯前端,零后端
所有计算在浏览器里完成,测试数据不会上传到任何服务器。
已实现的主题
程序员人格测试(12 种人格):全栈瑞士军刀、Vibe Coding 大师、已死的前端兄弟、AI 擦屁股工程师、码奸、技能蒸馏师、量子态 Bug 猎人、高价值监督者、反蒸馏专家、古法编程大师、智能体指挥官、同事.skill
王者荣耀人格测试(8 种人格):祖安皇帝、团队核心、操作怪、战术大师...
最后
如果你想给自己做一个主题的人格测试,Clone 仓库,告诉你的 AI Agent,剩下的交给它。
如今AI 能力越来越强大,写代码的门槛也在降低,即使是不懂代码最终也能用AI实现自己的想法。