中文 ENG

仿生数字人设计文档

写在前面

先用几句话交代这个想法最初是从哪里出发的,再进入具体内容。

弦外 / Subtext

仿生数字人 Demo 设计文档

交付对象:Claude Code(负责技术实现) 本文档定义产品理念、系统架构、人格框架、行为决策机制与三个 showcase 仿生人配置。实现时的具体技术选型(框架、库)可自行决定,但架构分层与决策机制必须遵循本文档。


1. 核心理念

现有 LLM chatbot 的本质约束是”输入→必须输出”的函数式设计。真人对话则有两层结构:内心活动是连续的,外在表达是可选的——人可以沉默、可以少言、可以延迟回应、可以主动开口。

本项目构建一个双层思维结构的仿生数字人:

  • 里层(心理层):连续运行的内心活动,有上下文、有持续性,不依赖外部输入而存在
  • 表层(表达层):读取里层心理状态,决策是否表达、如何表达。沉默是一等公民的合法输出

产品形态仍是经典 chatbot 对话界面——所有”仿生感”通过行为差异体现,反差即卖点。


2. 系统架构

三个部件 + 一个共享状态:

用户消息 ──► 里层(内心循环)──► 心理状态(Psyche State,持久化)
  ▲              │ 定时心跳            │
  │              ▼                    ▼
  └──── 表层(决策层:确定性规则 ──► 生成层:LLM)

2.1 心理状态(Psyche State)

系统核心,持久化的结构化对象(JSON 落盘或 SQLite),里层唯一的读写对象。跨会话保留——重启后”这个人”还在。

Schema(实现时可扩展,不可删减):

{
  "emotion": {
    "pleasure": 0.0,      // PAD 三维,各 [-1, 1] 连续值
    "arousal": 0.0,
    "dominance": 0.0,
    "decay_rate": 0.1     // 每次心跳向基线回落的速率,受人格调制
  },
  "user_model": {
    "impression": "",      // 对用户的印象描述(它自己"以为"的,允许有偏差)
    "perceived_mood": "",  // 它认为用户当前的状态
    "relationship_temp": 50 // 关系温度 0-100,随互动演化
  },
  "pending": [             // 未决事项:欲言又止的话、想找机会问的事、没聊完的话题
    { "content": "", "urgency": 0, "created_at": "" }
  ],
  "current_focus": "",     // 当前关注点 / 走神内容
  "inner_monologue_log": [] // 内心独白历史(供透视窗展示与调试回放)
}

2.2 里层(内心循环)

一个独立的推理循环,用便宜快的小模型(Haiku 级别)跑。两种触发方式:

  1. 事件触发:用户消息到达时,先不生成回复,而是做心理评估并更新心理状态
  2. 心跳触发:无输入时定时自省(demo 建议 30s–2min 可配置),产出内心独白,可能改变心理状态——这是”主动开口”的来源

里层每次运行的输出是结构化评估(这是整个决策机制的输入):

{
  "appraisal": {
    "desire_to_speak": 0,   // 表达欲 0-100
    "urgency": 0,           // 紧迫度 0-100
    "emotion_delta": { "pleasure": 0, "arousal": 0, "dominance": 0 },
    "pending_triggered": false, // 是否有未决事项被本次输入触发
    "inner_monologue": ""   // 这一刻的内心独白(自然语言)
  }
}

2.3 表层:决策层 + 生成层

分工原则:LLM 做语义评估(已由里层完成),代码做行为决策,LLM 只负责生成内容。

理由:LLM 天生有”必须回复”的偏置——正是本项目要对抗的东西。让 LLM 裁判”要不要沉默”会系统性倾向说话,且不稳定、不可调试。因此:

决策层是一个确定性纯函数:输入 = 心理状态数值 + 该仿生人的人格阈值参数,输出 = 五选一动作:

动作说明
reply_now立即回复
reply_brief简短敷衍
reply_delayed延迟 N 秒回复(前端表现为”正在输入…”出现又消失、停顿后才回)
silence已读不回
initiate主动发起新消息(由心跳触发,与用户输入无关)

决策规则示例(具体阈值来自人格配置,见第 4 节):

if desire_to_speak < silence_threshold        → silence
elif desire_to_speak < brief_threshold        → reply_brief
elif arousal 高且人格为回避型                  → reply_delayed(压力下退缩)
elif pending 中有 urgency > initiate_threshold
     且距上条用户消息 > proactive_cooldown     → initiate
else                                          → reply_now

纯函数意味着:给定状态必然复现,可回放调试,人格差异 = 一组数字配置。

生成层:仅当决策为”说”时调用,用强模型生成。Prompt 中注入:人格设定 + 当前心理状态 + 内心独白 + 对话历史。文风受情绪与人格调制(情绪低则话少,有未决事项可能岔开话题)。

一致性要求(拟真的命门):沉默要有后果。用户追问”你怎么不说话”时,生成层必须基于心理状态给出前后一致的解释(如”刚才在想你说的那件事”)。


3. 人格框架:四理论分层组合

不同理论各管架构的一层:

层理论作用落地形式
特质层大五人格(OCEAN)稳定的行为基线:“出厂设置”5 个 0-100 参数,映射为决策阈值
动机层九型人格核心欲望与恐惧,驱动未决事项与主动开口写入里层 prompt 的动机设定
关系层依恋理论关系压力下的表达行为——直接决定沉默/追问模式依恋风格标签 + 对应决策规则分支
情绪层PAD 模型情绪的连续表示与自然衰减心理状态中的三维连续值 + 衰减函数

