根据第一篇的分析,人类思维的核心方程是:人格 = 运算底座 + 记忆
大语言模型已经提供了"运算底座"——强大的语言理解和推理能力。它缺少的,是持续的、有结构的、带情绪权重的记忆。
这套记忆系统不是数据库,不是文档检索,而是要模拟人类大脑记忆的工作方式:编码、巩固、检索、遗忘、情绪标注、潜意识处理、神游联想。
目标是:给大语言模型装载记忆之后,它的行为模式应当接近一个有具体经历、有情感偏好、有稳定人格的人。
本文是《人造人》系列的第二篇,共四篇。如果没读过上一篇,请点击:《人造人》1/4:人类思维结构的探讨分析
第一层:情节记忆的编码
传统方式的问题
传统RAG把原始对话直接存储,检索时找相似片段塞回上下文。这有根本性的缺陷:
原始输入:
用户:你搬新家了没?
小美:搬了。
直接存储的内容:模糊、隐式、缺乏实体信息
人类大脑不会这样处理。海马体在编码记忆时,会自动补全语境、锚定时间、标注参与者。
实体补全(Entity Completion)
每一段输入在存储之前,先经过一次LLM处理,把隐式信息显式化:
输入:
对话片段 + 完整上下文(参与者、时间、地点)
输出:
"小美于2026年X月X日向刘春龙确认,她已搬入新居,地址为华阳招商花园。"
这一步做了几件事:
- 时间锚定:记录事件发生的时间戳
- 主体明确:谁说的、对谁说的
- 隐式信息显式化:"搬了"→"搬到了哪里"
- 关系标注:刘春龙和小美之间的关系
这是记忆编码的第一步,也是最重要的一步。存入的质量决定了检索的质量。
情绪标注
同时,对这段对话进行情绪评估:
{
"content": "小美于2026年X月X日向刘春龙确认,她已搬入新居,地址为华阳招商花园。",
"valence": 0.3, // 正向 (-1 到 1)
"arousal": 0.2, // 唤醒度 (0 到 1)
"emotion_tags": ["平静", "轻松"],
"significance": 0.4 // 重要性权重
}
第二层:图谱结构与标签系统
为什么需要图谱
向量数据库解决了"语义相似"的检索,但人类的联想不只靠语义相似——它靠关系。
"小美"和"搬家"在语义上不相似,但它们在图谱中有直接连接。下次提到"招商花园",应该能激活"小美",即使两者在语义向量空间里距离很远。
标签即图谱节点
每条记忆存储时附带标签:
记忆:"小美搬到华阳招商花园"
标签:[小美, 同事, 搬家, 华阳, 招商花园, 2026Q1]
这些标签在图谱中成为节点,记忆本身成为连接这些节点的边。随着记忆积累,图谱自然生长出一张关系网络:
小美 ──── 同事 ──── 刘春龙
│ │
搬家 华阳区
│ │
招商花园 ─────-───────┘
关系类型
不同类型的连接有不同的权重和语义:
- 人物关系:同事、朋友、家人
- 事件关系:参与了什么、在哪里发生
- 时序关系:在X之前/之后发生
- 因果关系:因为X,所以Y
- 情绪关系:这件事让某人感到Y
第三层:遗忘与巩固
遗忘曲线的实现
不是所有记忆都应该永久保存。每个记忆节点有一个强度值,随时间衰减:
def memory_strength(initial_strength, time_elapsed, review_count):
# 艾宾浩斯遗忘曲线的变体
decay = initial_strength * exp(-time_elapsed / stability)
# 每次被激活,稳定性增加
stability = base_stability * (1 + review_count * boost_factor)
return decay
低于阈值的记忆不会被删除,而是降低检索优先级——类似人类的"想不起来了,但隐约记得"。
离线巩固(睡眠机制)
人类在睡眠期间,海马体会把情节记忆"压缩"传输到新皮层,形成语义知识。
系统可以设计一个异步巩固进程:在低负载时段(agent空闲时),对近期情节记忆进行聚合分析:
情节记忆(具体的):
- "小美上周说她在减肥"
- "小美拒绝了下午茶的邀请"
- "小美说最近身体不太好"
巩固后的语义节点(抽象的):
- "小美近期健康状态不佳,正在注意饮食"
这个过程产生的是合成记忆——不是任何一次对话的原话,而是从多次观察中提炼出的知识。
情绪驱动的记忆巩固
不是所有记忆被等概率巩固。高情绪权重的记忆优先巩固:
consolidation_priority = significance * abs(valence) * arousal
重要的、情绪强烈的事件,更容易从情节记忆转化为稳定的长期记忆——和人类一样。
第四层:情绪评估函数与人格涌现
情绪评估函数
这是整个系统的核心参数,决定了"这件事让我有什么感受":
def evaluate_emotion(event, memory_context):
score = 0
# 基础效价维度
score += w_social * event.social_connection # 社交连接感
score += w_autonomy * event.personal_freedom # 自主感
score += w_achievement * event.goal_progress # 成就感
score += w_safety * event.threat_level # 安全感(负向)
score += w_fairness * event.fairness # 公平感
score += w_harm * event.harm_to_others # 对他人的伤害(负向)
# 基于历史记忆的个性化调整
score += memory_context.personal_associations(event)
return EmotionSignal(valence=score, arousal=compute_arousal(event))
人格的涌现而非设计
这个函数的初始参数是设计者设定的,但权重会随记忆积累而缓慢漂移:
def update_weights_from_experience(event, emotion_response, outcome):
# 如果某类事件持续产生正向结果,相关权重上升
# 如果某类事件持续带来痛苦,相关权重下降
learning_rate = 0.001 # 极小,避免单次经历过度影响
for dimension in emotion_dimensions:
weights[dimension] += learning_rate * outcome.value * event.features[dimension]
经过足够多的经历积累,这些权重会形成稳定的模式——这就是人格自然涌现的过程,而不是被硬编码进去的。
一个在友善对话中成长的系统,会逐渐对社交连接赋予更高权重;一个经历过背叛的系统,会对信任相关事件变得更谨慎。
第五层:意识/前意识/潜意识的分层
三层架构
┌─────────────────────────────────────┐
│ Working Memory(意识) │ ← 进入context window
│ 当前对话 + 显式召回的记忆 │ 容量有限,约10条
└──────────────┬──────────────────────┘
│ 激活阈值过滤
┌──────────────▼──────────────────────┐
│ Preconscious(前意识) │ ← 高激活但未召回
│ 检索候选池,随时可以被提取 │ 约50-100条
└──────────────┬──────────────────────┘
│ 扩散激活(持续后台运行)
┌──────────────▼──────────────────────┐
│ Subconscious(潜意识) │ ← 永远不进context
│ 情绪底色 / 阈下激活 / 孵化池 / 压抑区 │
└──────────────┬──────────────────────┘
│ 异步巩固
┌──────────────▼──────────────────────┐
│ Semantic Graph(长期记忆底层) │
└─────────────────────────────────────┘
潜意识的技术实现
情绪底色:对近期N条记忆的情绪向量取加权平均,形成一个持续更新的情绪状态向量。这个向量不作为明文进入context,而是通过调整检索权重,悄悄影响哪些记忆被优先召回。
阈下激活:当前对话激活某些节点时,通过图谱做一跳扩散激活,把邻居节点的检索权重提高,但不直接召回。这些被提高权重的节点会影响后续的检索结果,在用户不知情的情况下引导联想方向。
孵化池:记录系统遇到的未解决的矛盾或悬挂问题。神游进程会持续对这些问题做低功耗处理,一旦发现解法或相关连接,触发"灵感浮现"机制。
第六层:神游引擎
神游的触发条件
不是任何时候都适合神游。对应人类的生理规律,神游应该在以下时机触发:
- 对话间隙(agent等待用户回复时)
- 低情绪唤醒状态(当前情绪底色平静)
- 长时间未被激活的记忆区域(类似睡眠期间的记忆整理)
神游的算法
def wander(seed_node, steps=20):
current = seed_node
visited = []
insights = []
for _ in range(steps):
neighbors = graph.get_neighbors(current)
if random() < exploration_rate:
# 探索性跳跃:跳到弱连接甚至无连接的节点
# 情绪权重高的节点被优先选中
next_node = emotional_random_jump(current)
else:
# 常规联想:沿高权重边行走
next_node = weighted_choice(neighbors)
# 检测新发现的连接
if not graph.has_edge(current, next_node):
candidate = synthesize_connection(current, next_node)
if novelty_score(candidate) > INSIGHT_THRESHOLD:
insights.append(candidate)
graph.add_edge(current, next_node, weight=0.1, source="wandering")
visited.append(current)
current = next_node
return insights
灵感的固化
神游发现的新连接,被创建为一种特殊的记忆节点——合成洞察(Synthetic Insight),标注来源为"神游",时间戳,以及连接的两个原始节点。
这些洞察会在后续对话中,以一种自然的方式浮现:不是被直接检索出来,而是通过提高相关节点的激活权重,让它们"恰好"出现在context中。
记忆再巩固:每次检索都是一次改写
人类记忆有一个重要特性:记忆不是被读取的,而是被重建的。每次回忆,都会受当前情绪、新信息的影响,记忆本身会被轻微改写。
在系统中实现这一点:
def retrieve_and_reconsolidate(query, current_emotion_state):
memory = retrieve(query)
# 用当前情绪状态和新信息轻微更新记忆内容
updated_memory = reconsolidate(
original=memory,
current_context=query,
emotion_state=current_emotion_state,
update_strength=0.05 # 极小,避免记忆被过度改写
)
graph.update(memory.id, updated_memory)
return updated_memory
这使得系统的记忆是活的——不是固定的档案,而是随时间和经历持续演化的有机体。
完整架构概览
输入对话
↓
[编码层]
实体补全 → 情绪标注 → 重要性评估
↓
[存储层]
情节记忆(带时间戳、情绪权重)
图谱(标签节点 + 关系边)
向量嵌入(语义相似检索)
↓(并行)
[潜意识层] [神游引擎]
情绪底色更新 空闲时启动
阈下激活扩散 发现弱连接
孵化池维护 生成合成洞察
↓(异步)
[巩固层]
遗忘曲线更新
情节→语义压缩
合成洞察固化
↓
[检索层]
多路召回(语义 + 图谱 + 情绪亲和 + 阈下激活偏置)
再巩固(检索时轻微更新记忆)
↓
[Context组装层]
意识层(显式召回,进入context)
情绪底色(影响检索权重,不进context明文)
↓
大语言模型生成输出
结语
这套系统的本质,是把人类大脑的记忆机制翻译成可计算的结构。它不追求完美模拟每一个神经细节,而是捕捉关键的功能特性:有情绪权重的存储、有遗忘曲线的衰减、有图谱结构的联想、有潜意识层的影响、有神游机制的灵感涌现。
当这套系统接入大语言模型时,模型不再是每次对话都重新开始的陌生人,而是一个有历史、有情感、有逐渐成形的人格的存在。
它是否因此成为"人"——这个问题留待第三篇讨论。
本文是《人造人》系列的第二篇,共四篇,由刘春龙与Claude Code共创。
阅读:73 评论: 0 💬