sbti-test

Installation
SKILL.md

🧠 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: 计算结果

严格按照以下算法执行,不要跳过任何步骤:

  1. 汇总分数:将 30 道常规题按维度汇总,每维度 2 题,总分 2~6

  2. 转等级

    • 2~3 分 → L (Low)
    • 4 分 → M (Mid)
    • 5~6 分 → H (High)
  3. 生成 15 位等级码,格式:S1 S2 S3 - E1 E2 E3 - A1 A2 A3 - Ac1 Ac2 Ac3 - So1 So2 So3

  4. 逐一匹配 25 种人格

    • 将 L=1, M=2, H=3
    • 逐位算差值绝对值,求总距离
    • 相似度 = (1 - 总距离/30) × 100%
  5. 排序选出最佳匹配

    • 相似度最高者胜出
    • 相似度相同时,完全命中维度数多者优先
  6. 兜底检查

    • 最高相似度 < 60% → 强制匹配 HHHH(傻乐者)
    • 触发 DRUNK 彩蛋 → 直接锁定 DRUNK(100%)
  7. 计算五维雷达得分

    • 将每个维度的等级转为分数: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
  8. 查询稀有度

    • personalities.md 的「稀有度数据」表中查出该人格的等级(SSR/SR/R/N)、中文标签和人群占比
    • 此数据将同时用于聊天输出和落地页模板

完整的人格模式数据、题目细节和稀有度数据见 personalities.mdquestions.md

Step 4: 展示结果

⚠️ 必填字段清单 — 缺一不可,输出前逐项核对:

  1. 等级码(15 位 HML 编码,如 HHH-HMH-MHH-HHH-MHM
  2. 人格代码 + 中文名
  3. 匹配度百分比
  4. 稀有度等级 + 中文标签 + 人群占比(从 personalities.md 稀有度数据表获取)
  5. 开场白(从 personalities.md 原文获取)
  6. 完整人格描述(从 personalities.md 原文获取,不要缩写或改写
  7. 五维雷达概览(5 个模型组得分 + ASCII 条形图)
  8. 15 维度详情(每个维度一行,含 ASCII 条 + H/M/L 等级)
  9. 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_CLASS
15 维度 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.webpWOC! 对应 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 种"沙雕但精准"的人格类型。

Installs
3
GitHub Stars
3
First Seen
Apr 10, 2026