B 模型 0.5B base
管天气和联想,不发声
每轮只吐出一张「意图卡」——一张只写方向、不写内容的便条:此刻心情是好是坏(效价 v)、有多激动(唤醒 a)、该往哪个方向翻(检索方向)、脑子里浮起什么画面(意象)、翻多远(联想宽度 breadth)、用哪种方式想(mode)。总长不超过 50 token(大约几十个字)。
温度 1.1 / top_p 0.95 · 不参与训练
TK联合协会 项目档案
目前登记一项:一个还停在设计阶段的人格系统,不产生收入,也不动用股金。
股东告知 NOTICE
本项目为非盈利性项目 · 不涉及任何商业收入 · 不动用股金
股东名册中的赞助仅用于记录与致谢;本项目的预算由站主自行承担(≤ 100 元)。
项目登记簿 PROJECT REGISTER ENTRY 001
设计阶段登记项目 一 PERSONA SYSTEM
Emotion as a Scheduler — A Two-Model Closed-Loop Persona Architecture
两个很小的语言模型分工:一个只负责「此刻心里是什么天气」,另一个照这个天气去翻抽屉,再把话说出来。两者不合并成一个模型,中间只传一张巴掌大的便条。现在它是一份设计文档,还没有做完,也没有实验结果。
先说清楚 PLAIN WORDS
想象一个人住在一间老房子里。每天早上,他心里有一种天气。
天气好的时候,他愿意拉开很多抽屉,翻出很远的东西,脑子也跳得快。天气差的时候,他只拉开最近那个抽屉,看一眼就关上。
抽屉之间牵着绳子。绳子不是按「事有关」连的,是按「心情像」连的——所以「雨天的站牌」会连到「小学门口等妈妈」。
天气决定往哪个方向翻,但他自己负责真的去翻、挑哪一本、用什么腔调说出来。而翻到的东西,又回头改变他的天气。这是一个圈,这个圈就是「心情」的样子。
天气还有快慢:一句话能让天立刻阴下来,但那只是一阵风;要连着阴好几天,季节才会变。
没人来的时候,他一个人在屋里翻,翻着翻着,就只在同一个抽屉里打转——所以得有人时不时跟他说句话。
这个项目要做的,就是把这间屋子装进两个小模型里:一个管天气,一个管翻抽屉。它想试的不是「让 AI 有情绪」,而是——一层很薄的情绪状态,能不能真的改变一个系统的注意、记忆和说话方式。
构成 ARCHITECTURE
系统由两个独立后训练的小模型组成。「0.5B」「1.5B」是参数量,可以粗略理解成模型的脑容量:五亿、十五亿个参数,都在一台普通笔记本上跑得动。
B 模型 0.5B base
每轮只吐出一张「意图卡」——一张只写方向、不写内容的便条:此刻心情是好是坏(效价 v)、有多激动(唤醒 a)、该往哪个方向翻(检索方向)、脑子里浮起什么画面(意象)、翻多远(联想宽度 breadth)、用哪种方式想(mode)。总长不超过 50 token(大约几十个字)。
温度 1.1 / top_p 0.95 · 不参与训练
A 模型 1.5B instruct + 轻量 LoRA
拿到便条后,它先去记忆库里粗筛,沿联想边扩散几跳,再把候选一条条过一遍——「这几条里,哪条让我想说话?」——它有权全部否决。然后才把话说出来。LoRA 是一种只训练一小块附加参数、不动原模型的微调方式,在这里只用来改变表达形式。
温度 0.75 / top_p 0.90 · 轻量 LoRA
两者不合并权重,只传递状态:唯一的联系就是那张便条。权重合并是在参数空间里做平均,不是功能上的复合;对两个目标正交的适配器,合并更像互相干扰。所以「合并」在这个项目里只作为消融实验的对照组存在。
六个字段全是数值或短语。没有一句话是写给人看的——它们只用来决定方向,不承载内容。
核心机制 ONE SCALAR
整个系统只有一个总开关:openness,一个被钳在 0.25 到 0.8 之间的数,由当前情绪算出来——心情好、又不太激动时它高,心情差、又很激动时它低。它同时决定三件事。
听多少
门限 θ = 1 − openness
高保留更多片段,并把高显著度的放到末尾
低只留最刺耳的那一句
想多远
联想宽度 breadth
高多跳、远联想
低单跳,只翻最近那个抽屉
怎么想
推理方式 mode
高类比、直觉
低否证、抠细节
过滤做的是「删掉片段」,不是「调小音量」。因为人在注意收窄时的表现就是删除:紧张的时候,人不是听见所有人但都变小声,而是只看见那张脸。
三个通道同向变化的经验依据:积极情绪拓宽认知(Fredrickson, 2001);唤醒升高收窄注意(Easterbrook, 1959);心境影响加工方式(Forgas, 1995)。
情绪建模 FOUR SCALES
关键在更新规则里:快层往下衰减时,回落的目标不是零,而是此刻的心境。于是「心情好的时候被责备,气消了还是心情好」不需要额外写规则,它自己就长出来了。
另外还加了一层对抗过程,用来产生情绪过冲:被吓一跳之后,情绪不会平滑地回到原位,而是先越过基线、反向荡一下,再慢慢爬回来。参数上有一条硬约束——补偿强度 k 必须小于 1,否则在闭环里会越振越大。
分层记忆 ADJACENCY
记忆分四层:事件层存原始片段、情绪标签和意象;联想层存片段之间带权重的边;叙事层每 50 轮压缩一次「最近我是谁」;气质层几乎冻结,是人格的锚,存在 LoRA 和人格卡里。
关键是,联想边不用语义相似度。语义相似度连出来的是「主题相关」,那是搜索。这里用的是情绪邻近:两个片段只要效价和唤醒都接近(|Δv| + |Δa| < 0.4),而且时间隔得够远,就连一条边;每被共同激活一次,边就加粗一点(赫布式增强)。
所以「雨天的站牌」连到的是「小学门口等妈妈」,不是「公交车」。
检索把意图和执行分开:B 决定朝哪个方向找,但不对结果负责;A 对结果负责,但不决定朝向。这对应一件很具体的事——你可以决定想回忆什么,却没法命令自己想起一件愉快的事。
设计取舍 WHY THESE
失败判据 FALSIFIABILITY
设计文档给每个模块都写了消融条件和击穿阈值:哪一个指标测不出差异,就说明这个模块是装饰。四组消融条件各跑 200 轮,固定随机种子。
消融:把 B 换成一张固定的空意图卡,或换成随机噪声,或换成 A 自身上一轮的摘要。
击穿:真实 B 与其他条件在至少两项指标上没有显著差异 → B 冗余,方案终止。
带宽:固定上下文,只改 v 一个数值,看保留片段数、检索跳数、输出分布的 KL 散度(衡量两组输出差多远的一个数)是否同向变化。
击穿:KL 趋近 0 → 通道失效,重做接口。
动力学:阻尼 × 噪声的 3×3 网格,每格 5 个随机种子,观察稳态跳跃率与记忆调用多样性。
击穿:找不到「既不死锁也不碎裂」的中间区 → 系统本质单稳态。
人格:30 轮之内,人格还在不在。
击穿:20 轮内就滑回助手腔 → 训练数据设计失败。
长程:100 轮之后,人格得分掉幅是否小于 20%。
击穿:掉幅超过 50% → 对外展示不成立。
评测采用盲评:四组日志打乱顺序、去掉组标签,再交给强模型按五个维度打分(连贯性 / 新颖性 / 深度 / 人格一致性 / 独白是否支撑落点)。不盲评,分数就会向实验组偏移。文档把话说死了:若 P0 或 P1 没有通过,整个双模型假设就应当放弃,退回单模型双人格的基线。
为什么做 WHY THIS
主流做法是「单模型 + 系统提示词」:一个模型,一段人设提示词。这条路有三个老问题。
直觉的回应是训练两个专精模型再合并。但合并解决不了这件事:权重合并是在参数空间里做平均,不是功能上的复合。
这个项目走另一条路:不合并权重,只传递状态;把人格的稳定性从权重里挪到时间常数上——四层情绪的叠加本身,承担了「这个人一直是这个人」。这是它想提出的那条不同的路。
还有一层意义是工程态度上的:多数同类个人项目只有演示、没有失败判据,于是没人能区分「真的涌现」和「叙事好听」。这个项目想给个人级项目补上「可证伪」这一课——每个模块都必须能被消融、被测量、被删除。
局限 LIMITS
这些是设计文档第 7 节自己写下的限制,不是事后补的免责声明。