有关Alice:
情绪模型
一开始我的想法是AI动态更改自己的各项数值,然后进行情感计算
Robert Plutchik的情绪罗盘:https://zhuanlan.zhihu.com/p/671059614
考察后发现,虽然较为准确,但作为人设不太合适
尽管如此,我用ai写了一个直观判断当前情绪(二级、三级)的图形界面
地址:https://github.com/Sanqi-normal/tools/blob/main/emotion%20calculator
说回情绪动态调节,实际上,AI根据上下文进行情绪推断要比情绪罗盘更合适。
另一方面,AI对情绪的调节把控并不总合适,就像我们玩过的情感类游戏,一直刷好感值就改变走向长期来看并不适用,虽然情绪变了,但反倒比之前更像布娃娃。
所以情绪稳定一点好。
但情绪指引依旧是建立和维护人设很好的方式,所以我建立了更简单的情绪模型:
兴奋 依赖 崇敬 活泼 惊讶
开心 信任 在意 坦诚 好奇
情绪值 信任值 关注值 外向值 兴趣值
悲伤 厌恶 漠视 羞涩 懒惰
抑郁 敌对 鄙视 内向 困倦
并在前端绘制滑动条方便主动动态调节,发送消息时一并捕获情绪发送到api
这种试验的效果尚可接受,但已经发现几处不协调的地方。
之后可以考虑对话历史中标注过往情感方便情感过渡,但我能预感到只是多此一举而已。
但是情绪依旧可以受多种维度的影响。比如雨天悲观一点(说不定,我更喜欢雨天,但是雨天本身会让人心情压抑一些),晚上困倦一点。
这种思维考虑回对话自身,可以根据大范围的对话总结情绪倾向,比如说频繁对话无意义的内容会让关注值下降,也就表现为不耐烦。
等之后增添了多模态,可改变的维度就更多。我想,这不是应该担忧不变的反而是应该想办法使稳定响应的。
上下文
这里就只定量的短期记忆,目前我限定的是8条上下文,事实上deepseek-v3能处理的token数非常多,历史记录不加限制放进去也能正常响应,目前尚未触及上限。
限制上下文反而是为了限制输入token量考虑,毕竟都是真实的金钱数额。
所以信息密度很重要,把解释和分析的过程交给到AI内部。
比如说‘**’两个字,可以胜过多行人物设定和性格描绘。
时间戳
保存记录的json里增添了时间戳,不会影响到输入,但ai也无法获取时间戳,我都是把时间直接标注在用户输入里。
标注在AI回应中会导致AI模仿输出错误的时间,因而舍去。
时间戳可能会在整理,追忆时起作用。
长期记忆
这个我搜索查找的时间最长,但是试验的成本也最高,已成规模的应用逻辑我并不清楚,了解太多脑子太乱,就先自己做简单的看看效果。
AI谈到的简单方法:历史记录摘要。
我想很多时候意义不大,对话如果不是追求角色扮演多半也不会有什么重要事件发生。
但按时间记忆检索可以用来模仿稍长一点的短期记忆,比如AI历史记录按日期分开保存 分批总结 系统prompt里添加昨天和前天对话的摘要 如有需要可以添加根据时间点查询对话摘要
【20号修正,历史摘要很有必要,想要距离稍长的上下文连贯又不想输入过多token,应该及时截断对话交予辅助ai总结放回对话,标记为前情提要】
关于长期记忆建立我想到的办法是关键词映射追忆
关键词提取(主动添加双引号||小模型提取),寻求原文中的匹配
关键词逻辑:json文件结构为{“关键词”:“出现次数”} 而不包含原文内容
可以标注原文位置(时间戳作为标记)
这样结构更标准
{
‘关键词’:‘’,
‘出现次数’:‘’,
‘原文位置’:{
‘时间戳’:‘’
……
}
}
关键词映射(脚本寻找原文中关键词所在的位置,小模型判断相关上下文)
关于关键词:出现越频繁,给予的权重应该越低
具体逻辑:
每次用户和ai发送的消息,进行关键词提取,添加到关键词json文件中,并让关键词出现次数加1
每次用户发送的信息得到的关键词,在json文件中检索次数,若存在低频,且最近100?条内出现过,ai分析相关上下文并拉到请求里一并发送
对于追忆的消息条目数也应该一并限制。
AI提出说关键词存在语意歧义等问题,给我推荐NLP之类的语言分析,语义分析之类的东西,我懒得学,交给免费的小模型好了,处理效果还算不错。
其他
利用历史记录训练AI和利用低性能AI继承对话代替deepseek v3的可能性均被否决
无需再尝试,在资产条件没得到本质改变之前,应该向别的方向努力。
此方悬停