-
Notifications
You must be signed in to change notification settings - Fork 121
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
探讨:三种格式的“memory”的联系(TXT,CSV,JSON) #21
Comments
这是一个很好的问题。 首先第一个问题是为什么使用txt格式的文件,因为该项目的用户不全是会编程的,其他格式或多或少会存在一些格式问题,在此前的项目中有统一使用json的,但是发现用户经常会打错中英文逗号或者冒号双引号,导致程序出错,所以后续都改为txt,方便普通用户进行自定义。 第二个问题是为什么使用csv,你可以把csv看作是一个简易的数据库,同时csv也是深度学习领域比较常用的格式,比较方便相关的库读取和处理。这个文件储存的是聊天上下文存不下的记忆,以embedding和文本的方式存储下来,当下次聊天想要调取这部分记忆时,会根据embedding计算相关性,当相关性足够高时,会把对应的文本引入到聊天上下文里。 当记忆文件存在时,很可能已经有了相当一部分用户和AI的聊天记录,所以此时默认是不覆盖的。 json文件是完整的聊天记录,而csv是AI总结过的聊天记忆,一个是记录,一个是记忆。json文件的存在仅仅是为了程序能够更方便地处理聊天上下文。 再从更高层次解释一下这么设计的原因。我们都知道LLM能够处理的上下文是有限的,所以我区分了短期记忆和长期记忆,短期记忆是完整的,但是有限的,长期记忆是总结性的,但是没有限制。当聊天时,会给短期记忆和长期记忆各分配一些token数,长期记忆会在聊天过程中动态地查询出来,放入上下文中。上述所说的这些看起来比较奇怪的设计,就是为了解决LLM token数不够的问题。 希望能够回答你的问题。 |
谢谢您的关注和回答,看了之后我了解了您的设计意图和原因,但我还是没有想明白为什么会有“记忆数据库存在,不导入记忆”这个设计,还是劳烦您解释一下“记忆数据库存在,不导入记忆”的原因,可以简单解释一下之后程序是通过什么样的大致流程继续工作的吗? |
必须佩服您对LLM的理解与设计能力,虽然用途上偏向娱乐化,但没想到内核如此之硬 |
可能我的log表述存在歧义,导入记忆,这个记忆指的是在 所以“记忆数据库存在,不导入记忆”的确切含义是,已经存在一个记忆数据的csv文件,就不再重新从 这部分确实有歧义。 |
是的,return内容为空,我认为可以在下个版本可以调整为“非第一次运行,不再读取初始人设记忆 xxx.txt ,记忆将由聊天记录与对应数据库继承。”同时可以考虑下个版本提出一些安全的清空记录方式,貌似手动删除会有些问题? |
一句话,太酷了,吹爆,没想到内核如此之硬 |
那请问如果想清空聊天记录是不是只需要清空csv文件和json文件即可 |
对”xxx记忆.txt“的内容 |
对的 |
首先记忆这个概念是经过总结的,就像人的记忆一样,因为上下文的限制,我对记忆的设计目的就是,他能够大体记住一些设定即可,太过具体会导致一次能提取到的记忆有限,因为上下文有限。 |
我能否直接修改csv文件以植入记忆?embedding怎么处理?还是说把csv删掉然后改txt让她重新生成csv会比较好一点? |
研究源码与运行过程中注意到项目中一个有趣的现象:储存“AI记忆”(聊天记录)一共用了三种格式:txt,csv,json。
其中txt格式用于第一次运行,之后会产生一个csv格式的聊天记录文件,之后所有的聊天内容都同意使用json格式记录。我想知道的是:csv格式文件在这里起一个什么作用?这段代码中明确表示,如果csv文件存在,便不导入记忆,指的是不导入哪种格式的记忆?那么json格式的历史记录的意义是?
The text was updated successfully, but these errors were encountered: