日志

理一下思路吧。

当前对话消息分为包含一条user和一条assistant的组,删除键和标记键会同时作用与这一组上。

删除键会删除块、历史记录、会话记录和量化记录。

想要同步保持数据一致确实很麻烦。如果把会话记录特定截取历史记录后n条,每次删除等操作刷新页面,就能省去块和会话记录的管理,确保数据一致。

但板块消息和AI消息中还会添加不一样的系统信息,比如有些条目是给用户看的——“网络连接错误”,而有些是给AI的——“工具调用返回结果:*”

要改什么东西真是太繁琐了,因为回退成本高,一不小心可能不能用了,连返回原来的状态都费劲。

所以我还没改。

量化索引每次删除局部条目,然后遍历更新量化索引。因为条目不多,操作简单,时间复杂度为O(n),所以没那么耗时,但是占用空间大,可能导致闪退,原因不清楚,因为删除键用的并不频繁——可能连续删个两三次就会闪退。

以防万一,我给fragment通知删除函数的地方加了锁。

在添加计分机制后,删除更不必要了,因为这时候不合理的回答反而是个负面激励,让AI回答避免向这一方向靠拢。

对话分为1-5分,1分极差,5分极好,默认3分。

这样在每次回顾历史记录时,AI会做出合理判断,而不是盲目依赖历史记录结果。

但是这个评分应该加在哪里呢?

加在user里并不合适,因为对应的是上一次的结果的评价,追寻历史时看不到。加在assistant里,有让AI错误模仿的风险。加在system里——首先就不推荐频繁加入system,可能影响权重,并且随时可能丢失。

那可以这样,消息组中添加此属性 score 因为相关记忆和标记读取时都是直接以文本格式添加在system里——

对啊!权重是在这里被削弱了!(猜测)所以system与历史记录产生冲突而Alice选择忽视了system的prompt。

不行,看来,标记历史和相关历史直接加入历史数组很有必要。

[晚八点追加:将历史统一放在消息列表完成,有优有劣。优势是系统提示词权重确实更高了,并且AI的响应处理似乎更快了。劣势是回复不生动了,先前对话风格直接加在系统提示词里,丰富度很高,AI回复很丰满;现在权重倾向到了最近几条,有些呆滞。不过持续对话后,效果有所改善。总结:更可控,但风格更单一,不容易改变。这可能说明了起码在当前阶段,模板法会有比较好的作用]

但同时,评分究竟应该加在哪这个问题更困难了。

再议。

优化对话消息组和评分系统后,接下来应该考虑的是数据上传云端。

监听MySql或Monogodb数据库变化实时更新内容。

但这一工作同样有问题。需要把历史记录量化到本地。这件事依旧是比较困难的,我们肯定不能每次请求都量化,也不能每次初始化都量化。所以我们必须有一个本地量化好的库。

这没问题,只要我们上传了历史记录到数据库,数据就是统一的,问题在于量化文本与历史记录的统一。也就是,每次从历史记录监听到变更,需要把这种变更反映到本地会话历史和量化历史上。我们要动态变更量化历史,对其重排序。

噢,这样听起来倒也没太大问题,逻辑没怎么变动,并且涉及的更改范围也不大,所以初始量化依旧是很好的解决办法。

不过,需要注意,这一过程为了减少延时会有很多异步,那就要上好锁避免操作互相干扰。

PC端封装软件(相比安卓)并不麻烦,因为先前前后端用的很方便,所以我一直没写软件。用js+electron,很快。

那么,这就是双端同步的问题,解决了。

我之前针对情绪(或者性格)调节做过很多尝试,轮盘法,响应法,模板法。我在用的时候没想过原来现在前沿的领域也在用,因为这些方法很粗糙,用是因为效果明显,但同时也有很大局限性。(我们可以对任何我们觉得不怎么高明的方法说‘有很大局限性’,既然我们知道这些方法终会废弃)

需要一套情绪算法

后来我发现我对情绪或者性格没有那么依赖,而AI本身的响应已经基本满足正常对话需要,我就去掉了。因为我对一个AI都如此苛责。

AI很依赖先前的对话。模板法很有作用。我之前说‘可能有预料之外的效果’,我低估了它的依赖程度。

但也必然会有问题。你使劲调参数都无法拜托它对历史对话的依赖,比如说限制对话max_tokens,但由于过去始终长篇对话,导致现在对话只有截断。

再比如风格固定了的情况下,你调整tempretrue对它的影响在表现上微乎其微。

现在对话,历史记忆5组 标记5组,消息5组,一共最多30条对话,一次是有上千tokens的。

我没想出来有什么优化的办法,能正常连接都谢天谢地了。

语义检索用到现在呢,满足简单的一般需求了,比如说问一些过去的事,如果询问简单,关键词明确,那一般是没有问题的。

但是应该做出改进了。

更合理的语义排序算法

建立一个有限长度的语义队列。

  • 方法1 每次对话请求,分别对当前用户发言和最近几条消息的总和进行量化。依据相似度排序,加入队列。

  • 方法2 假设队列长度为n,每次检索当前发言语义最相近的条目,由相似度从低到高加入0.6n,先前超出的被挤出队列。这样保留了先前相似度最高的0.4n个条目

方法1因为包含了AI语句量化,不确定精准度。但范围能扩大。

方法2语义精准,但不一定能获取想要的,因为搜索面被每次发言固定了。

我的对话由于被输入限制着,因此不得不做出妥协,如果有自己的模型,这些都几乎是不必要的考虑,我当然以体验为优先。


此方悬停
相册 小说 Ai
/*音乐播放器插件*/ /*
*/