仿生数字人设计文档
先用几句话交代这个想法最初是从哪里出发的,再进入具体内容。
弦外 / 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 级别)跑。两种触发方式:
- 事件触发:用户消息到达时,先不生成回复,而是做心理评估并更新心理状态
- 心跳触发:无输入时定时自省(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;独处心跳数次后情绪自行回落 - 安全型:无特殊分支,走默认规则
- 焦虑型:被冷落超过 X 分钟 → 强制触发
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 细节
- 内心独白透视窗:可开关的侧栏,实时显示里层的
inner_monologue。演示模式打开——用户消息发出后能看到”它在想但决定不回”,这是全 demo 最有说服力的瞬间。正式体验模式关闭。 - 打字指示器是表演工具:
reply_delayed前端表现为”正在输入…”出现→消失→停顿→才回;silence显示已读状态。这些廉价 UI 信号承载大量拟真感。 - 人格切换:界面可在三个仿生人间切换,各自独立的心理状态与对话历史。
- 跨会话连续性:心理状态持久化,重启后关系温度、印象、未决事项延续。
6. 技术实现要点
- 前后端分离:主动开口(
initiate)要求服务端能推送消息 → 必须用 WebSocket(或 SSE),不能是纯请求-响应架构 - 后端常驻进程:跑心跳循环 + 管理心理状态 + WebSocket 推送
- 模型分级:里层评估用便宜快的模型(Haiku 级),生成层用强模型——心跳循环的成本才扛得住
- 持久化:SQLite(心理状态 + 对话历史 + 内心独白日志)
- 新增仿生人 = 新增一份配置文件(人格参数 + 阈值 + 九型动机 prompt 片段),零代码改动
7. 实施路线(MVP 优先)
阶段一(MVP):心理状态对象 + 事件触发的里层评估 + 确定性五选一决策 + 生成层。先不做心跳。目标:跑通 silence 和 reply_delayed 两个行为,验证仿生感成立。只做一个仿生人(建议陆沉——沉默行为最突出)。
阶段二:加入心跳循环与 initiate、内心独白透视窗、三个仿生人全部上线。
阶段三:跨会话连续性打磨、UX 细节(打字指示器表演)、决策阈值调参。
8. 验收标准
- 对仿生人说一句它不感兴趣的话,它可能已读不回;追问”怎么不说话”,它能给出与心理状态一致的解释
- 同一句话发给三个仿生人,行为明显不同(话痨秒回长文 / 寡言者延迟短回或沉默 / 对照组正常回)
- 冷落焦虑型仿生人几分钟,它会主动发消息追问
- 透视窗中可见内心独白与实际表达的落差(想了但没说)
- 重启服务后,仿生人记得之前的关系与未决事项
- 决策层给定相同心理状态输入,输出可复现