PHTI 是一个公开可访问的物理学家风格测试网站。它不测“会不会做题”,而是用一套偏物理工作方法的题目,去描出你更接近哪一种物理学家的思考路径。
在线地址:https://phti.online
互联网上已经有很多人格测试产品,但很少有人认真处理“理工语境下的思维风格”这件事。PHTI 想做的不是把 MBTI 换一层壳,而是把建模习惯、实验观、结构审美、理论直觉、近似能力、解释欲望这些更接近物理学史的差异,整理成一套适合网页体验的结果系统。
整站围绕三个目标展开:
- 题目要像真实判断,而不是价值观问答
- 结果页要有叙事感,也要能独立分享
- 算法不能靠随机或单一维度硬分配
- 单题流作答,支持上一题、下一题、进度显示与中途恢复
- 36 道题目,采用 7 级量表,题面围绕物理学式的理解方式与工作偏好
- 20 位物理学家画像,覆盖理论、实验、结构派、解释派等不同风格
- 结果页输出主结果、Top 3 匹配、多维图谱、优势、盲区与学习建议
- 结果链接可直接分享,刷新不会丢失
- 人物肖像来自 Wikimedia 体系,并保留来源与授权信息
PHTI 的题目并不直接问“你严不严谨”“你重不重视数学”这类很容易被顺着回答的问题,而是尽量把判断放进更具体的场景里。例如:
- 面对反常现象,第一反应是补装置还是换框架
- 接触一个新理论时,更需要图景、推导还是结构先站住
- 遇到复杂系统时,更想保留纹理还是先抓主导项
- 对对称、美感、可测量性和近似估算分别有多大依赖
结果页也不是简单贴一个名字。它会把用户答案先映射为隐藏维度,再与物理学家画像向量做加权匹配,并结合关键命中维度生成解释,让 Top 1 和 Top 2 / Top 3 的差异更容易看懂。
PHTI 的结果不是随机抽签,也不是“哪个维度最高就对应某位物理学家”。
整体流程是:
- 题目映射到多条隐藏维度
- 维度归一化后形成用户画像向量
- 用户画像与物理学家原型向量做加权匹配
- 对区分度更高的维度给予更强权重
- 对过于宽泛、容易泛匹配的原型加入适度校准
- 输出主结果、次高匹配与动态解释文本
仓库里保留了完整的数据与实现,核心入口分别在:
- Next.js 16
- TypeScript
- Tailwind CSS 4
- Framer Motion
- Recharts
- Vitest
页面状态主要通过 React 组件状态与本地草稿存储管理;结果页本身使用 URL 编码结果,不依赖数据库也能保持可分享与可恢复。
npm install
npm run dev默认开发地址为 http://localhost:3000。
生产构建与本地预览:
npm run build
npm run start运行测试:
npm run test复制 .env.example 为 .env.local:
NEXT_PUBLIC_SITE_URL=http://localhost:3000这个变量主要用于结果页的绝对链接与 Open Graph 元信息。本项目已经兼容在 Vercel 上按请求域名生成分享地址,因此正式部署时也可以把它设置成正式站点地址。
src
├─ app
│ ├─ page.tsx
│ ├─ quiz/page.tsx
│ └─ result/[code]/page.tsx
├─ components
├─ data
│ ├─ dimensions.ts
│ ├─ physicists.ts
│ ├─ portraits.json
│ └─ questions.ts
├─ lib
│ ├─ quiz-storage.ts
│ ├─ result-engine.ts
│ ├─ scoring.ts
│ ├─ share-code.ts
│ └─ wikimedia.ts
└─ types
└─ phti.ts
public
└─ portraits
scripts
├─ fetch-portraits.mjs
└─ fetch-portraits.ps1
docs
└─ screenshots
当前线上版本部署在 Vercel,正式域名为 https://phti.online。
如果要自行部署,最省事的方式仍然是:
- Fork 或克隆仓库
- 在 Vercel 导入项目
- 配置
NEXT_PUBLIC_SITE_URL - 直接发布
项目包含 vercel.json,已经内置根域跳转到 www 的规则。
站内人物肖像优先使用 Wikipedia / Wikimedia Commons 体系资源,图片与授权元数据分别保存在:
需要重新抓取时可执行:
npm run fetch:portraits如果要继续扩展这个项目,最常见的入口有三处:
- 在 src/data/questions.ts 增加或调整题目
- 在 src/data/physicists.ts 增加新人物画像
- 在 src/lib/result-engine.ts 调整匹配与解释逻辑
题库、人物库、结果引擎都是数据驱动结构,后续继续加题、加人、改结果文案都不需要重写页面层。
- 补充更多人物与更细的结果差异化描述
- 优化移动端结果页的信息密度与阅读节奏
- 增加更多可分享的结果卡片样式
本项目使用 MIT License。