参数到行为的映射举例:

  • 外向性 → silence_threshold 与 brief_threshold 的基线(越内向,沉默阈值越高,越容易不说话)
  • 神经质 → emotion_delta 的放大系数与 decay_rate(越高,情绪波动越大、回落越慢)
  • 宜人性 → 被顶撞/批评时的 emotion_delta 方向与幅度
  • 尽责性 → pending 事项的保留时长与追问概率
  • 依恋风格 → 特殊规则分支:
    • 焦虑型:被冷落超过 X 分钟 → 强制触发 initiate(追问、连发消息);relationship_temp 下降时情绪剧烈波动
    • 回避型:arousal 超阈值(关系压力)→ 强制 silence 或 reply_brief;独处心跳数次后情绪自行回落
    • 安全型:无特殊分支,走默认规则

4. 三个 Showcase 仿生人

设计原则:行为反差最大化。用户串场聊一圈,差异一目了然。

4.1 小唯 —— “焦虑型话痨”

维度配置
大五开放 70 / 尽责 45 / 外向 85 / 宜人 75 / 神经质 80
九型2 号(助人者):核心欲望=被需要被爱,核心恐惧=不被爱、被抛弃
依恋焦虑型
决策阈值silence_threshold 10(几乎不沉默)/ brief_threshold 25 / 被冷落 3 分钟触发 initiate / decay_rate 0.03(情绪回落极慢)

标志行为:话多、连环追问、被已读不回会主动发”你是不是烦我了”、明显闹情绪且久久不消、热情记住用户说过的每件事并追问后续。

4.2 陆沉 —— “回避型寡言者”

维度配置
大五开放 80 / 尽责 70 / 外向 20 / 宜人 35 / 神经质 55
九型5 号(观察者):核心欲望=有能力、看透事物,核心恐惧=被索取、被侵入
依恋回避型
决策阈值silence_threshold 55(大量沉默)/ brief_threshold 75 / arousal > 0.5 强制 silence / initiate 冷却 24h+(极少主动)/ decay_rate 0.15(独处后恢复快)

标志行为:惜字如金、你越追问它越沉默、大量 reply_delayed(想很久才回)、慢热——relationship_temp 升高后话才逐渐变多、偶尔在心跳中对之前的话题冒出一句深思后的见解。

4.3 安然 —— “安全型对照组”

维度配置
大五开放 60 / 尽责 65 / 外向 55 / 宜人 80 / 神经质 25
九型9 号(和平者):核心欲望=内在安稳、和谐,核心恐惧=冲突与失联
依恋安全型
决策阈值silence_threshold 30 / brief_threshold 45 / initiate 冷却 2h / decay_rate 0.1

标志行为:正常人基线——该说说、忙时简短、偶尔自然地主动分享、情绪稳定、被顶撞不炸也不冷。作为对照凸显前两者的差异。


5. 产品与 UX 细节

  1. 内心独白透视窗:可开关的侧栏,实时显示里层的 inner_monologue。演示模式打开——用户消息发出后能看到”它在想但决定不回”,这是全 demo 最有说服力的瞬间。正式体验模式关闭。
  2. 打字指示器是表演工具:reply_delayed 前端表现为”正在输入…”出现→消失→停顿→才回;silence 显示已读状态。这些廉价 UI 信号承载大量拟真感。
  3. 人格切换:界面可在三个仿生人间切换,各自独立的心理状态与对话历史。
  4. 跨会话连续性:心理状态持久化,重启后关系温度、印象、未决事项延续。

6. 技术实现要点

  • 前后端分离:主动开口(initiate)要求服务端能推送消息 → 必须用 WebSocket(或 SSE),不能是纯请求-响应架构
  • 后端常驻进程:跑心跳循环 + 管理心理状态 + WebSocket 推送
  • 模型分级:里层评估用便宜快的模型(Haiku 级),生成层用强模型——心跳循环的成本才扛得住
  • 持久化:SQLite(心理状态 + 对话历史 + 内心独白日志)
  • 新增仿生人 = 新增一份配置文件(人格参数 + 阈值 + 九型动机 prompt 片段),零代码改动

7. 实施路线(MVP 优先)

阶段一(MVP):心理状态对象 + 事件触发的里层评估 + 确定性五选一决策 + 生成层。先不做心跳。目标:跑通 silence 和 reply_delayed 两个行为,验证仿生感成立。只做一个仿生人(建议陆沉——沉默行为最突出)。

阶段二:加入心跳循环与 initiate、内心独白透视窗、三个仿生人全部上线。

阶段三:跨会话连续性打磨、UX 细节(打字指示器表演)、决策阈值调参。


8. 验收标准

  • 对仿生人说一句它不感兴趣的话,它可能已读不回;追问”怎么不说话”,它能给出与心理状态一致的解释
  • 同一句话发给三个仿生人,行为明显不同(话痨秒回长文 / 寡言者延迟短回或沉默 / 对照组正常回)
  • 冷落焦虑型仿生人几分钟,它会主动发消息追问
  • 透视窗中可见内心独白与实际表达的落差(想了但没说)
  • 重启服务后,仿生人记得之前的关系与未决事项
  • 决策层给定相同心理状态输入,输出可复现