把「人是什么」(人类本体)与「人怎么生成」(人物引擎)彻底分开——
一个可复现、可验证、可跨项目共享的模拟人物生成方法。
一句话:先定义「人是什么」,再实例化「一个具体的人」。
这套方法把两件事彻底分开。第一件是「人是什么」:由人类本体统一给出语义权威,包括 18 个语义域、205 个概念、类型化关系和证据来源纪律。第二件是「人怎么生成」:由人物引擎把语义实例化为一个具体的人,最终组装成可以直接交给大模型扮演的系统提示。
精神科诊断不再是「人的根」,而是 18 个域中一个可选的健康模块——同一个人,带诊断或不带诊断,都是一份完整的档案。
persona_kernel.schema.json 定义。generate_persona():16 步流水线、原型网格,生成 45 字段的基础人物档案,也用于复现已有的旧数据。generate_persona_kernel():内部调用基础生成,再按防火墙包装成 18 域标准档案;AI-Ques、P003、Future-Self、Avatar 都用它。diagnosis_ontology.json 收录 ICD-11 第 06 章与 DSM-5-TR 的 278 个诊断(生成范围 37 个,含共病关联)。保留、不删除——只是挂载位置从「根」移到「一个域之下」。health_only 策略:诊断只允许影响健康域与当前状态。这不是口号,而是可测试的不变式——同一种子换诊断,所有非健康字段必须逐字节一致。life_events 由 events 数组承载,每条事件带 canonical_path="life_events.items")。works_for 只能指向机构)。generate_persona() 出 45 字段基础档案;generate_persona_kernel() 出 18 域标准内核,默认 health_only 策略(其中 life_events 由 events 数组承载,每条带 canonical_path="life_events.items")。ontology_native_fill 补全 5 个域共 59 个概念(角色、制度位置、文化语言、情境生态、资源约束),走独立随机数流。v2.5 起同时接进内核生成路径——v2.4 及以前只有建池脚本调用它,实时内核这 5 个域恒为空,与 web 三页数据口径不一致;现在两条路径同一套填充,18 个域全覆盖。life_facts_fill 再补 9 个原本空白的域(发展、迁徙与居住、关系、身体功能与健康、工作与经济参与、教育学习、身份自我概念、当前状态、生活方式惯例)。其中 8 条声明 storage=relation_graph 的路径进关系图而非域载荷,否则 validate() 直接拒绝。城乡与物质资源两键以本模块口径回写(原生采样器只出粗档/定性带,实测 12 例中 5 例城乡互相矛盾)。core/historical_events.py 收录 162 条世界大事(1950–2024,覆盖 101 国),每条带真实统计脚注(WHO / UN / NASA / 9·11委员会 / IAEA / UNHCR·IOM),数字与来源逐字保留。lifetime_events() 按「在世期间 + 国家 ISO-3 + 年龄门槛」三重过滤并按原始概率抽样,写入 context_ecology.historical_events 关系(canonical 目录声明 storage=relation_graph,谓词 experienced_event + 实体 event)。此前这一层只有 4 条通用启发式文案。pool.json 约 36MB,确定性分层采样,可逐字节复现。每卡含 172 国人口学(城市/宗教/族群/姓名)、社会事实层(life_facts:出生·家庭·五分位·四维状态·经济·精力分配)与 5 域本体原生块。| 借鉴对象 | 本项目怎么用 |
|---|---|
| BFO 上层本体 (Basic Formal Ontology) | 借鉴它的六种本体类型:实体、品质-倾向、角色、关系、过程-事件、状态,各自显式分治。角色不是事件(角色转换才是事件),状态不是特质,连续值与离散分类不混进同一棵树。 |
| 语义网 (RDF、OWL、SHACL) 与 Gruber 胜任力问题 | 「一个概念只有一个规范归属」相当于语义层的参照完整性与单一事实源;本体可投影为 RDF、OWL、SHACL 做漂移检查;184 条胜任力问题用作 Tier A 的机器验收。 |
| McKinsey 的 MECE 原则 | 改造成局部 MECE:只有回答同一问题、处于同一抽象层级的同级分类才要求互斥且穷尽;连续值、多值、关系、时间性事实显式声明自己的语义,不假装 MECE。 |
| 大五人格 (McCrae & Costa) | 明确降格为 personality_psychology 域下 temperament_traits 的一个特质模型,不是本体的 MECE 分区;它只做措辞微调,不覆盖人设原型(诊断条件化只存在于基础入口)。 |
| Will Storr 《The Science of Storytelling》 | 采用 Wound→Lie→Desire→Need 叙事因果链,落地为四个字段:初始创伤、失真信念、补偿性欲望、核心需要——让人物有「所以然」,而不只是「是什么」。 |
| Lajos Egri 三维角色论 + Weiland 《Creating Character Arcs》 | 核心欲望与核心恐惧构成静态维度,再叠加三种角色弧线(正向、负向、平坦),按临床轨迹映射 37 个诊断:27 个正弧、4 个负弧、6 个平坦弧。 |
| Beck 认知三角 + Bracha 5F 应激模型 | 失真信念分自己、世界、未来三个方向;应激反应分战斗、逃跑、冻结、讨好、自我伤害五类,各记录主要与次要反应。 |
| ICD-11 第 06 章 + DSM-5-TR + Holmes-Rahe + ACEs + Erikson | 诊断知识库(278 个诊断收敛到 37 个生成范围,含共病);6 个语义域乘 4 个阶段的 143 个事件模板矩阵(带 LCU 应激评分);触发器系统;Erikson 发展阶段字段。 |
| 普查与流行病学分层抽样 | 性别比按诊断加权(如神经性厌食 90% 为女性、注意缺陷与多动障碍 80% 为男性),6 个年龄带、7 级教育、52 国按世界人口加权——人口学来自真实分布,不是抛硬币。 |
| W3C PROV 溯源框架 | 五种认知来源:观察、测量、推断、生成、输入约束,互不冒充;推断与生成值必须携带溯源、置信度与时间类别;「未知」不等于「缺失」。 |
| W3C 的 CR 到 REC 发布纪律 | 本体变更受治理:先查注册表、定类型、验迁移、过门禁;发布门禁全绿才能转正为正式版;验证分级声明——机器门禁通过不等于人类验证,多 AI 共识不等于真值。 |
adjust_*_by_ocean() 在极端人格特质下会整体替换创伤、欲望、需要文本,人设原型被抹平。→ 原型专属模板优先,人格特质只做措辞微调;生成器刻意不向这些函数传人格特质值,并写进改动守则。health_only 防火墙落在契约测试上:同一种子换诊断,非健康的人格与人生史必须逐字节一致。诊断的影响被限定在健康域与当前状态载荷内。sha1(诊断键, 种子) 派生独立种子——新增 59 个概念之后,既有 34 个字段逐字节不变,与 Python 哈希种子也无关。非侵入式演化。python core/archetypes.py)。「覆盖了多少种人」从此是可回答的问题。works_for 指向机构、born_in 指向地点、uses_language 指向语言——参照完整性进入语义层。validate() 中被拒绝——数据质量靠模式强制,不靠口头约定。