保存时间:2026/4/2 10:38:45
神经元 A 和神经元 B一起被激活 → A→B 的连接强度就变大长期不同时激活、不用 → 连接慢慢变弱、消失
不能什么都用 “函数拟合” 硬扛,存储和计算必须是两个东西。
事实大模型 = 存逻辑小模型 = 算这不就是你要的工程版存算分离?
逻辑推理不能悬空,必须绑一套「最小概念框架」;但可以把所有「冗余细节事实」全部剥离、单独存。
逻辑 + 最小概念框架 = 推理引擎海量细节事实 = 外挂知识库
推理要有概念,概念要有知识,完全剥离就是无源之水。
逻辑(W)离不开概念(U),概念离不开知识(K);就像 OSI 上层离不开下层,分层只是工程简化,不是真的一刀两断。
vec:事实压缩向量w:权重(频次 / 新鲜度)[ 语义向量768 ] → 用来检索、分类、找位置、做覆盖
[ 原文小片段 ] → 用来取出细节
段1:vec1 + text1
段2:vec2 + text2
段3:vec3 + text3
key (768) → value (压缩表示)
你这个不就是 RAG 吗?压缩比不是 1:1 吗?
# 超参数(你自己调)
SLOT_COUNT = 16384 # 总记忆槽数=固定容量
KEY_DIM = 768 # 索引向量维度(压缩用)
VALUE_DIM = 256 # 事实压缩存储维度
SIM_THRESHOLD = 0.85 # 相似度>这个=同一条事实
# 记忆结构:每个槽 = [Key向量, Value向量, 权重, 最后使用时间]
MEMORY = [
{
"key": zeros(KEY_DIM),
"value": zeros(VALUE_DIM),
"weight": 0,
"last_use": 0
}
] * SLOT_COUNT
# 全局步数(用来判断新旧)
STEP = 0
# -----------------------------------------------------
# 1. 存一条事实(核心:同类覆盖、权重叠加、满了挤最弱)
# -----------------------------------------------------
def save_fact(input_key, input_value):
global STEP
STEP += 1
# 1)找最相似的已有记忆
max_sim = -1
best_idx = -1
for i in range(SLOT_COUNT):
sim = cos_sim(input_key, MEMORY[i]["key"])
if sim > max_sim:
max_sim = sim
best_idx = i
# 2)相似 → 叠加权重(强化),不相似 → 找最弱槽覆盖
if max_sim > SIM_THRESHOLD:
# 同一条事实:强化记忆(越说越记得)
MEMORY[best_idx]["weight"] += 1
MEMORY[best_idx]["last_use"] = STEP
# 新值轻微覆盖旧值(更新事实:巴黎→尼斯)
MEMORY[best_idx]["value"] = input_value * 0.7 + MEMORY[best_idx]["value"] * 0.3
else:
# 找【权重最小+最久不用】的槽 → 直接覆盖(遗忘)
weakest_idx = find_weakest_slot()
MEMORY[weakest_idx] = {
"key": input_key,
"value": input_value,
"weight": 1,
"last_use": STEP
}
# -----------------------------------------------------
# 2. 取一条事实(核心:取最像+权重最高)
# -----------------------------------------------------
def get_fact(query_key):
best_idx = -1
best_score = -1
for i in range(SLOT_COUNT):
sim = cos_sim(query_key, MEMORY[i]["key"])
score = sim * log(MEMORY[i]["weight"] + 1) # 相似度×权重
if score > best_score:
best_score = score
best_idx = i
if best_score < 0.5:
return None # 记不住 = 遗忘
return MEMORY[best_idx]["value"]
# -----------------------------------------------------
# 3. 找最弱记忆(覆盖用:权重低+久不用=最该忘)
# -----------------------------------------------------
def find_weakest_slot():
weakest_idx = 0
min_score = 999999
for i in range(SLOT_COUNT):
age = STEP - MEMORY[i]["last_use"]
score = MEMORY[i]["weight"] / (age + 1) # 权重/年龄
if score < min_score:
min_score = score
weakest_idx = i
return weakest_idx