shuakami / amyalmond_bot

👋 QQ机器人,AmyAlmond 是一个基于 Chatgpt 的智能聊天机器人,专为 QQ 群聊设计,支持多语言、上下文感知、长期记忆管理和高级自动化任务。
18 stars 2 forks source link

[DM] 关于此项目memory储存方式的改进策略和长期维护(长期讨论帖) #17

Open xiaoyueyoqwq opened 1 month ago

xiaoyueyoqwq commented 1 month ago

嗨,又见面了 这几天我一直在观察您的项目,我先对您对此项目做出的努力表达由衷的敬意,在这几天的使用开发和观察过程中我认为最大的问题还是在memory方向,特别是在某些极端情况下不正确的memory上下文记忆处理和储存可能导致严重的模型思维混乱;在此过程中我有一位朋友 @MrHua269 对您的项目十分感兴趣,我希望可以帮您完善一下这个项目,最后感谢您一直以来对我下游调试做出的技术帮助

接下来所有改进方案您都可以直接与他进行沟通🚀

MrHua269 commented 1 month ago

记忆丢失的问题在压缩上,其实可以搞个遗忘机制用来忘掉一些"热点"或者"权重"较低的记忆,索引可以按照你压缩记忆的办法生成一次然后按照遗忘机制忘记部分用来减轻记忆堆积

您好。您的建议很有建设性,我会在之后的代码中结合此建议修改的

主意强调ai记住话是谁说的,不要直接概括记忆而是分条并分出记忆被获取到频率然后按照频率低的删除,可以加一个遗忘机制,自动忘掉随机的调用频率在一定区间的记忆,记住一定要让ai知道话是谁说的

shuakami commented 1 month ago

您好。这是我为本项目重新搭建的文档中心 您觉得怎么样

xiaoyueyoqwq commented 1 month ago

您好。这是我为本项目重新搭建的文档中心 您觉得怎么样

很不错,辛苦了

shuakami commented 1 month ago

您好,最新开发版更新 Version: 1.2.0 (Beta_826010) 已推送。 建议您备份当前项目目录为压缩包后再更新哦 <3

xiaoyueyoqwq commented 1 month ago

您好,最新开发版更新 Version: 1.2.0 (Beta_826010) 已推送。 建议您备份当前项目目录为压缩包后再更新哦 <3

豪德,感谢提醒😇 对了 我想了解一下这次更新调整了哪些内容呢?我可以对此做出一些针对性测试

shuakami commented 1 month ago

主要是针对记忆系统的修改(提示词优化、支持记忆使用频率、定期调用该函数以遗忘低频率使用的记忆、修复错误的消息加载),还有优化了一下插件方面。

优化了Prompt:

  if token_count > MAX_CONTEXT_TOKENS:
            summary = await get_gpt_response(
                list(valid_message_history),
                "你是一个高级记忆管理算法。请在不忽略任何关键人物、数据或细节的情况下,将下列对话无损压缩为简明扼要的条目。每一条记忆请保持独立,明确记录说话者身份,并优先保留频率较高的重要信息。压缩后的结果应为一组分条列出的简要总结(每条20-40字),以确保关键信息不会丢失。注意:这些条目将用于进一步的记忆管理和遗忘机制,因此需要确保压缩后的信息依然具有高价值,并能有效减少低频次、不重要内容的堆积。"
            )
xiaoyueyoqwq commented 1 month ago

主要是针对记忆系统的修改(提示词优化、支持记忆使用频率、定期调用该函数以遗忘低频率使用的记忆、修复错误的消息加载),还有优化了一下插件方面。

优化了Prompt:

  if token_count > MAX_CONTEXT_TOKENS:
            summary = await get_gpt_response(
                list(valid_message_history),
                "你是一个高级记忆管理算法。请在不忽略任何关键人物、数据或细节的情况下,将下列对话无损压缩为简明扼要的条目。每一条记忆请保持独立,明确记录说话者身份,并优先保留频率较高的重要信息。压缩后的结果应为一组分条列出的简要总结(每条20-40字),以确保关键信息不会丢失。注意:这些条目将用于进一步的记忆管理和遗忘机制,因此需要确保压缩后的信息依然具有高价值,并能有效减少低频次、不重要内容的堆积。"
            )

hi, 我刚刚在测试启动过程中遇到了一个中断错误,详细请看截图 image

shuakami commented 1 month ago

