三层架构 · TypeScript + JSON Schema · 学历 4 档 · 路径 2 条主路径 + 子模式
个人 → 路径 → 环境,逐层抽象,任意一层可独立扩展
个人基础信息 7 大维度
2 条主路径 + 子模式 + 出海倾向
4 大维度 + 真实数据接入层
六大核心维度 + 1 个扩展槽位 customAttributes?
学历精简为 4 档,避免过度细分;海归作为独立标识,对出海路径是关键差异变量。
💡 v1 原 7 档(985硕/985本/211硕/211本/普通本科/专科/自学)已合并为 4 档
独立提取的英语等级字段(你明确要求),0-5 评分;专业技能与软技能分层管理。
人脉不再是一个数字,而是按"路径相关性"拆分为三个布尔开关。
包含你明确要求的"家庭支援水平"字段 parentalSupportCapacity。
家庭支援程度(你明确要求)+ 阶层 + 赡养压力。
性格精简为 3 个最关键维度。
婚恋观:状态、态度、伴侣稳定度、对事业的影响。
2 条主路径 + 子模式 + 出海倾向 + 路径转换成本
路径的核心定义:时间周期、收入曲线、风险结构、学习投入、机会窗口、同化风险。
打工 vs 创业的收入曲线、风险结构差异巨大,必须分模式存储。
从一条主路径转向另一条主路径的代价、所需月数与成功率。
预置:体制内 → 市场化 2x·6月·60%,市场化 → 体制内 4x·12月·15%
4 大维度 + 真实数据接入层 + 宏观指标
行业薪资年增长率是你明确要求的字段,关联周期、政策风险、技能贬值速率。
预置 7 行业:互联网/科技 (15%)、金融 (8%)、制造 (5%)、咨询 (10%)、教育 (3%)、医疗 (6%)、体制内 (2.5%)
一线/新一线/二线生活成本指数是你明确要求的字段,关联房租、机会密度、国际化。
预置 7 城市:北京 100 · 上海 98 · 深圳 95 · 杭州 75 · 苏州 68 · 二线 55 · 县城 30
考编录取难度系数是你明确要求的字段,关联 3 类考试、报录比、起薪。
海外移民/工作签证难度是你明确要求的字段,关联薪资倍数、税务、移民路径。
预置 6 国:美国 (难度 8) · 新加坡 (5) · 英国 (7) · 加拿大 (6) · 迪拜 (4) · 日本 (6)
v2 强化:新增 apiEndpoints 字段,可在运行时拉取真实数据覆盖预置值。
两条主路径的核心参数对比,鼠标移上可高亮
| 字段 | defensive_system 体制内 | offensive_market_overseas 市场化/出海 |
|---|---|---|
| timelineYears | breakeven 2 / peak 20 / lockIn 8 | breakeven 3 / peak 12 / lockIn 6 |
| startingBaseline | 0.5 | 1.0 |
| year5Growth | 1.3× | 2.5× |
| year10Growth | 1.6× | 5.0× |
| volatility | 0.05 | 0.30 |
| ceiling | 0.7 | 5.0 |
| unemployment | 0.02 | 0.30 |
| policyRisk | 0.10 | 0.30 |
| windowClosesAt | 35 | 35 |
| recoveryDifficulty | 0.9 (极难) | 0.4 (可恢复) |
| subModes | — | employment / entrepreneurship |
| overseasLean | — | none / remote_for_overseas / relocate |
所有预置数据点货,可在运行时被 API 覆盖
前端收集 + 校验 + 组装推演输入
把三类数据装入推演引擎的输入对象。
import { pathVariableConfig, environmentFactorConfig } from './environmentConfig'; import type { UserPersona, SimulationInput } from './types'; const user: UserPersona = { age: 28, currentLocation: 'tier1', education: { level: '硕士及以上', overseasDegree: false, major: '计算机科学' }, skills: { englishLevel: 3, professionalSkills: { programming: 7 } }, network: { quality: 5, hasIndustryInsider: true }, financial: { initialCapital: 150000, monthlyExpense: 6000, disposableIncomeRatio: 0.5, parentalSupportCapacity: 500000 }, family: { socialClass: 'middle', supportLevel: 6 }, personality: { riskTolerance: 1, ambiguityTolerance: 7, extraversion: 5 }, marriage: { status: 'dating', marriageIntention: 'open' } }; const input: SimulationInput = { user, paths: pathVariableConfig, environment: environmentFactorConfig, simulationConfig: { timeHorizon: 10, scenarioMode: 'moderate' } };
用 Ajv 编译导出的 schema 校验前端提交的数据。
import Ajv from 'ajv'; import { userPersonaSchema } from './types'; const ajv = new Ajv(); const validate = ajv.compile(userPersonaSchema); if (!validate(user)) { console.error('用户数据校验失败:', validate.errors); }
3 套导出的 JSON Schema:userPersonaSchema / pathVariableSchema / environmentFactorSchema