LLM的信息记忆交互是个非常值得研究的课题。
虽然Langchain在持续不断抽象解决这个问题,但可能还需要一定时间才能做的更好。
以下是我自己的一些认识:
1、滚动窗口,设定一个滚动窗口,LLM记的住窗口内部的内容,这种更像是一种缓存机制
2、对历史对话不断总结,比如针对Q1A1-Q2A2....做summary,但信息会有折损
3、对消息进行外部存储,通过提问和上下文做召回,将召回内容返回给LLM的对话窗口以便使用
这种工程化作业就很多了,用矢量库的,或者redis的,各种各样。多半知识库也是利用这个
4、还有很多有意思的工程,比如replika设定的mark,可以让用户主动标记某个消息,如用户的生日,构成外部优先级比较高的存储信息
目前从整体方法上讲虽然就这些,但实际上的使用要区分场景和实施细节,结果会完全不一样。
比如一条信息,到底是以实体的方式存储维护,还是单单是一个单纯的文本,亦或是构建成知识图谱三元组?这些往往要因场景和预期效果而定。对token消耗,响应时间,召回效果上做不可能三角的平衡,用到的Langchain的方法也不太一样(比如下图)
这里有一个将Langchain翻译过的中文站,之前看过一些,感觉工程上还是有非常非常多细节的。
https://t.co/aL8Cvd70Pu
点击图片查看原图