抱歉,是我忘记提交main.py的更新了,已推送

xiaoyueyoqwq commented 1 month ago

抱歉,是我忘记提交main.py的更新了,已推送

更新反馈:依旧存在问题 详细看图你就明白了

Screenshot_20240826-214858.png

我也不知道为什么,你有头绪吗🤔

shuakami commented 1 month ago

我建议回滚...但是只是回滚记忆逻辑,插件部分不回滚

我明天弄吧

shuakami commented 1 month ago

之后的话记忆逻辑不会大改了,只会做小调整

xiaoyueyoqwq commented 1 month ago

我建议回滚...但是只是回滚记忆逻辑,插件部分不回滚

我明天弄吧

了解,我朋友也在研究这个问题,毕竟...有点太怪了不觉得吗🤔

shuakami commented 1 month ago

可以研究一下payload(您有日志可以发给我)

xiaoyueyoqwq commented 1 month ago

可以研究一下payload(您有日志可以发给我)

okay,我正在调整AI提示词来尽可能缓解此问题,目前我全程都开着debug等级日志,明早我会将今天晚上的所有测试结果和日志打包发给您

shuakami commented 1 month ago

辛苦了,注意休息

---原始邮件--- 发件人: @.> 发送时间: 2024年8月26日(周一) 晚上10:25 收件人: @.>; 抄送: @.**@.>; 主题: Re: [shuakami/amyalmond_bot] [DM] 关于此项目memory储存方式的改进策略和长期维护(长期讨论帖) (Issue #17)

可以研究一下payload(您有日志可以发给我)

okay,我正在调整AI提示词来尽可能缓解此问题,目前我全程都开着debug等级日志,明早我会将今天晚上的所有测试结果和日志打包发给您

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were assigned.Message ID: @.***>

xiaoyueyoqwq commented 1 month ago

辛苦了,注意休息 ---原始邮件--- 发件人: @.> 发送时间: 2024年8月26日(周一) 晚上10:25 收件人: @.>; 抄送: @.**@.>; 主题: Re: [shuakami/amyalmond_bot] [DM] 关于此项目memory储存方式的改进策略和长期维护(长期讨论帖) (Issue #17) 可以研究一下payload(您有日志可以发给我) okay,我正在调整AI提示词来尽可能缓解此问题,目前我全程都开着debug等级日志,明早我会将今天晚上的所有测试结果和日志打包发给您 — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were assigned.Message ID: @.***>

完整日志:botpy.zip

shuakami commented 1 month ago

顺便一说,我还是希望加入一个能一键清空数据库记忆的功能脚本,毕竟我也不确定目前我们的数据库可承载的数据量到底是多少,并且这样产生的一些碎片数据是否会得到自动整理等长期问题

您好,这个实际上是一直有的,但为了安全性考虑一直没有上线推送。 清空数据库.zip

shuakami commented 1 month ago

我知道这样的极限压力测试可能导致这样的问题发生,但如果发生了这样的问题我们有什么方法可以修复或重置数据库吗?亦或者通过类似热重启的方式释放一些记忆缓存?

您好,后续可能会使用一些方法对数据库进行优化或清理(如定时操作),包括引入前端可视化,自动修复数据库错误。 如果在目前出现问题您可以尝试清空数据库。

xiaoyueyoqwq commented 1 month ago

我知道这样的极限压力测试可能导致这样的问题发生,但如果发生了这样的问题我们有什么方法可以修复或重置数据库吗?亦或者通过类似热重启的方式释放一些记忆缓存?

您好,后续可能会使用一些方法对数据库进行优化或清理(如定时操作),包括引入前端可视化,自动修复数据库错误。 如果在目前出现问题您可以尝试清空数据库。

了解,目前我用的清空数据库的办法...有点暴力🤔也就是直接到mongosh删掉数据库,curl DELETE掉ES数据表和rm rf掉tmp里面的那个缓存文件,这样....应该没问题吧😇

shuakami commented 1 month ago

应该没有问题。会自动创建的

shuakami commented 1 month ago

我也不知道为什么,你有头绪吗🤔

您好,关于您反馈的这个问题可以尝试升级到最新开发版更新 Version 1.2.3 (Alpha_829001),尝试修改了可能会导致此问题的一个记忆注入位置

xiaoyueyoqwq commented 1 month ago

我也不知道为什么,你有头绪吗🤔

您好,关于您反馈的这个问题可以尝试升级到最新开发版更新 Version 1.2.3 (Alpha_829001),尝试修改了可能会导致此问题的一个记忆注入位置

反馈:上一份Beta测试版和着一份Alpha版我都测试过一遍了,先说结论:大概率是模型的问题

测试中Meta模型在8B 70B 405B三种模型下都出现了之前所提到的情况,但更换gpt-4o之后就没再出现过了,虽然gpt-4o相对情感表达方面没有其他模型好但是稳定性很不错

shuakami commented 1 month ago

但是如果聊天比较多的话4o还是很贵的

shuakami commented 1 month ago

我个人认为Gemini情感很棒

xiaoyueyoqwq commented 1 month ago

我个人认为Gemini情感很棒

的确如此,基于NLP的Gemini在先天体质和训练上就是向着更加“自然”的对话状态靠拢的,所以在情感表达方面比其他模型都要好很多;其实一开始我也是优先选择了Gemini作为基础模型和训练对象,一开始效果的确也很不错,但是我担心的事情还是发生了:因为我一直都是Google Pixel的资深用户,所以我日常所有语音助手和问答AI用的都是内置在Google应用里的Gemini,这个AI更像是一个短跑运动员,在初期的表现力远远超过其他AI模型,但是一旦用户与Gemini对话内容增多或对话时间过长Gemini就会呈现一种类似“精神分裂”的情况,并且反应时间也将持指数级增长(4000ms > 7000ms),这一点我认为可能是NLP的先天性问题,因为我在日常使用Gemini的情况下也会遇到类似的情况发生,再加上Gemini本身部分(至少我们能用得起的)模型都是为Pixel用户设计的,并且使用了大量的Markdown排版格式,因此对于QQ纯文本聊天的排版非常不友好,可能会出现莫名其妙的空格,短句等排版问题,因此在后期我也是放弃了Gemini而寻找其他更稳定的解决方案

shuakami commented 1 month ago

是的 此问题我也遇到过

shuakami commented 1 month ago

我也不知道为什么,你有头绪吗🤔

您好,关于您反馈的这个问题可以尝试升级到最新开发版更新 Version 1.2.4(Alpha_902002),尝试更新了记忆逻辑,详情请查看commit

xiaoyueyoqwq commented 1 month ago

我也不知道为什么,你有头绪吗🤔

您好,关于您反馈的这个问题可以尝试升级到最新开发版更新 Version 1.2.4(Alpha_902002),尝试更新了记忆逻辑,详情请查看commit

了解,我会在晚上合并更新

xiaoyueyoqwq commented 1 month ago

我也不知道为什么,你有头绪吗🤔

您好,关于您反馈的这个问题可以尝试升级到最新开发版更新 Version 1.2.4(Alpha_902002),尝试更新了记忆逻辑,详情请查看commit

测试结果报告:出现致命错误 昨天晚上稍微有点忙就忘记了更新,不好意思;但是今天下午我同步了一下更新,但在启动过程中遇到了一个致命错误 不过幸运的是程序成功识别到了这个错误并且帮我打包了您所有可能需要的错误日志,详细请看附件

在此之前我已经例行完成了双清(好吧,我已经习惯这么叫了)数据库的操作,但依然收到了这个错误 并且您可以在文档中心提示一下该如何退出这个错误页面,反正目前我C+C按着没反应

shuakami commented 1 month ago

您好。是因为我忘记更新config.py导致的。但现在我已经进行了非常多的重构和修改(总体大概需要2天左右才能完成),如果现在给您最新的config.py似乎也没有作用了。所以推荐您手动在config.py(104行)处添加:

MEMORY_BATCH_SIZE = test_config.get("memory_batch_size", 6)
# 在这一行的上面添加
REQUEST_TIMEOUT= test_config.get("request_timeout", 7)
xiaoyueyoqwq commented 1 month ago

您好。是因为我忘记更新config.py导致的。但现在我已经进行了非常多的重构和修改(总体大概需要2天左右才能完成),如果现在给您最新的config.py似乎也没有作用了。所以推荐您手动在config.py(104行)处添加:

MEMORY_BATCH_SIZE = test_config.get("memory_batch_size", 6)
# 在这一行的上面添加
REQUEST_TIMEOUT= test_config.get("request_timeout", 7)

了解,不过我可以继续等待下一次更新合并再一起测试,期待您的作品