定位:CatBTI — 面向「人类云吸猫」语境的自嗨式猫格问卷(干饭、贴贴、跑酷、装睡、巡领地),与临床/职业测评及真实动物诊断无关。
分析日期:2026-04-12(文档与仓库data/、src/对齐升级)
| 文件 | 作用 |
|---|---|
data/config.json |
展示文案(display)、分级阈值(scoring.levelThresholds)、猫薄荷门控 ID与触发值(catnipGate)、理论最大距离等元数据 |
data/dimensions.json |
五模型(models)、维度顺序(order)、各维 L/M/H 文案(definitions) |
data/types.json |
标准 25 型(standard:含 pattern / cn / intro / desc);特殊类型(special:HHHH、SIAMNIP) |
data/questions.json |
主问卷(main);门控与追问(special:catnip_gate_q1、catnip_gate_q2) |
运行时加载:src/main.js 并行 fetch 上述四份 JSON → calcDimensionScores(answers, questions.main) → scoresToLevels(..., config.scoring.levelThresholds) → determineResult(..., { isCatnipHigh, maxDistance: config.scoring.maxDistance, fallbackThreshold: config.scoring.fallbackThreshold })。
- 数据资产与运行时:见文首「数据资产(仓库真源)」
CatBTI 测试建立在五个「猫宅版」模型之上(dimensions.json → models),每个模型 3 个维度,共 15 维。下表第三列为数据里的 注 字段(整活向说明,非学术定义):
| 模型代码 | 中文名称 | 注(摘自 dimensions.json) |
包含维度 |
|---|---|---|---|
| S | 本喵自恋模型 | CatBTI 五模型之一:在镜子、体重秤和人类夸奖里,你如何看待「我这只猫」——猫版自尊与自洽。 | S1, S2, S3 |
| E | 贴贴与独占模型 | CatBTI 五模型之一:对同胞猫、狗、铲屎官——信任、投入、边界;养猫常见「独占像恋爱、分床像离婚」的情感算力全在这里。 | E1, E2, E3 |
| A | 世界观模型 | CatBTI 五模型之一:信不信人类的笑脸、愿不愿为规矩让路、以及你还信不信「今天会有加餐」——客厅三观。 | A1, A2, A3 |
| Ac | 捕猎驱力模型 | CatBTI 五模型之一:冲红点还是防吸尘器、扑得快还是观察十圈、开罐前是战神还是装死——落地姿势。 | Ac1, Ac2, Ac3 |
| So | 巡领地社交模型 | CatBTI 五模型之一:敢不敢见客、怎么躲洗澡、以及你在兽医面前和家里是不是同一只猫——社交运营成本。 | So1, So2, So3 |
每个维度均有三个水平等级(L / M / H)。下表为便于阅读的摘要;判分与完整措辞以 dimensions.json → definitions 为准。
| 维度 | 名称 | L(低) | M(中) | H(高) |
|---|---|---|---|---|
| S1 | 自尊自信 | 严重自我怀疑 | 自信随境波动 | 内心稳定有数 |
| S2 | 自我清晰度 | 自我认知模糊 | 偶尔被情绪干扰 | 对自身门儿清 |
| S3 | 核心价值 | 偏重舒适安全 | 上进与躺平拉锯 | 目标/信念驱动 |
| E1 | 依恋安全感 | 高警觉高焦虑 | 信任与试探交替 | 信任关系、不易受扰 |
| E2 | 情感投入度 | 克制投入、门禁严 | 投入但留后手 | 全情投入 |
| E3 | 边界与依赖 | 容易黏人 | 可调节型依赖 | 重视独立空间 |
| A1 | 世界观倾向 | 防御性怀疑 | 观望型 | 善意信任 |
| A2 | 规则与灵活度 | 偏自由灵活 | 该守则守 | 秩序感强 |
| A3 | 人生意义感 | 意义感低 | 半开机状态 | 有方向感 |
| Ac1 | 动机导向 | 避险为先 | 混合动机 | 成果成长驱动 |
| Ac2 | 决策风格 | 决策犹豫 | 正常犹豫 | 果断不回头 |
| Ac3 | 执行模式 | 拖延到死线 | 看时机发挥 | 强推进欲 |
| So1 | 社交主动性 | 慢热被动 | 弹性社交 | 主动打开场子 |
| So2 | 人际边界感 | 想亲近融合 | 看对象调节 | 边界感强 |
| So3 | 表达与真实度 | 直接不绕 | 看气氛说话 | 分层发放真实感 |
- 主要题目:30 道,每个维度严格分配 2 道(共 15 维度 x 2 = 30)
- 特殊题目:2 道猫薄荷门控题(catnip_gate_q1 + catnip_gate_q2)
- 选项设计:主要题目每道 3 个选项,对应数值 1/2/3;catnip_gate_q1 有 4 个选项
- 展示方式:30 道主题经 Fisher-Yates 随机打乱,catnip_gate_q1 随机插入其中
用户答题(30+1/2道)
|
v
维度求和: 每维度 2 题之和 (范围 2~6)
|
v
分级映射: <=3 -> L, ==4 -> M, >=5 -> H
|
v
数值化: L=1, M=2, H=3 -> 15 维用户向量
|
v
曼哈顿距离: 与 25 个标准类型逐一比对
|
v
排序: distance ASC, exact_count DESC, similarity DESC
|
v
特殊规则覆写: SIAMNIP 覆盖 / HHHH 兜底
|
v
输出结果
25 个标准类型(含模式串):
| # | 代码 | 中文名 | 模式串 | 维度和 |
|---|---|---|---|---|
| 1 | LIHUA | 狸花猫 | HHH-HMH-MHH-HHH-MHM | 41 |
| 2 | RAGDOLL | 布偶猫 | HHH-HHM-HHH-HMH-MHL | 40 |
| 3 | EXOTIC | 异国短毛猫 | MHM-MMH-MHM-HMH-LHL | 34 |
| 4 | MAINE | 缅因猫 | HHH-HMH-MMH-HHH-LHL | 38 |
| 5 | BRITISH | 英国短毛猫 | MHM-HMM-HHM-MMH-MHL | 35 |
| 6 | SIAMESE | 暹罗猫 | HHL-LMH-LHH-HHM-LHL | 33 |
| 7 | ABY | 阿比西尼亚猫 | HHM-HMH-MMH-HHH-MHM | 39 |
| 8 | BENGAL | 孟加拉豹猫 | HMH-HHL-HMM-HMM-HLH | 36 |
| 9 | NORWEGIAN | 挪威森林猫 | MLH-LHL-HLH-MLM-MLH | 29 |
| 10 | VAN | 土耳其梵猫 | MMH-MHL-HMM-LMM-HLL | 30 |
| 11 | SPHYNX | 斯芬克斯猫 | HLM-MML-MLM-MLM-HLH | 28 |
| 12 | BIRMAN | 伯曼猫 | MMH-MMM-HML-LMM-MML | 29 |
| 13 | ORIENTAL | 东方短毛猫 | MLH-MHM-MLH-MLH-LMH | 31 |
| 14 | CORNISH | 柯尼斯卷毛猫 | LLH-LHL-LML-LLL-MLM | 22 |
| 15 | AMERICAN | 美国短毛猫 | HHL-HMH-MMH-HHM-LHH | 37 |
| 16 | RUSSIAN | 俄罗斯蓝猫 | HHL-HMH-MLH-MHM-LHH | 35 |
| 17 | ORANGE | 中华田园橘猫 | HHL-HLH-LMM-HHM-LHH | 34 |
| 18 | PERSIAN | 波斯猫 | MHL-MLH-LML-MML-LHM | 27 |
| 19 | JIANZHOU | 四川简州猫 | HHL-MLH-LMH-HHH-LHL | 33 |
| 20 | CHARTREUX | 沙特尔猫 | HHL-LLH-LLM-MML-LHM | 27 |
| 21 | MUNCHKIN | 曼基康猫 | LLM-LMM-LLL-LLL-MLM | 20 |
| 22 | EGYPTIAN | 埃及猫 | LML-LLH-LHL-LML-LHM | 24 |
| 23 | SAVANNAH | 热带草原猫 | MLL-LHL-LLM-MLL-HLH | 24 |
| 24 | BOMBAY | 孟买猫 | LLL-LLM-LML-LLL-LHM | 20 |
| 25 | HIMALAYAN | 喜马拉雅猫 | LLH-LHL-LML-LLL-MLL | 21 |
维度和 = 模式串中所有维度数值之和(L=1, M=2, H=3),范围 15~45。该值越高表示类型在各维度上整体偏 H("高功能"端),越低则偏 L。
2 个特殊类型(无标准模式串):
| 代码 | 中文名 | 触发条件 |
|---|---|---|
| HHHH | 混血米克斯猫 | 最佳匹配相似度 < fallbackThreshold(默认 60)时强制兜底 |
| SIAMNIP | 暹罗猫(猫薄荷上头版) | 猫薄荷门控第二题选对应该彩蛋的选项(见 questions.json)时激活 |
下表将 25 个标准类型的模式串逐维度展开,便于横向对比:
| 类型 | S1 | S2 | S3 | E1 | E2 | E3 | A1 | A2 | A3 | Ac1 | Ac2 | Ac3 | So1 | So2 | So3 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LIHUA | H | H | H | H | M | H | M | H | H | H | H | H | M | H | M |
| RAGDOLL | H | H | H | H | H | M | H | H | H | H | M | H | M | H | L |
| EXOTIC | M | H | M | M | M | H | M | H | M | H | M | H | L | H | L |
| MAINE | H | H | H | H | M | H | M | M | H | H | H | H | L | H | L |
| BRITISH | M | H | M | H | M | M | H | H | M | M | M | H | M | H | L |
| SIAMESE | H | H | L | L | M | H | L | H | H | H | H | M | L | H | L |
| ABY | H | H | M | H | M | H | M | M | H | H | H | H | M | H | M |
| BENGAL | H | M | H | H | H | L | H | M | M | H | M | M | H | L | H |
| NORWEGIAN | M | L | H | L | H | L | H | L | H | M | L | M | M | L | H |
| VAN | M | M | H | M | H | L | H | M | M | L | M | M | H | L | L |
| SPHYNX | H | L | M | M | M | L | M | L | M | M | L | M | H | L | H |
| BIRMAN | M | M | H | M | M | M | H | M | L | L | M | M | M | M | L |
| ORIENTAL | M | L | H | M | H | M | M | L | H | M | L | H | L | M | H |
| CORNISH | L | L | H | L | H | L | L | M | L | L | L | L | M | L | M |
| AMERICAN | H | H | L | H | M | H | M | M | H | H | H | M | L | H | H |
| RUSSIAN | H | H | L | H | M | H | M | L | H | M | H | M | L | H | H |
| ORANGE | H | H | L | H | L | H | L | M | M | H | H | M | L | H | H |
| PERSIAN | M | H | L | M | L | H | L | M | L | M | M | L | L | H | M |
| JIANZHOU | H | H | L | M | L | H | L | M | H | H | H | H | L | H | L |
| CHARTREUX | H | H | L | L | L | H | L | L | M | M | M | L | L | H | M |
| MUNCHKIN | L | L | M | L | M | M | L | L | L | L | L | L | M | L | M |
| EGYPTIAN | L | M | L | L | L | H | L | H | L | L | M | L | L | H | M |
| SAVANNAH | M | L | L | L | H | L | L | L | M | M | L | L | H | L | H |
| BOMBAY | L | L | L | L | L | M | L | M | L | L | L | L | L | H | M |
| HIMALAYAN | L | L | H | L | H | L | L | M | L | L | L | L | M | L | L |
通过对上表逐列计数,得到以下分布(25 个类型,每维度 L+M+H=25):
| 维度 | L 计数 | M 计数 | H 计数 | 众数 | 分布特征 |
|---|---|---|---|---|---|
| S1 自尊自信 | 5 | 8 | 12 | H | 高自信类型占近半,低自信仅5个 |
| S2 自我清晰度 | 8 | 4 | 13 | H | H 显著占优,M 最稀缺 |
| S3 核心价值 | 10 | 5 | 10 | L/H并列 | 两极分化,M 极少 |
| E1 依恋安全感 | 9 | 7 | 9 | L/H并列 | 高度两极化,中间态最少 |
| E2 情感投入度 | 6 | 11 | 8 | M | M 为众数,分布相对均衡 |
| E3 边界与依赖 | 7 | 5 | 13 | H | H 显著,类型设计倾向独立 |
| A1 世界观倾向 | 10 | 7 | 8 | L | L 略多,怀疑型稍占优 |
| A2 规则与灵活度 | 6 | 11 | 8 | M | M 为众数,灵活-规则均衡 |
| A3 人生意义感 | 7 | 8 | 10 | H | 偏高意义感 |
| Ac1 动机导向 | 7 | 8 | 10 | H | 偏成果驱动 |
| Ac2 决策风格 | 7 | 10 | 8 | M | M 为众数,决策中等 |
| Ac3 执行模式 | 8 | 8 | 9 | H | 三级近似均匀 |
| So1 社交主动性 | 11 | 8 | 6 | L | 被动社交类型最多 |
| So2 人际边界感 | 8 | 3 | 14 | H | H 极端占优,M 仅3个 |
| So3 表达与真实度 | 7 | 8 | 10 | H | 分层表达偏多 |
高度偏态维度(某一级占比超过 50%):
- So2 人际边界感:H 占 14/25(56%),说明大多数类型被设计为"重视边界"。M 仅 3 个(EXOTIC, ORIENTAL, BIRMAN),极为稀缺,意味着在 So2 上取到 M 的用户匹配范围极窄。
- S2 自我清晰度:H 占 13/25(52%),大部分类型自我清晰度高。
- E3 边界与依赖:H 占 13/25(52%),与 So2 类似,类型设计偏好"独立"端。
两极分化维度(L 和 H 接近,M 极少):
- S3 核心价值:L=10, M=5, H=10。用户答中间值更容易落入 M,但只有 5 个类型在此维度为 M,形成"瓶颈效应"。
- E1 依恋安全感:L=9, M=7, H=9。相对均衡但两极略突出。
偏 L 维度(低值类型更多):
- So1 社交主动性:L=11, H=6。多数类型是社交被动型,反映了测试的目标用户群画像(可能偏内向的互联网用户)。
- A1 世界观倾向:L=10, H=8。怀疑型比信任型多 2 个。
一个维度的"区分力"取决于其分布的均匀程度。越均匀,该维度对类型区分的贡献越大。用熵近似(取 L/M/H 比例)排序:
| 排名 | 维度 | L:M:H | 均匀度评价 |
|---|---|---|---|
| 1 | Ac3 执行模式 | 8:8:9 | 极均匀,区分力最强 |
| 2 | E2 情感投入度 | 6:11:8 | 较均匀 |
| 3 | A3 人生意义感 | 7:8:10 | 较均匀 |
| 4 | Ac1 动机导向 | 7:8:10 | 较均匀 |
| 5 | So3 表达与真实度 | 7:8:10 | 较均匀 |
| ... | ... | ... | ... |
| 14 | S2 自我清晰度 | 8:4:13 | 偏态显著 |
| 15 | So2 人际边界感 | 8:3:14 | 最偏态,区分力最弱 |
结论:So2 和 S2 的区分力最弱 -- 大量类型在这两个维度上取值相同(H),因此这两个维度对最终匹配的影响较小。Ac3 和 E2 等分布均匀的维度对匹配结果的影响更为关键。
将每个类型的 15 维模式串转化为数值向量(L=1, M=2, H=3),计算所有 C(25,2)=300 个类型对之间的曼哈顿距离:
理论距离范围:0(完全相同)至 30(每维度都相差 2)。
| 统计量 | 值 |
|---|---|
| 总配对数 | 300 |
| 最小距离 | 1 |
| 最大距离 | 24 |
| 理论最大 | 30 |
实际最大距离 24 仅达到理论上限的 80%,说明类型空间并未覆盖到极端对立的设计。
以下 6 对类型的曼哈顿距离 <= 3,它们在 15 维空间中高度相似,用户很可能在它们之间"摇摆":
| 排名 | 类型对 | 距离 | 差异维度 | 分析 |
|---|---|---|---|---|
| 1 | CORNISH vs HIMALAYAN | 1 | So3 (M vs L) | 仅一个维度差 1 级,几乎不可区分 |
| 2 | LIHUA vs ABY | 2 | S3 (H vs M), A2 (H vs M) | 核心差异在价值感和规则感上各差一级 |
| 3 | AMERICAN vs RUSSIAN | 2 | A2 (M vs L), Ac1 (H vs M) | 差异在规则灵活度和动机导向 |
| 4 | LIHUA vs MAINE | 3 | A2 (H vs M), So1 (M vs L), So3 (M vs L) | 差异全在社交和规则微调 |
| 5 | MAINE vs ABY | 3 | S3 (H vs M), So1 (L vs M), So3 (L vs M) | 核心价值和社交主动性微差 |
| 6 | AMERICAN vs ORANGE | 3 | E2 (M vs L), A1 (M vs L), A3 (H vs M) | 情感投入和世界观微调 |
关键发现:
- CORNISH(柯尼斯卷毛猫)和 HIMALAYAN(喜马拉雅猫) 距离仅 1,在实际匹配中几乎无法区分。这意味着用户仅需在 So3(表达与真实度)上多得 1 分就会从「喜马拉雅猫」变成「柯尼斯卷毛猫」,体验上可能产生混淆。建议考虑合并或增加区分维度。
- LIHUA-ABY-MAINE 三者形成一个"高功能三角"(两两距离 2~3),代表了"高自信 + 高执行 + 高驱动"的不同微变体。
- AMERICAN-RUSSIAN-ORANGE 形成另一个"高认知独立三角"(两两距离 2~5),共同特征是 S1=H, S2=H, S3=L, E3=H, So2=H, So3=H。
| 排名 | 类型对 | 距离 | 分析 |
|---|---|---|---|
| 1 | AMERICAN vs HIMALAYAN | 24 | 高认知独立 vs 低功能依赖,几乎全维度对立 |
| 2 | MAINE vs SAVANNAH | 24 | 缅因猫 vs 热带草原猫,价值观完全相反 |
| 3 | RUSSIAN vs HIMALAYAN | 24 | 俄罗斯蓝猫 vs 喜马拉雅猫,功能水平两极 |
| 4 | JIANZHOU vs CORNISH | 23 | 四川简州猫 vs 柯尼斯卷毛猫,驱动系统对立 |
| 5 | AMERICAN vs CORNISH | 23 | 美国短毛猫 vs 柯尼斯卷毛猫 |
| 6 | LIHUA vs SAVANNAH | 23 | 狸花猫 vs 热带草原猫,控制 vs 放纵 |
| 7 | ORANGE vs HIMALAYAN | 23 | 中华田园橘猫 vs 喜马拉雅猫 |
| 8 | RAGDOLL vs BOMBAY | 22 | 布偶猫 vs 孟买猫,全面付出 vs 全面抽离 |
| 9 | RAGDOLL vs MUNCHKIN | 22 | 布偶猫 vs 曼基康猫 |
| 10 | RAGDOLL vs SAVANNAH | 22 | 布偶猫 vs 热带草原猫 |
| 11 | MAINE vs MUNCHKIN | 22 | 缅因猫 vs 曼基康猫 |
| 12 | MAINE vs CORNISH | 22 | 缅因猫 vs 柯尼斯卷毛猫 |
| 13 | LIHUA vs HIMALAYAN | 22 | 狸花猫 vs 喜马拉雅猫 |
| 14 | BENGAL vs BOMBAY | 22 | 孟加拉豹猫 vs 孟买猫 |
| 15 | JIANZHOU vs HIMALAYAN | 22 | 四川简州猫 vs 喜马拉雅猫 |
关键发现:
- 最远距离 24(理论最大 30 的 80%),出现在"高功能+高独立"类型与"低功能+高依赖"类型之间。
- HIMALAYAN(喜马拉雅猫) 和 CORNISH(柯尼斯卷毛猫) 频繁出现在最远对中 -- 它们是空间中的"边缘类型"。
- SAVANNAH(热带草原猫) 也频繁出现在远距离对中,因为它的模式与主流"高功能"类型形成强烈对比。
"中心性"定义为某类型到所有其他 24 个类型的平均曼哈顿距离。平均距离越低的类型越"中心"(越容易被匹配到),越高的越"极端"(越难被匹配到)。
为衡量中心性,我们使用类型的维度和(15 维数值之和)作为代理指标。25 个类型的维度和中位数约为 29~30,距此越近的类型越可能中心。
以下按维度和排序,并标注预估中心性等级:
| 类别 | 类型 | 维度和 | 中心性 |
|---|---|---|---|
| 极端低端 | BOMBAY | 20 | 极端边缘 |
| 极端低端 | MUNCHKIN | 20 | 极端边缘 |
| 低端 | HIMALAYAN | 21 | 边缘 |
| 低端 | CORNISH | 22 | 边缘 |
| 低端 | EGYPTIAN | 24 | 偏边缘 |
| 低端 | SAVANNAH | 24 | 偏边缘 |
| 中低 | PERSIAN | 27 | 偏中心 |
| 中低 | CHARTREUX | 27 | 偏中心 |
| 中心 | SPHYNX | 28 | 中心 |
| 中心 | NORWEGIAN | 29 | 中心 |
| 中心 | BIRMAN | 29 | 中心 |
| 中心 | VAN | 30 | 中心 |
| 中心 | ORIENTAL | 31 | 中心 |
| 中高 | SIAMESE | 33 | 偏中心 |
| 中高 | JIANZHOU | 33 | 偏中心 |
| 中高 | EXOTIC | 34 | 偏中心 |
| 中高 | ORANGE | 34 | 偏中心 |
| 中高 | BRITISH | 35 | 偏中心 |
| 中高 | RUSSIAN | 35 | 偏中心 |
| 高端 | BENGAL | 36 | 偏边缘 |
| 高端 | AMERICAN | 37 | 偏边缘 |
| 高端 | MAINE | 38 | 边缘 |
| 高端 | ABY | 39 | 边缘 |
| 极端高端 | RAGDOLL | 40 | 极端边缘 |
| 极端高端 | LIHUA | 41 | 极端边缘 |
最中心类型(最容易被匹配到):
- BIRMAN(伯曼猫)、VAN(土耳其梵猫)、SPHYNX(斯芬克斯猫) -- 维度和在 28~30 之间,处于空间正中
- 这些类型的模式串"不极端",各维度混合了 L/M/H,因此与大量用户向量的距离较小
最极端类型(最难被匹配到):
- LIHUA(狸花猫) 维度和 41:15 维中 10 个为 H -- 需要用户在绝大多数维度都得高分
- BOMBAY(孟买猫) 维度和 20:15 维中 11 个为 L -- 需要用户在绝大多数维度都得低分
- 这两个类型位于空间的两个极端,代表"全面高功能"和"全面抽离"
基于距离分析,可识别出以下自然聚类:
聚类 A - "高功能领导群"(互距 2~6):
- LIHUA(狸花猫)、ABY(阿比西尼亚猫)、MAINE(缅因猫)、RAGDOLL(布偶猫)
- 共同特征:S1=H, S2=H, E1=H, Ac1=H, So2=H
聚类 B - "高认知独立群"(互距 2~5):
- AMERICAN(美国短毛猫)、RUSSIAN(俄罗斯蓝猫)、ORANGE(中华田园橘猫)
- 共同特征:S1=H, S2=H, S3=L, E3=H, So2=H, So3=H
聚类 C - "低功能脆弱群"(互距 1~6):
- CORNISH(柯尼斯卷毛猫)、HIMALAYAN(喜马拉雅猫)、MUNCHKIN(曼基康猫)、BOMBAY(孟买猫)
- 共同特征:多数维度为 L,So2 偏向 L(渴望亲近)
聚类 D - "中间温和群"(互距 5~9):
- BIRMAN(伯曼猫)、VAN(土耳其梵猫)、BRITISH(英国短毛猫)
- 共同特征:多数维度为 M,没有极端取值
孤立类型(与最近邻距离较大):
- BENGAL(孟加拉豹猫):独特的 E2=H + E3=L + So1=H 组合
- SAVANNAH(热带草原猫):独特的 E2=H + 几乎全 L 的其他维度
- EGYPTIAN(埃及猫):独特的 A2=H + E3=H 但其余全低
猫薄荷门控是一个两阶段条件触发机制,用于解锁隐藏人格 SIAMNIP(暹罗猫·猫薄荷上头彩蛋):
catnip_gate_q1
"娱乐之外主要靠啥续命?(CatBTI 团建学)"
/ | | \
基础维护 爱好 薄荷激光局 跑酷代谢
(v=1) (v=2) (v=3) (v=4)
| | | |
v v | v
[忽略] [忽略] | [忽略]
v
catnip_gate_q2
"对猫薄荷 / 激光笔在派对里的定位?"
/ \
小玩怡情怕赔花瓶 养生碗藏猫薄荷(表面养生)
(v=1) (v=2)
| |
v v
[忽略] SIAMNIP(暹罗猫·猫薄荷上头彩蛋)激活!
|
v
覆盖正常匹配结果
正常最佳匹配降为副结果
设计要点:
- catnip_gate_q1 随机插入 30 题中,用户无法预判
- 仅选择「薄荷激光局」(v=3)才会触发 q2,其他选项不产生后续
- q2 的选项设计极端化:保守玩派(v=1)不触发,养生碗藏猫薄荷派(v=2)才触发
- 一旦 SIAMNIP 激活,完全覆盖正常匹配流程,正常最佳匹配仅作为次要展示
- catnip_gate_q1 和 q2 都不参与维度评分,仅用于门控判定
当用户的 15 维向量与所有 25 个标准类型的最佳匹配相似度低于 config.scoring.fallbackThreshold(默认 60)时,系统强制分配 HHHH(对不上猫粮型)。
相似度(与运行时一致):
similarity = max(0, round((1 - distance / maxDistance) * 100))
其中 maxDistance = config.scoring.maxDistance(默认 30)
触发条件:
similarity < fallbackThreshold
=> distance > maxDistance × (1 - fallbackThreshold/100)
默认值下(maxDistance=30, fallbackThreshold=60):
=> distance > 12
触发概率分析:
距离超过上述阈值意味着用户的 15 维向量与所有 25 个类型都相差甚远。考虑到:
- 25 个类型在 15 维空间中已有一定覆盖度
- 最中心的类型(如 BIRMAN、VAN)到空间中心的距离较小
- 用户答题产生的向量有 3^15 = 14,348,907 种理论组合
实际上,由于类型设计覆盖了高/中/低各区域,触发 HHHH 的概率较低,但并非不可能。最可能触发的用户画像是:答题模式极端不一致(某些维度极高、某些极低,且组合方式与任何已定义类型都不匹配)。
分析所有 30 道题的选项值排列,大部分题目的选项按"低认同=1,中间=2,高认同=3"正序排列。但以下题目存在非标准排列:
| 题号 | 维度 | 选项值顺序 | 说明 |
|---|---|---|---|
| q6 | S3 | 1, 2, 3 但语义反转 | "外人评价无所谓" -- 不认同=1 表示在意外界评价(S3偏低),认同=3 表示不在意(但这里高分对应 S3=H "目标驱动",语义上有微妙矛盾) |
| q14 | A1 | 3, 2, 1 | 第一个选项值=3(正面反应得高分),最后一个=1。选项顺序与值顺序相反 |
| q16 | A2 | 1, 2, 3 但语义反转 | "打破常规"认同=1(偏灵活=L),不认同=3(偏规则=H)。值的语义方向与题目文字相反 |
| q27 | So2 | 3, 2, 1 | "电子围栏"认同=3(边界感强=H),不认同=1。选项顺序降序 |
| q28 | So2 | 1, 2, 3 但语义反转 | "渴望亲密"认同=1(边界感弱=L),不认同=3(边界感强=H) |
| q29 | So3 | 1, 2, 3 | "较少隐瞒"=1(直接=L),"不想暴露阴暗面"=3(分层=H) |
设计意图分析:
反向计分和非标准排列的设计目的是:
- 防止用户全选同一位置(如全选第一项),确保答案反映真实倾向
- 语义校准:某些题目的文字方向与维度方向相反(如"打破常规"描述的是低规则感,因此认同该说法应得低分)
- 降低社会期望偏差:混合正反计分使用户难以判断"正确"答案
潜在问题:q6 的设计值得注意 -- "外人评价无所谓"的高认同(=3)被映射为 S3 高分,但 S3 的 H 描述是"目标/信念驱动",而"不在意他人评价"更像是 S1(自信)或 E3(独立性)的特征。这可能导致维度间存在轻微的概念重叠。
用户完成 30 道主要题目后,按维度将 2 道题的选项值相加:
S1 = q1.value + q2.value (范围 2~6)
S2 = q3.value + q4.value
S3 = q5.value + q6.value
E1 = q7.value + q8.value
E2 = q9.value + q10.value
E3 = q11.value + q12.value
A1 = q13.value + q14.value
A2 = q15.value + q16.value
A3 = q17.value + q18.value
Ac1 = q19.value + q20.value
Ac2 = q21.value + q22.value
Ac3 = q23.value + q24.value
So1 = q25.value + q26.value
So2 = q27.value + q28.value
So3 = q29.value + q30.value
将每个维度的原始分(2~6)映射为 L/M/H。阈值来自 data/config.json → scoring.levelThresholds,由 src/engine.js 的 scoresToLevels 使用:score <= L[1] → L,score >= H[0] → H,否则 M。默认配置下等价于下表:
| 原始分 | 等级 | 数值 | 可能的答题组合 |
|---|---|---|---|
| 2 | L | 1 | 1+1 |
| 3 | L | 1 | 1+2, 2+1 |
| 4 | M | 2 | 1+3, 2+2, 3+1 |
| 5 | H | 3 | 2+3, 3+2 |
| 6 | H | 3 | 3+3 |
注意:L 覆盖 2 种原始分(2,3),M 仅覆盖 1 种(4),H 覆盖 2 种(5,6)。这使得 M 的区间最窄 — 用户必须恰好得 4 分才能落入 M,概率上 M 比 L 和 H 更难获得。
M 级概率分析(假设选项等概率):
9 种可能的 (q1,q2) 组合中:
- 得 4 分的组合:(1,3), (2,2), (3,1) = 3 种,概率 3/9 = 33.3%
- 得 L 的组合:(1,1), (1,2), (2,1) = 3 种,概率 3/9 = 33.3%
- 得 H 的组合:(2,3), (3,2), (3,3) = 3 种,概率 3/9 = 33.3%
实际上三级等概率,但由于 M 仅对应 1 个原始分值(4),用户的实际分布可能因题目设计偏向而不均匀。
将 15 个维度的等级数值化组成向量:
user_vector = [S1_num, S2_num, S3_num, E1_num, E2_num, E3_num,
A1_num, A2_num, A3_num, Ac1_num, Ac2_num, Ac3_num,
So1_num, So2_num, So3_num]
对每个标准类型,解析其模式串并计算距离:
type_pattern = "HHH-HMH-MHH-HHH-MHM" // 以 LIHUA 为例
type_vector = [3,3,3,3,2,3,2,3,3,3,3,3,2,3,2] // 去掉横杠,逐字符转换
distance = sum(|user_vector[i] - type_vector[i]|) for i = 0..14
exact = count(user_vector[i] == type_vector[i]) for i = 0..14
similarity = max(0, round((1 - distance / maxDistance) * 100)) // maxDistance 默认 30,见 config
结果列表按以下优先级排序:
1. distance ASC(距离越小越好)
2. exact DESC(精确命中维度越多越好)
3. similarity DESC(相似度越高越好)
取排序后的第一个作为最佳匹配。
逻辑见 src/engine.js → determineResult。猫薄荷门控触发值以 config.catnipGate 为准(默认:catnip_gate_q1 选 triggerValue(3)才插入第二题;catnip_gate_q2 选 nipTriggerValue(2)则 isCatnipHigh)。HHHH 兜底为 best.similarity < config.scoring.fallbackThreshold(默认 60,由 main.js 传入引擎)。
if isCatnipHigh(猫薄荷追问第二题触发):
primary = SIAMNIP,secondary = 正常最佳匹配
elif best_similarity < fallbackThreshold:
primary = HHHH,secondary = 正常最佳匹配
else:
primary = 正常最佳匹配
场景:某用户的答题记录如下:
| 题号 | 维度 | 选值 | 题号 | 维度 | 选值 |
|---|---|---|---|---|---|
| q1 | S1 | 2 | q2 | S1 | 3 |
| q3 | S2 | 3 | q4 | S2 | 3 |
| q5 | S3 | 2 | q6 | S3 | 2 |
| q7 | E1 | 3 | q8 | E1 | 3 |
| q9 | E2 | 2 | q10 | E2 | 2 |
| q11 | E3 | 3 | q12 | E3 | 2 |
| q13 | A1 | 2 | q14 | A1 | 2 |
| q15 | A2 | 2 | q16 | A2 | 2 |
| q17 | A3 | 3 | q18 | A3 | 2 |
| q19 | Ac1 | 3 | q20 | Ac1 | 3 |
| q21 | Ac2 | 3 | q22 | Ac2 | 2 |
| q23 | Ac3 | 3 | q24 | Ac3 | 3 |
| q25 | So1 | 2 | q26 | So1 | 2 |
| q27 | So2 | 3 | q28 | So2 | 3 |
| q29 | So3 | 2 | q30 | So3 | 2 |
步骤 1:维度求和
| 维度 | 计算 | 原始分 |
|---|---|---|
| S1 | 2+3 | 5 |
| S2 | 3+3 | 6 |
| S3 | 2+2 | 4 |
| E1 | 3+3 | 6 |
| E2 | 2+2 | 4 |
| E3 | 3+2 | 5 |
| A1 | 2+2 | 4 |
| A2 | 2+2 | 4 |
| A3 | 3+2 | 5 |
| Ac1 | 3+3 | 6 |
| Ac2 | 3+2 | 5 |
| Ac3 | 3+3 | 6 |
| So1 | 2+2 | 4 |
| So2 | 3+3 | 6 |
| So3 | 2+2 | 4 |
步骤 2-3:分级 + 数值化
| 维度 | 原始分 | 等级 | 数值 |
|---|---|---|---|
| S1 | 5 | H | 3 |
| S2 | 6 | H | 3 |
| S3 | 4 | M | 2 |
| E1 | 6 | H | 3 |
| E2 | 4 | M | 2 |
| E3 | 5 | H | 3 |
| A1 | 4 | M | 2 |
| A2 | 4 | M | 2 |
| A3 | 5 | H | 3 |
| Ac1 | 6 | H | 3 |
| Ac2 | 5 | H | 3 |
| Ac3 | 6 | H | 3 |
| So1 | 4 | M | 2 |
| So2 | 6 | H | 3 |
| So3 | 4 | M | 2 |
用户向量:[3,3,2,3,2,3,2,2,3,3,3,3,2,3,2]
用户模式串:HHM-HMH-MMH-HHH-MHM
步骤 4:与部分类型计算距离
| 类型 | 类型向量 | 距离计算 | 距离 | 精确命中 | 相似度 |
|---|---|---|---|---|---|
| LIHUA | 3,3,3,3,2,3,2,3,3,3,3,3,2,3,2 | 0+0+1+0+0+0+0+1+0+0+0+0+0+0+0 | 2 | 13/15 | 93% |
| ABY | 3,3,2,3,2,3,2,2,3,3,3,3,2,3,2 | 0+0+0+0+0+0+0+0+0+0+0+0+0+0+0 | 0 | 15/15 | 100% |
| MAINE | 3,3,3,3,2,3,2,2,3,3,3,3,1,3,1 | 0+0+1+0+0+0+0+0+0+0+0+0+1+0+1 | 3 | 12/15 | 90% |
结果:用户向量恰好等于 ABY 的模式串!距离=0,精确命中=15/15,相似度=100%。
最终匹配:ABY(阿比西尼亚猫)
显示:"匹配度 100% | 精准命中 15/15 维"
步骤 6:特殊规则检查
- 假设用户未选「薄荷激光局」(v=3)-> 不触发 SIAMNIP
- 最佳相似度100% ≥
fallbackThreshold→ 不触发 HHHH - 最终结果确认为 ABY
步骤 1:设计模式串
新类型需要一个 15 维的 L/M/H 模式串,格式为 XXX-XXX-XXX-XXX-XXX(每段 3 个字符,顺序须与 dimensions.json → order 一致)。
设计要点:
- 检查与现有 25 个类型的曼哈顿距离,建议最小距离 ≥ 3(避免出现像 CORNISH vs HIMALAYAN 距离=1 的问题)
- 模式串的维度和(L=1,M=2,H=3 之和)应考虑空间覆盖:当前约 20~41,可在空缺区域填充
- 若希望更易被匹配到,维度和可接近 29~30(空间中心)
步骤 2:编写类型信息
在 data/types.json → standard 数组中追加对象(字段与现有条目一致):
{
"code": "NEW-T",
"pattern": "MMM-MMM-MMM-MMM-MMM",
"cn": "新类型中文名",
"intro": "一句话介绍",
"desc": "详细人格描述(建议 200-400 字,保持诙谐风格)"
}步骤 3:验证
- 展开
pattern去掉-后长度为 15 - 每个字符均为 L / M / H
- 计算与所有现有类型的距离,检查是否存在过近对
修改题目文本:
编辑 data/questions.json → main 里对应题的 text,不改变 dim / value 时不影响计分逻辑。
修改选项:
修改同一对象下的 options[].label 与 options[].value。注意:
- 主问卷中
value须为 1、2、3(与calcDimensionScores累加一致) - 改变同一题内 value 与选项的对应关系会改变正向/反向计分
- 改后核对该题所属维度在
dimensions.json中的语义是否仍一致
特殊题(猫薄荷门控):
编辑 questions.json → special;触发逻辑与选项值需与 config.json → catnipGate 一致(questionId、triggerValue、nipTriggerValue)。
添加新题目:
当前实现假定每维度 2 题、原始分 2~6。若每维增为 3 题:
- 调整
config.scoring.levelThresholds与engine.js中相似度分母(若最大距离变化) - 更新全部
standard[].pattern或接受分布漂移
维度题目映射参考:
| 维度 | 题目 ID |
|---|---|
| S1 | q1, q2 |
| S2 | q3, q4 |
| S3 | q5, q6 |
| E1 | q7, q8 |
| E2 | q9, q10 |
| E3 | q11, q12 |
| A1 | q13, q14 |
| A2 | q15, q16 |
| A3 | q17, q18 |
| Ac1 | q19, q20 |
| Ac2 | q21, q22 |
| Ac3 | q23, q24 |
| So1 | q25, q26 |
| So2 | q27, q28 |
| So3 | q29, q30 |
修改分级阈值:
当前阈值(2 题/维度,原始分 2~6):
L: score <= 3
M: score == 4
H: score >= 5
可调整为更宽的 M 区间以增加 M 出现概率:
// 方案 A:扩大 M 区间
L: score <= 2
M: score == 3 or score == 4
H: score >= 5
// 方案 B:三等分
L: score <= 3
M: score == 4 (不变)
H: score >= 5 (不变)
注意:调整阈值会改变用户向量的分布,可能需要同步调整类型模式串或增加新类型来覆盖新的分布。
修改相似度计算:
当前公式 similarity = max(0, round((1 - distance / maxDistance) * 100)),maxDistance 在 scoring.maxDistance(默认 30 = 15 维 × 每维最大差 2)。改维数后须同步更新该字段。
- 若需加权距离:
weighted_distance = sum(w[i] * |user[i] - type[i]|),须改src/engine.js
修改 HHHH 兜底阈值:
编辑 scoring.fallbackThreshold(相似度百分数,默认 60)。
- 提高(如 70):更多用户落入对不上猫粮型兜底
- 降低(如 50):兜底更少,主类型相似度可能更低
完整流程(增维后须同步 scoring.maxDistance,无需再改引擎字面量):
- 在
data/dimensions.json→models中扩展某模型,或新增模型键并在models中注册 - 在同一文件的
definitions中增加新维度键及 L/M/H 文案 - 在
order数组末尾(或约定位置)加入新维度代码,保证与pattern分段规则一致 - 在
questions.json→main中为该维度增加 2 道题(dim指向新代码) - 更新
types.json→standard里全部类型的pattern(每型多 1 个 L/M/H) - 理论最大曼哈顿距离 =
2 × 维度数;同步修改data/config.json→scoring.maxDistance(matchType与相似度分母从配置读取)
参考 catnip_gate_q1 / catnip_gate_q2:在 questions.json → special 增加条目,在 types.json → special 增加类型,并扩展 src/quiz.js / src/engine.js / src/result.js 中的分支(当前仅实现猫薄荷门控与 HHHH)。
{
"id": "new_gate_q1",
"special": true,
"kind": "new_gate",
"text": "题目",
"options": [],
"behavior": "中文说明:插入规则与触发条件(供编辑与审阅,前端可不解析)"
}设计要点:
- 门控题勿写入
main,且不进入calcDimensionScores所用题集 - 多门控需定义优先级(当前 SIAMNIP 优先于 HHHH 于普通匹配)
| 项目 | 配置 (data/config.json) |
代码 |
|---|---|---|
| 分级阈值 | scoring.levelThresholds |
main.js → scoresToLevels |
| 理论最大距离 / 相似度分母 | scoring.maxDistance |
main.js → determineResult → matchType |
| HHHH 兜底阈值 | scoring.fallbackThreshold |
main.js → determineResult(best.similarity < fallbackThreshold) |
| 猫薄荷门控 | catnipGate |
quiz.js 读取 config.catnipGate |
缺省:matchType / determineResult 内若未传参,仍默认 maxDistance = 30、fallbackThreshold = 60,与当前 config.json 一致。
自我模型 (S) 情感模型 (E) 态度模型 (A)
S1 自尊自信 E1 依恋安全感 A1 世界观倾向
S2 自我清晰度 E2 情感投入度 A2 规则与灵活度
S3 核心价值 E3 边界与依赖 A3 人生意义感
行动驱力模型 (Ac) 社交模型 (So)
Ac1 动机导向 So1 社交主动性
Ac2 决策风格 So2 人际边界感
Ac3 执行模式 So3 表达与真实度
| 类型 A | 类型 B | 距离 | 聚类关系 |
|---|---|---|---|
| CORNISH | HIMALAYAN | 1 | 低功能群内 |
| LIHUA | ABY | 2 | 高功能领导群内 |
| AMERICAN | RUSSIAN | 2 | 高认知独立群内 |
| LIHUA | MAINE | 3 | 高功能领导群内 |
| MAINE | ABY | 3 | 高功能领导群内 |
| AMERICAN | ORANGE | 3 | 高认知独立群内 |
| BOMBAY | EGYPTIAN | 4 | 低功能群边缘 |
| MUNCHKIN | CORNISH | 4 | 低功能群内 |
| CHARTREUX | PERSIAN | 4 | 消极隐退群 |
| SIAMESE | JIANZHOU | 4 | 高规则低社交群 |
| AMERICAN | ABY | 4 | 跨聚类 |
| RAGDOLL | LIHUA | 5 | 高功能领导群内 |
| EXOTIC | BRITISH | 5 | 中间温和群边缘 |
| MUNCHKIN | HIMALAYAN | 5 | 低功能群内 |
| VAN | BIRMAN | 5 | 中间温和群内 |
| JIANZHOU | ORANGE | 5 | 高认知群边缘 |
| RUSSIAN | ORANGE | 5 | 高认知独立群内 |
| EGYPTIAN | PERSIAN | 5 | 消极隐退群 |
| 类型 A | 类型 B | 距离 |
|---|---|---|
| AMERICAN | HIMALAYAN | 24 |
| MAINE | SAVANNAH | 24 |
| RUSSIAN | HIMALAYAN | 24 |
| JIANZHOU | CORNISH | 23 |
| AMERICAN | CORNISH | 23 |
| LIHUA | SAVANNAH | 23 |
| ORANGE | HIMALAYAN | 23 |
| RAGDOLL | BOMBAY | 22 |
| RAGDOLL | MUNCHKIN | 22 |
| RAGDOLL | SAVANNAH | 22 |
| MAINE | MUNCHKIN | 22 |
| MAINE | CORNISH | 22 |
| LIHUA | HIMALAYAN | 22 |
| LIHUA | MUNCHKIN | 22 |
| LIHUA | BOMBAY | 21 |
| BENGAL | BOMBAY | 22 |
| JIANZHOU | HIMALAYAN | 22 |
报告结束