Skip to content
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

Open
tYaKko opened this issue May 31, 2023 · 11 comments
Open

探讨:三种格式的“memory”的联系(TXT,CSV,JSON) #21

tYaKko opened this issue May 31, 2023 · 11 comments

Comments

@tYaKko
Copy link

tYaKko commented May 31, 2023

研究源码与运行过程中注意到项目中一个有趣的现象:储存“AI记忆”(聊天记录)一共用了三种格式:txt,csv,json。
其中txt格式用于第一次运行,之后会产生一个csv格式的聊天记录文件,之后所有的聊天内容都同意使用json格式记录。我想知道的是:csv格式文件在这里起一个什么作用?这段代码中明确表示,如果csv文件存在,便不导入记忆,指的是不导入哪种格式的记忆?那么json格式的历史记录的意义是?
image

@Syan-Lin
Copy link
Owner

这是一个很好的问题。

首先第一个问题是为什么使用txt格式的文件,因为该项目的用户不全是会编程的,其他格式或多或少会存在一些格式问题,在此前的项目中有统一使用json的,但是发现用户经常会打错中英文逗号或者冒号双引号,导致程序出错,所以后续都改为txt,方便普通用户进行自定义。

第二个问题是为什么使用csv,你可以把csv看作是一个简易的数据库,同时csv也是深度学习领域比较常用的格式,比较方便相关的库读取和处理。这个文件储存的是聊天上下文存不下的记忆,以embedding和文本的方式存储下来,当下次聊天想要调取这部分记忆时,会根据embedding计算相关性,当相关性足够高时,会把对应的文本引入到聊天上下文里。

当记忆文件存在时,很可能已经有了相当一部分用户和AI的聊天记录,所以此时默认是不覆盖的。

json文件是完整的聊天记录,而csv是AI总结过的聊天记忆,一个是记录,一个是记忆。json文件的存在仅仅是为了程序能够更方便地处理聊天上下文。

再从更高层次解释一下这么设计的原因。我们都知道LLM能够处理的上下文是有限的,所以我区分了短期记忆和长期记忆,短期记忆是完整的,但是有限的,长期记忆是总结性的,但是没有限制。当聊天时,会给短期记忆和长期记忆各分配一些token数,长期记忆会在聊天过程中动态地查询出来,放入上下文中。上述所说的这些看起来比较奇怪的设计,就是为了解决LLM token数不够的问题。

希望能够回答你的问题。

@tYaKko
Copy link
Author

tYaKko commented May 31, 2023

谢谢您的关注和回答,看了之后我了解了您的设计意图和原因,但我还是没有想明白为什么会有“记忆数据库存在,不导入记忆”这个设计,还是劳烦您解释一下“记忆数据库存在,不导入记忆”的原因,可以简单解释一下之后程序是通过什么样的大致流程继续工作的吗?

@tYaKko
Copy link
Author

tYaKko commented May 31, 2023

必须佩服您对LLM的理解与设计能力,虽然用途上偏向娱乐化,但没想到内核如此之硬

@Syan-Lin
Copy link
Owner

可能我的log表述存在歧义,导入记忆,这个记忆指的是在 记忆.txt 这部分人工设定的记忆,并非指的是我所说的长期记忆。这部分的原因我已经阐述过了,如果重新导入会导致记忆的覆盖或存在多条同样的记忆,影响模型最终的效果。

所以“记忆数据库存在,不导入记忆”的确切含义是,已经存在一个记忆数据的csv文件,就不再重新从 记忆.txt 文件里构造一系列记忆数据存入了,并非在后续程序中不再使用长期记忆。后续程序中仍然会读取该csv文件,并进行相应的读取和操作。

这部分确实有歧义。

@tYaKko
Copy link
Author

tYaKko commented May 31, 2023

是的,return内容为空,我认为可以在下个版本可以调整为“非第一次运行,不再读取初始人设记忆 xxx.txt ,记忆将由聊天记录与对应数据库继承。”同时可以考虑下个版本提出一些安全的清空记录方式,貌似手动删除会有些问题?

@tYaKko
Copy link
Author

tYaKko commented May 31, 2023

一句话,太酷了,吹爆,没想到内核如此之硬

@tYaKko tYaKko closed this as completed May 31, 2023
@tYaKko tYaKko reopened this May 31, 2023
@GEJXD
Copy link

GEJXD commented May 31, 2023

那请问如果想清空聊天记录是不是只需要清空csv文件和json文件即可

@D1654
Copy link

D1654 commented Jun 2, 2023

对”xxx记忆.txt“的内容
项目自带的记忆文件,它的格式是设定的形式。实际当中粘贴大量相关剧情说明形式的文本,一段文字一条记忆,似乎也可以被利用,但有一定的效率降低的体感。
项目自带”xxx记忆.txt“文件应该属于推荐格式,但对复杂设定有些不够用,叙事说明之类文体有没有范本?
一行多少字以内为宜?

@Syan-Lin
Copy link
Owner

Syan-Lin commented Jun 3, 2023

那请问如果想清空聊天记录是不是只需要清空csv文件和json文件即可

对的

@Syan-Lin
Copy link
Owner

Syan-Lin commented Jun 3, 2023

对”xxx记忆.txt“的内容 项目自带的记忆文件,它的格式是设定的形式。实际当中粘贴大量相关剧情说明形式的文本,一段文字一条记忆,似乎也可以被利用,但有一定的效率降低的体感。 项目自带”xxx记忆.txt“文件应该属于推荐格式,但对复杂设定有些不够用,叙事说明之类文体有没有范本? 一行多少字以内为宜?

首先记忆这个概念是经过总结的,就像人的记忆一样,因为上下文的限制,我对记忆的设计目的就是,他能够大体记住一些设定即可,太过具体会导致一次能提取到的记忆有限,因为上下文有限。

@dakkor
Copy link

dakkor commented Jun 19, 2023

我能否直接修改csv文件以植入记忆?embedding怎么处理?还是说把csv删掉然后改txt让她重新生成csv会比较好一点?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants