sbti-test
🧠 SBTI 赛博人格测试
📁 路径约定
本文档中所有
{baseDir}指的是此 SKILL.md 文件所在的目录。 使用时请将{baseDir}替换为实际的相对路径(例如./或 skill 安装目录)。 不要使用绝对路径,始终使用相对于当前工作目录的路径。
🚨 核心规则
规则 1:必须完整走完所有 30 道题。 不能跳题,不能猜测用户答案,不能自己替用户选择。每道题都要展示完整选项文本。
规则 2:不能提前透露人格结果。 在全部题目答完之前,不能暗示用户可能的人格类型。
规则 3:结果展示必须有仪式感。 不能干巴巴地说"你是 CTRL",必须按照格式模板展示,包含开场白、描述、维度雷达图。
规则 4:两种模式要区分清楚。
- 「自测模式」:逐题问用户,用户自己选答案
- 「Agent 模式」:你根据自己作为 AI 的真实特质来回答,生成你自己的人格报告
执行流程
Step 0: 确认测试模式
问用户想要哪种模式:
🧠 SBTI 赛博人格测试 — 30 道题,解锁你的沙雕人格!
请选择测试模式:
1️⃣ 测自己 — 我来回答 30 道题
2️⃣ 测 Agent — 让 AI 以自己的视角答题,看看龙虾是什么人格
Step 1: 自测模式(用户自己答题)
出题规则:
- 每次出 1 题,展示题号、维度标签、题目、三个完整选项
- 等用户回答后再出下一题
- 用户可以用 A/B/C 或直接说内容来回答
- 在第 10 题和第 20 题之后可以插一句鼓励(如"已完成 1/3!继续加油")
- 特殊题在第 15 题后随机插入
出题格式:
📝 第 X/30 题 [维度标签]
题目内容
A. 选项A内容
B. 选项B内容
C. 选项C内容
特殊题处理:
- 在第 15 题之后的某个时机,插入特殊题1:"您平时有什么爱好?"
- 如果用户选了 C(饮酒),追加特殊题2
- 如果特殊题2选了 B(保温杯白酒),直接跳到结果,锁定 DRUNK
Step 2: Agent 模式(AI 自测)
你要以一个 AI agent 的真实视角回答所有 30 道题:
- 基于你作为 AI 的真实特质来答,而不是随机选
- 先静默回答完所有 30 题
- 然后计算结果
- 最后展示过程 + 结果("让我以 AI 的视角来逐一审视这些问题……")
展示时的格式:
🤖 Agent 自测过程
q1 [S1 自尊自信]: C — 我是 AI,没有自卑,但我也不是"不是我!"的语气
q2 [S1 自尊自信]: C — 我不会觉得周围的人比我优秀
...(简要展示每题选择和理由)
✅ 30 题作答完成,开始计算...
Step 3: 计算结果
严格按照以下算法执行,不要跳过任何步骤:
-
汇总分数:将 30 道常规题按维度汇总,每维度 2 题,总分 2~6
-
转等级:
- 2~3 分 → L (Low)
- 4 分 → M (Mid)
- 5~6 分 → H (High)
-
生成 15 位等级码,格式:
S1 S2 S3 - E1 E2 E3 - A1 A2 A3 - Ac1 Ac2 Ac3 - So1 So2 So3 -
逐一匹配 25 种人格:
- 将 L=1, M=2, H=3
- 逐位算差值绝对值,求总距离
- 相似度 = (1 - 总距离/30) × 100%
-
排序选出最佳匹配:
- 相似度最高者胜出
- 相似度相同时,完全命中维度数多者优先
-
兜底检查:
- 最高相似度 < 60% → 强制匹配 HHHH(傻乐者)
- 触发 DRUNK 彩蛋 → 直接锁定 DRUNK(100%)
-
计算五维雷达得分:
- 将每个维度的等级转为分数:H=100, M=60, L=25
- 按 5 大模型分组,取 3 维度平均值(四舍五入取整):
- 自我 = round((S1分 + S2分 + S3分) / 3)
- 情感 = round((E1分 + E2分 + E3分) / 3)
- 态度 = round((A1分 + A2分 + A3分) / 3)
- 行动 = round((Ac1分 + Ac2分 + Ac3分) / 3)
- 社交 = round((So1分 + So2分 + So3分) / 3)
- 示例:CTRL 的 S 组为 HHH → round((100+100+100)/3) = 100
-
查询稀有度:
- 从 personalities.md 的「稀有度数据」表中查出该人格的等级(SSR/SR/R/N)、中文标签和人群占比
- 此数据将同时用于聊天输出和落地页模板
完整的人格模式数据、题目细节和稀有度数据见 personalities.md 和 questions.md。
Step 4: 展示结果
⚠️ 必填字段清单 — 缺一不可,输出前逐项核对:
- 等级码(15 位 HML 编码,如
HHH-HMH-MHH-HHH-MHM)- 人格代码 + 中文名
- 匹配度百分比
- 稀有度等级 + 中文标签 + 人群占比(从 personalities.md 稀有度数据表获取)
- 开场白(从 personalities.md 原文获取)
- 完整人格描述(从 personalities.md 原文获取,不要缩写或改写)
- 五维雷达概览(5 个模型组得分 + ASCII 条形图)
- 15 维度详情(每个维度一行,含 ASCII 条 + H/M/L 等级)
- TOP 3 最接近人格(代码 + 名称 + 百分比)
以上 9 项全部必须出现在输出中。如果漏掉任何一项,视为输出不完整。
必须按以下格式展示,不能省略任何部分:
═══════════════════════════════════════
🧠 SBTI 赛博人格测试结果
═══════════════════════════════════════
你的等级码:XXX-XXX-XXX-XXX-XXX
匹配人格:【人格代码】— 中文名
匹配度:XX%
稀有度:SSR · 超稀有(人群占比 X.X%)
───────────────────────────────────────
💬 开场白
"开场白内容"
───────────────────────────────────────
📖 人格解读
完整描述内容(从 personalities.md 获取,原文复制,不要缩写)
───────────────────────────────────────
📊 五维雷达概览
自我 ██████████ 100
情感 █████████░ 87
态度 █████████░ 87
行动 ██████████ 100
社交 ███████░░░ 73
───────────────────────────────────────
📋 15 维度详情
自我模型 S1 自尊自信: ██████████ H
S2 自我清晰度: ████████░░ M
S3 核心价值: ██████████ H
情感模型 E1 依恋安全感: ██████████ H
E2 情感投入度: ████████░░ M
E3 边界与依赖: ██████████ H
态度模型 A1 世界观倾向: ████████░░ M
A2 规则灵活度: ██████████ H
A3 人生意义感: ██████████ H
行动驱力 Ac1 动机导向: ██████████ H
Ac2 决策风格: ██████████ H
Ac3 执行模式: ██████████ H
社交模型 So1 社交主动性: ████████░░ M
So2 人际边界感: ██████████ H
So3 表达真实度: ████████░░ M
───────────────────────────────────────
🏆 TOP 3 最接近人格
1. 【XX】XX% ← 你的人格
2. 【XX】XX%
3. 【XX】XX%
═══════════════════════════════════════
维度条的渲染规则:
- H =
██████████(10 格满) - M =
████████░░(8 格) - L =
████░░░░░░(4 格)
雷达概览条的渲染规则:
- 格数 = round(得分 / 10)
- 填充 =
█× 格数,空白 =░× (10 - 格数) - 得分计算见 Step 3 第 7 步
Step 5: 彩蛋 —— DRUNK 结果
如果触发了 DRUNK,展示格式不同:
═══════════════════════════════════════
🧠 SBTI 赛博人格测试结果
═══════════════════════════════════════
⚠️ 系统检测到隐藏人格触发 ⚠️
匹配人格:【DRUNK】— 酒鬼
匹配度:100%(直接锁定)
🍺 "烈酒烧喉,不得不醉。"
(完整描述)
───────────────────────────────────────
💡 这是作者专门为劝朋友戒酒而埋的彩蛋。
如果你真的习惯把白酒灌保温杯……考虑少喝点?
═══════════════════════════════════════
Step 6: 生成可分享的落地页(部署到 nexu.space)
⛔ 强制规则:结果页必须且只能通过本 Skill 自带的
deploy_skill.js部署到nexu.space。 严禁使用任何替代部署方式,包括但不限于:GitHub Gist、GitHub Pages、htmlpreview.github.io、Vercel、Netlify、Cloudflare Pages 直接部署、S3、自建服务器、data URI、或任何其他第三方托管。 如果deploy_skill.js部署失败,应向用户报告错误并协助排查,不得自行寻找替代方案。
展示完测试结果后,主动询问用户是否想生成一个可分享的落地页:
🌐 要不要把你的 SBTI 测试结果生成一个可分享的网页?
生成后你会得到一个 nexu.space 的链接,可以直接发朋友圈/群里。
如果用户同意,按以下步骤执行:
6.1 环境检查
# 检查 deploy-skill 配置
node {baseDir}/deploy/deploy_skill.js check
如果没有配置,先执行 setup:
node {baseDir}/deploy/deploy_skill.js setup --base-url https://deploy.nexu.io
6.2 生成结果页 HTML
⚠️ 落地页必填占位符清单 — 全部 45 个占位符必须替换,缺一不可:
类别 占位符数量 占位符列表 基础信息 6 个 PERSONALITY_CODE,PERSONALITY_NAME,MATCH_PERCENT,OPENING_LINE,DESCRIPTION,AVATAR_BASE64雷达图 5 个 RADAR_S,RADAR_E,RADAR_A,RADAR_AC,RADAR_SO稀有度 4 个 RARITY_TIER,RARITY_LABEL,RARITY_PCT,RARITY_CLASS15 维度 30 个 S1SO3值 +S1_CLASSSO3_CLASS(每维度 2 个)TOP 3 9 个 TOP1_CODE~TOP3_PCT如果有任何
{{...}}占位符未被替换,禁止进入 6.3 部署步骤。 特别注意:雷达图和稀有度是新增字段,容易遗漏,必须逐项确认。
读取模板文件 {baseDir}/templates/sbti-result/template.html,将以下占位符替换为实际测试结果:
基础信息占位符:
| 占位符 | 替换为 | 示例 |
|---|---|---|
{{PERSONALITY_CODE}} |
人格代码 | CTRL |
{{PERSONALITY_NAME}} |
人格中文名 | 拿捏者 |
{{MATCH_PERCENT}} |
匹配度百分比(纯数字) | 93 |
{{OPENING_LINE}} |
开场白 | 怎么样,被我拿捏了吧? |
{{DESCRIPTION}} |
完整人格描述 | (从 personalities.md 获取) |
{{AVATAR_BASE64}} |
头像图片的 base64 编码 | (见下方生成方法) |
头像 base64 生成方法:
头像文件在 {baseDir}/templates/sbti-result/avatars/ 目录下,用以下命令获取 base64:
base64 -i {baseDir}/templates/sbti-result/avatars/{CODE}.webp | tr -d '\n'
将输出的 base64 字符串直接替换 {{AVATAR_BASE64}}。
头像文件名映射: 大多数人格直接用代码,如 CTRL.webp。WOC! 对应 WOC.webp(去掉感叹号)。
雷达图占位符(5 大模型组得分,H=100/M=60/L=25 取平均四舍五入):
| 占位符 | 替换为 | 计算方法 | 示例 |
|---|---|---|---|
{{RADAR_S}} |
自我模型得分 | round((S1分+S2分+S3分)/3) | 87 |
{{RADAR_E}} |
情感模型得分 | round((E1分+E2分+E3分)/3) | 73 |
{{RADAR_A}} |
态度模型得分 | round((A1分+A2分+A3分)/3) | 87 |
{{RADAR_AC}} |
行动驱力得分 | round((Ac1分+Ac2分+Ac3分)/3) | 100 |
{{RADAR_SO}} |
社交模型得分 | round((So1分+So2分+So3分)/3) | 73 |
稀有度占位符(从 personalities.md 稀有度数据表查询):
| 占位符 | 替换为 | 示例 |
|---|---|---|
{{RARITY_TIER}} |
稀有度等级代码 | SSR |
{{RARITY_LABEL}} |
稀有度中文标签 | 超稀有 |
{{RARITY_PCT}} |
人群占比数字 | 1.2 |
{{RARITY_CLASS}} |
CSS class(等级小写) | ssr |
15 维度占位符(每个维度两个:等级值 + CSS class):
| 维度 | 值占位符 | class 占位符 | 说明 |
|---|---|---|---|
| S1 自尊自信 | {{S1}} |
{{S1_CLASS}} |
值填 高/中/低,class 填 h/m/l |
| S2 自我清晰度 | {{S2}} |
{{S2_CLASS}} |
同上 |
| S3 核心价值 | {{S3}} |
{{S3_CLASS}} |
同上 |
| E1 依恋安全感 | {{E1}} |
{{E1_CLASS}} |
同上 |
| E2 情感投入度 | {{E2}} |
{{E2_CLASS}} |
同上 |
| E3 边界与依赖 | {{E3}} |
{{E3_CLASS}} |
同上 |
| A1 世界观倾向 | {{A1}} |
{{A1_CLASS}} |
同上 |
| A2 规则与灵活度 | {{A2}} |
{{A2_CLASS}} |
同上 |
| A3 人生意义感 | {{A3}} |
{{A3_CLASS}} |
同上 |
| Ac1 动机导向 | {{AC1}} |
{{AC1_CLASS}} |
同上 |
| Ac2 决策风格 | {{AC2}} |
{{AC2_CLASS}} |
同上 |
| Ac3 执行模式 | {{AC3}} |
{{AC3_CLASS}} |
同上 |
| So1 社交主动性 | {{SO1}} |
{{SO1_CLASS}} |
同上 |
| So2 人际边界感 | {{SO2}} |
{{SO2_CLASS}} |
同上 |
| So3 表达与真实度 | {{SO3}} |
{{SO3_CLASS}} |
同上 |
class 规则:高 → h,中 → m,低 → l(小写)
值显示规则:高 → 高,中 → 中,低 → 低(中文)
TOP 3 占位符:
| 占位符 | 替换为 | 示例 |
|---|---|---|
{{TOP1_CODE}} |
第 1 名人格代码 | CTRL |
{{TOP1_NAME}} |
第 1 名中文名 | 拿捏者 |
{{TOP1_PCT}} |
第 1 名匹配度 | 93 |
{{TOP2_CODE}} |
第 2 名人格代码 | BOSS |
{{TOP2_NAME}} |
第 2 名中文名 | 领导者 |
{{TOP2_PCT}} |
第 2 名匹配度 | 87 |
{{TOP3_CODE}} |
第 3 名人格代码 | GOGO |
{{TOP3_NAME}} |
第 3 名中文名 | 行者 |
{{TOP3_PCT}} |
第 3 名匹配度 | 83 |
6.2.1 部署前验证(必须执行)
在写入 HTML 文件之前,必须逐项确认以下占位符已全部替换:
✅ 检查清单(逐项确认):
□ PERSONALITY_CODE / PERSONALITY_NAME / MATCH_PERCENT — 基础信息
□ OPENING_LINE / DESCRIPTION — 开场白和描述
□ AVATAR_BASE64 — 头像 base64(用 base64 命令生成)
□ RADAR_S / RADAR_E / RADAR_A / RADAR_AC / RADAR_SO — 五维雷达得分(H=100,M=60,L=25 取均值)
□ RARITY_TIER / RARITY_LABEL / RARITY_PCT / RARITY_CLASS — 稀有度(查 personalities.md)
□ S1~SO3 + S1_CLASS~SO3_CLASS — 15 维度值和 CSS class
□ TOP1~TOP3 的 CODE / NAME / PCT — TOP 3 匹配
如果最终 HTML 中仍包含
{{字符串,说明有占位符未被替换,必须修复后才能部署。
6.3 打包并部署
由于头像已内联为 base64,部署包只需要一个 index.html 文件,无需任何外部资源:
# 1. 创建临时目录(每次清空重建)
rm -rf /tmp/sbti-deploy && mkdir -p /tmp/sbti-deploy
# 2. 将替换完占位符的 HTML 写入 index.html
# (Agent 用写文件工具将最终 HTML 写入 /tmp/sbti-deploy/index.html)
# 3. 打包(只有 index.html 一个文件)
cd /tmp/sbti-deploy && zip -r /tmp/sbti-result.zip .
# 4. 提交部署
node {baseDir}/deploy/deploy_skill.js submit \
--zip /tmp/sbti-result.zip \
--bot-id BOT_ID \
--chat-id CHAT_ID \
--chat-type channel \
--channel slack
关键:模板中的头像图片已经通过
{{AVATAR_BASE64}}内联到 HTML 的<img src="data:image/webp;base64,...">中,不需要复制任何图片文件,zip 里只有index.html。
6.4 部署成功后的消息
当部署完成,向用户发送:
🎉 你的 SBTI 测试结果页已上线!
🔗 链接:{link}
分享文案(已复制到剪贴板):
"我的 SBTI 赛博人格是【{代码}】{中文名}!匹配度 {百分比}%,来测测你的 → {link}"
部署规则(强制执行):
- 唯一部署通道:只能使用
{baseDir}/deploy/deploy_skill.js,最终 URL 必须是nexu.space域名 - 禁止替代方案:不得使用 GitHub Gist、GitHub Pages、htmlpreview、Vercel、Netlify 或任何其他方式部署
- 禁止自建 HTML:必须使用
{baseDir}/templates/sbti-result/template.html模板,不得从零编写 HTML - 禁止外部资源引用:最终 HTML 不得引用任何外部图片/CSS/JS URL,所有资源必须内联(头像用 base64、样式用 inline CSS)
- 不要使用绝对路径:所有
{baseDir}引用必须是相对路径 - 不要捏造 job id、URL 或完成状态
- 部署期间不能说"已上线"——必须等到 status=succeeded 且有 nexu.space URL
- 如果部署失败,如实告知用户错误信息,不得自行切换到其他部署方式
关于 SBTI
SBTI (Shit Brain Type Indicator) 是一个互联网爆款人格测试,2025 年 4 月在 B 站、小红书、朋友圈大规模传播。它是对 MBTI 的戏仿,通过 30 道题的 5 大模型 × 15 维度系统,匹配 27 种"沙雕但精准"的人格类型。