ACG Type Indicator — 一个以 MBTI 为基础的二次元角色原型测试站点
🌐 acgti.tianxingleo.top — ACGTI官网
回答情境式问题 · 获得唯一命中的角色代码 · 解锁你的二次元人格原型
⚠️ 本工具仅作娱乐用途,不作为心理诊断、医学评估或现实人格结论。
- MBTI 四维判定:基于 E/I、S/N、T/F、J/P 四大维度构建严谨的底层框架。
- 8 种专属原型:发光主角位 · 冰面观察者 · 誓约队长 · 灵巧回旋者 · 温柔修复者 · 影面策士 · 混沌火花 · 月下守护者。
- 110 位角色库:涵盖 BanG Dream!、孤独摇滚!、鸣潮、明日方舟、轻音少女、我推的孩子、Re:从零开始的异世界生活、原神、崩坏:星穹铁道、葬送的芙丽莲、Fate/stay night 等 60+ 部热门作品,持续扩充中。
- 可视化交互:16personalities 风格的交互式倾向滑块,直观展现你的思维倾向。
- 一键分享:精美的结果图报表,支持一键导出 PNG 海报分享给同好。
- 轻量全栈:测试结果在本地浏览器完成计算;结果页会匿名上报最终命中角色与原型到后端(Cloudflare D1),用于全站统计、排行榜与题目权重校准;不要求注册,不收集邮箱等直接身份信息。
- 数据反馈校准:用户可自愿提交"真实 MBTI"反馈,系统会聚合反馈数据与答题维度进行对比分析,用于后续迭代调整题目权重与角色映射准确度。
点击展开查看工作原理
核心计算流程如下:
答题 (39道七级量表题) → 算分 (维度权重+原型权重) → 原型匹配 (8种原型) → 角色命中 (输出唯一代码) → 结果展示
- 答题 — 39 道七级量表题(-3 到 +3),每题关联一个 MBTI 维度与原型权重
- 算分 — 综合维度权重(MBTI 25%)、原型权重(28%)、角色向量(27%)与角色专属权重(20%)四层评分,输出维度倾向百分比
- 原型匹配 — 将四维结果映射到 8 种二次元原型之一
- 角色命中 — 基于维度结果与角色六维向量在角色库中进行 softmax 匹配,命中 1 位主角色并输出自定义角色代码
- 结果展示 — 角色代码、维度倾向滑块、角色解析、原型描述,支持导出海报
数据校准与消融实验:系统会收集用户自愿提交的"真实 MBTI"反馈,离线回放到历史答题数据上进行消融实验(逐题 / 逐维度开关),对比不同权重配置下的匹配准确率与维度偏差,再将验证后的最优配置上线。每轮校准有独立的版本号,支持一键回退。
点击展开查看项目目录结构
src/
├── components/ # 可复用 UI 组件
│ ├── AppIcon.vue
│ ├── ProgressBar.vue
│ ├── QuestionCard.vue
│ ├── ResultSummary.vue
│ ├── SharePoster.vue
│ └── AdsenseSlot.vue
├── composables/ # Vue 组合式函数
│ ├── useQuiz.ts # 测试状态与逻辑
│ └── useShare.ts # 分享与导出功能
├── content/ # 角色源数据(每角色一个文件)
│ └── characters/ # 角色配置(meta + visual + i18n)
├── data/ # 静态数据(部分由脚本生成)
│ ├── questions.json # 39 道情境式题目
│ ├── archetypes.json # 8 个角色原型定义
│ ├── characters.json # 角色资料库(自动生成)
│ ├── characterVisuals.json # 角色视觉配置(自动生成)
│ └── characterProbabilities.json # 角色命中概率
├── i18n/ # 国际化
│ └── messages.ts # 多语言文案(简中/繁中/英/日)
├── pages/ # 页面组件
│ ├── HomePage.vue # 首页
│ ├── IntroPage.vue # 测试说明页
│ ├── QuizPage.vue # 答题页
│ ├── ResultPage.vue # 结果展示页
│ ├── CharactersPage.vue # 角色图鉴页
│ ├── StatsPage.vue # 统计与排行榜页
│ └── AboutPage.vue # 关于页
├── types/
│ └── quiz.ts # TypeScript 类型定义
├── utils/
│ ├── quizEngine.ts # 评分、原型匹配、角色命中逻辑
│ ├── characterVisuals.ts # 角色视觉数据注水
│ ├── characterProbability.ts # 角色命中概率计算
│ ├── statsReporter.ts # 结果匿名上报
│ ├── runtimeApi.ts # 运行时 API 调用工具
│ ├── adsense.ts # Google AdSense 配置
│ └── storage.ts # localStorage 工具
├── router/
│ └── index.ts # 路由配置
├── App.vue # 根组件
├── main.ts # 入口文件
└── style.css # 全局样式
functions/ # Cloudflare Pages Functions(后端 API)
migrations/ # Cloudflare D1 数据库迁移
后端 API 与迁移文件的详细说明见 docs/internal-ops.md。
点击展开查看内容数据一览
| 文件 | 说明 |
|---|---|
src/data/questions.json |
39 道情境式题目 — 维度、原型权重、场景标签 |
src/data/archetypes.json |
8 个角色原型 — 名称、描述、亮点、短板 |
src/data/characters.json |
111 个角色条目(含隐藏角色) — 角色代码、MBTI 映射、标签、六维向量(构建时自动生成) |
src/data/characterVisuals.json |
角色视觉配置 — 立绘、色彩、主题(构建时自动生成) |
src/data/characterProbabilities.json |
角色命中概率 — 基于人群统计的先验分布 |
- 2026.4.18 12:00: GitHub 仓库 ⭐ 数量达到 500,访问量达到 550W
- 2026.4.14 15:00: 网站访问量超过 400 万,发布 blog:【复盘】从一晚上一米工位到3天400w+浏览量的网站,我做了什么
- 2026.4.13 21:00: 网站访问人数达到 100 万,仓库 Star 数达到 300
- 2026.4.12 8:00: 访问人数达到 50 万
- 2026.4.11 23:00: 进入 永雏塔菲 直播间
- 2026.4.11 12:00: 在校内 100 人 BanG Dream 群测试,首次公开
- 2026.4.10: 创建仓库
# 安装依赖
npm install
# 启动前端开发服务器
npm run dev
# 构建
npm run build
# 启动全栈本地开发(含 Cloudflare D1 + Pages Functions)
npm run dev:pages推荐的本地联调流程(避免 --proxy 弃用告警):
# 终端 1(仓库根目录):监听构建产物到 dist/
npm run build:watch
# 终端 2(仓库根目录):启动 Pages + Functions + D1
npm run dev:pages然后访问:http://127.0.0.1:8788/#/stats
注意:
wrangler pages dev ...必须在仓库根目录执行,不要在cron-worker/目录执行。- 如果需要单独调试 Cron Worker,请在
cron-worker/目录运行npm run dev。该模式下出现 "Scheduled Workers are not automatically triggered during local development." 是正常提示,可按日志里的curl /cdn-cgi/handler/scheduled手动触发。
构建产物输出到 dist/,配置为相对路径(base: './')。后端 API 基于 Cloudflare Pages Functions,使用 D1 数据库存储匿名统计数据,部署在 Cloudflare Pages 上。
后端 API 基于 Cloudflare Pages Functions + D1 数据库,主要承担以下职责:
- 结果上报:接收前端匿名提交的测试结果(命中角色、原型、四维倾向百分比),写入 D1 用于全站统计与排行榜展示。
- 反馈收集:用户可在结果页自愿提交"真实 MBTI"自评,与答题维度对比后用于后续校准题目权重。
- 统计查询:提供角色排行、原型分布等聚合数据接口,供统计页与结果页展示。
欢迎 Star · 欢迎 Fork · 欢迎 Issue · 欢迎 PR!
当前项目仍处于早期阶段,题目数量和角色库都还不够丰富。如果你有好的情境题目想法或想补充更多作品的角色,非常期待你的参与:
- 补充新角色 → 在
src/content/characters/下新增<id>.json(详见 新增角色流程) - 添加新题目 → 编辑
src/data/questions.json - 希望新增某个角色 / 某部作品 → 欢迎先提 Issue,附上角色名、作品名和推荐理由
- 对题目表述、题目维度、现有角色设定或结果解析有改进意见 → 欢迎提 Issue 讨论
- 修复 Bug / 改进 UI → 直接提 PR
新增角色的完整流程(含 WebP 图片转换、缩略图生成、概率重算等)请参考 新增角色流程文档。
欢迎基于本项目进行 Fork、改版、二次创作与衍生开发。
如果你基于本项目发布自己的版本,建议同时做到以下几点:
- 在仓库
README、网站页脚、关于页或发布说明中明确标注出处,并附上原项目链接:https://github.com/tianxingleo/ACGTI - 在说明文案中清楚写明"基于 ACGTI 项目二次创作 / 修改"
- 保留当前仓库可追溯的 Git 提交历史与贡献记录,不要在迁移或改版时刻意抹除原始贡献者信息
- 如果你的版本做了明显调整,请额外注明改动范围,避免与原始项目混淆
| 分支 | 用途 |
|---|---|
main |
稳定版本,仅接受来自 dev 的合并 |
dev |
开发分支,日常开发在此进行 |
- 内部开发:在
dev分支上进行开发,稳定后向main发起 PR 合并 - 外部贡献:Fork 本仓库后,向
dev分支提交 Pull Request - CI 校验:仓库已配置 GitHub Actions,会在
push到main/dev和所有 PR 上自动执行npm ci与npm run build
线上部署由 Cloudflare Pages 负责,后端 API 通过 Cloudflare Pages Functions 运行,数据存储在 Cloudflare D1 数据库中。
- GitHub Actions:负责在
mainpush / PR 时校验构建是否通过 - Cloudflare Pages:负责连接 GitHub 后的自动构建与部署,同时托管 Pages Functions 后端 API
- GitHub Release:在推送
v*tag 时自动构建dist/、打包为 zip,并创建 Release
发版方式示例:
git tag v0.2.0
git push origin v0.2.0本项目源代码基于 Apache License 2.0 开源。您可以学习、修改和分发本项目的代码,但在再分发或衍生发布时,需要一并提供许可证文本、保留适用的版权与归属声明,并对已修改文件作出显著标识。根目录中的 NOTICE 记录了本项目的原始归属信息。
- 本项目由 tianxingleo / Li Tianxing 原始创建,原始仓库为 https://github.com/tianxingleo/ACGTI。
- 欢迎以
Fork形式继续开发、改版或进行二次创作;基于本项目公开发布衍生版本时,请引用原项目并注明来源。 - 再分发或衍生版本不应删除原始版权与归属信息,也不应将修改版本描述为完全独立原创而不提及来源。
- 如无特殊原因,建议直接在 GitHub 上保留 Fork 关系,或至少保留可追溯的提交历史、Contributors 页面与其他仓库贡献记录。
- 修改过的版本应明确说明哪些文件或内容已经调整,避免与原始项目混淆。
ACGTI项目名称、仓库标识、站点文案结构以及项目级品牌表达,不因 Apache-2.0 自动授予商标或官方背书许可。- 任何再分发、镜像站、改版站或衍生项目,均不得暗示自己与原作者存在官方合作、官方维护或获得原作者认可,除非另有明确授权。
- 项目中使用的所有二次元角色名称、设定、图像资源(包含但不限于立绘、截图、图标等)的版权均属于其原版权方或原作者(如各大动画制作委员会、游戏开发商、插画师等)。
- 本项目不主张对任何引用的角色 IP 拥有所有权。本项目属于"合理使用(Fair Use)"范畴下的同人衍生交流性质。如有侵权,请提交 Issue 或通过邮件联系,我们将第一时间配合下架并删除相关内容。
- 本工具的核心计算过程在本地浏览器中完成。
- 结果页会匿名上报最终命中角色、原型与维度倾向到后端(Cloudflare D1),用于全站统计、题目校准与角色映射优化。
- 我们不会收集邮箱、手机号、昵称等直接身份信息,也不会存储完整 IP 或 User-Agent。
- 用户可自愿在结果页提交"真实 MBTI"反馈,用于校准题目权重,该反馈完全匿名且可选。
- 本测试基于部分公开的 MBTI 理论与二次元角色原型进行结合与娱乐化重构。测试结果不具备任何专业的心理学、医学或社会学参考价值,请仅当作同人娱乐看待,勿将其作为现实生活指导或专业诊断的依据。
- 界面风格 — 参考自 16personalities 的扁平化设计与专业测评体验
- 项目启发 — 受到开源项目 UnluckyNinja/SBTI-test 的启发
- 视觉素材 — 项目中的角色立绘与背景图片由 ChatGPT (DALL·E) 生成
- 特别鸣谢 — saurlax 提供 GPT-5.4 Token 支持
如果你喜欢 ACGTI 并希望支持它的持续维护和更新:
- ⭐ 在 GitHub 给仓库点 Star
- 🔁 把测试链接分享给朋友、群聊或同好圈
- 💖 赞助支持:赞助页面
你的支持将用于覆盖服务器、域名、数据库和开发成本。
赞助为自愿行为,不对应任何商品或服务。ACGTI 核心功能对所有用户完全免费。
tianxingleo · GitHub 主页 · 作者主页






