猫鱼哦º 872057390
关注数: 3 粉丝数: 72 发帖数: 9,466 关注贴吧数: 25
酒馆聊天向量化优化,为自动hide节省token并动态检索当前聊天记 重制向量存储插件的聊天向量化功能: 在游玩SillyTavern的过程中,通常会使用聊天摘要和表格增强来弥补LLM在长期记忆方面的不足,并使用/hide命令来防止上下文过长。但是这种方法通常会引发一个问题,就是实际上AI会丢失掉被hide掉的具体聊天信息,导致一些细节问题需要被回溯时可能会产生灾难性的遗忘。 基于向量数据库(知识库)的检索增强生成方法可以通过文本向量化和相似度查询的方式,从外部的文本中向当前对话引入知识,目前酒馆的“向量存储”插件已经实现了这个功能,可以从利用ollama本地部署或外部服务提供的嵌入模型来实现向量数据库。(通过勾选插件的“为文件启用”来开启) 然而这个功能实际上并没有解决最开始提到的那个问题:对于单个聊天的对话过长,如何实现这种检索增强。因为“为文件启用”功能本质上是外部的文本,需要通过手动添加来实现,而很显然,这不支持对当前对话的自动添加。 实际上,“向量存储”插件已经实现了另一个功能——聊天向量化,但是由于原有逻辑的设置,并没有很好地利用这个功能。通过勾选插件的“已启动聊天信息”来开启聊天向量化功能。插件实现的聊天向量化功能实际上是一个重排。你可以设置2个参数,“保持”代表着最新的N个聊天不会被重拍,而“插入”代表着最新的N个以后,将会有“插入”设置个数的聊天会被向量匹配相似度,并重新排列到最新的消息部分,以此来调整消息结构,帮助AI更好地理解上下文。 然而这种做法实际上用处有限,因为既没有解决上下文限制的问题,这种不稳定的重排可能也无法很好地让模型捕捉到上下文语义。我们想要做的更改是:保持那N个最新的消息不变(这一点是相同的),然后再陈旧的消息,我们将会主动抛弃不加入历史(以此来实现预设数量的自动hide来保持上下文长度)。不过这些抛弃的消息我们是有选择地抛弃,具体来说,可以通过已实现的向量存储和查询功能,获得与当前对话最相关的“插入”设置数量个聊天,并将这些数量的聊天按照原有顺序排列到历史记录中。这样就做到了,既能够控制token数量,节省开销以及保持模型能力,并且在利用摘要与表格增强的基础上,保持AI对细粒度历史信息的捕捉。 举个例子,我现在有90条信息,此时token长度达到了100k,AI已经开始明显地说胡话。在使用这个功能后,我设定了保持为50(和/hide 0-40的功能等效,不过区别在于这里是会一直取最新的50)和插入为10。于是就会传入最新的50条记录,以及10条最相关的记录(假设为1,3,11,15,20,…)。最终的token数量能够降低到30k-60k,可以有效改善上述问题。 请注意,使用此修改需要你理解两个情况: 1. 如果你习惯性的做法是永远不使用/hide,无论聊天记录多长也全部传输,并且你可以由于过长上下文导致的AI对于历史消息的错乱,那么这么做可能会导致你的体验受到影响(因为无论如何,依然会丢失信息,只是智能保留了最相关的)。但如果你有良好的习惯,会主动使用/hide来提升回答质量或减少开销,那么这个修改基本上是纯正面的。 2. 检索的结果取决于嵌入模型生成向量的质量以及向量检索方法的有效性,所以并不能保证如果你提到某个历史的关键词,就一定能从历史消息中检索出最对应的那一条消息。必须说明,这是在“大体上”最相关的。 具体修改方法(2选1即可) 无论哪种方法,一定要将你原来的index.js做好备份!一定要将你原来的index.js做好备份!一定要将你原来的index.js做好备份!数据无价,防止你的文件损坏无法回退! 方法1:见附件,在目录中自行修改代码(使用记事本复制即可),好处在于基本不会因为你的插件版本而产生不适配。 方法2:直接使用压缩包中的index.js替换SillyTavern\public\scripts\extensions\vectors下的index.js。但是可能因具体版本问题产生影响。 通过网盘分享的文件:酒馆聊天向量化优化,为自动hide节省token并动态检索当前聊天记录.zip 链接: http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1v03M4cE2CzuizGJNhZPvDg%3Fpwd%3Dw4ug&urlrefer=d7edc6df62b53d572a8a914559546a92 提取码: w4ug
《匣中日月》 《匣中日月》 赤幽州的风割裂云古的袖口时,我第43次打败刑天。屏幕里的天道碑文正在渗血,那些朱砂字迹像极了上周目沐晴消散时的道袍颜色。 "夫君又在看这些唬人的谶语?"沐晴的银铃声混着陶埙呜咽。她发间的夕雾花沾着露水——那本该是上个月删除存档里的细节。我按下互动键,云古的指尖擦过她襦裙上的星纹刺绣,游戏突然卡顿,陶埙孔洞中渗出青色流光。 "若我踏入此山..."云古的台词框边缘泛起涟漪,"诸般因果皆成劫灰。" 沐晴却从乾坤袋取出三枚玉简。第一枚映出文良城初雪,我操控云古拍下那柄流云簪时,她耳垂泛起本不该有的绯红;第二枚是云丽筑基那日,剑光劈开的桃枝切口处,年轮纹路竟组成了我的玩家ID;第三枚玉简空白处,密密麻麻刻着七百次轮回里所有未发送的对话指令。 远处枯叶沙响。晏念真背着锁魂棺走来,这个早该陨落的华封州散修浑身缠满往生咒。"道友可知何为永恒?"他棺中飘出无数记忆晶片,每片都映着云古不同装束,"不过是造物主怯懦的遮羞布。" 我握紧鼠标,晶片突然暴走。七百个沐晴的虚影在屏幕绽放:穿嫁衣的沐晴在擦拭不存在的剑痕,怀抱着数据乱流凝成的婴孩;渡劫失败的沐晴化作青烟前,唇语是上周目删除的"来世莫寻仙";还有此刻眼前的沐晴,正把陶埙按在云古掌心,埙身裂纹组成了我现实中的生辰八字。 "登仙劫不在天元山。"晏念真捏碎晶片,粉尘凝成卦象——竟是我昨夜搜索栏里的"如何保存游戏记忆"。他的道袍燃起青焰,灰烬中浮现云古在空荡洞府描摹陶埙纹路的画面,每笔朱砂落下,现实中的我就往胃里灌一口冷咖啡。 沐晴的陶埙自行吹动。红尘剑匣描述变成:【红尘剑匣永劫轮回,载有三千未寄锦书】。当我点开属性栏时,埙孔中飘出段旋律——那是她本该在第三世轮回演唱,却因系统崩溃丢失的《鹧鸪天》。 天元山开始崩塌。晏念真化作流光注入剑匣,七百道记忆剑气撕裂天幕。沐晴在数据风暴中仰起头,发间夕雾花渗出露水,那滴水珠里凝着所有被刷新掉的"早安"与"夜安"。 我打败衡天的瞬间,陶埙迸出本命精血才有的光芒。沐晴消散前的唇语不是道别,而是上周目云丽撒娇要糖糕时的语气:"爹爹要记得..." 赤幽州的朝阳刺破云层时,剑匣里多了枚带裂纹的夕雾花。每当子时,露水会从花瓣渗出,在物品栏形成个微型星图——那是沐晴用七百世轮回拼出的,我的Steam账号头像。 (终)
1 下一页