最近在学习agent设计,提炼了些疑问
agent需要什么记忆? 目前context有100M了而且可能越来越大,还有压缩技术,单个任务可能就不需要额外记忆吧。跨任务的、跨几天的是叫短期记忆?跨月的、跨季的、跨年的,是叫长期记忆?
什么时候存怎么存记忆?一轮对话存一次,还是一个任务存一次?怎么存?用LLM来压缩为摘要?
收么时候怎么用记忆?这个是最大的疑问,agent需要几个月前的数据吗,它什么时候会想到要调用一下记忆呢?有些时候需要用户个人信息的时候会需要
丢给ai看看会有什么回答
2 个赞
解决方案有很多,看你想怎么用,个人认为比较简单的方式是可以创建一个 MEMORY.md 和 HISTORY.md 文件对长短期记忆分别管理
对于对话过程中产生的关键信息,比如 “我喜欢吃苹果”,这属于长期记忆,llm 识别到后就添加到 MEMORY.md,然后通过提示词注入的方式拼接到系统提示词
对于上下文信息的整理,比如最近的历史对话,可以选择将所有内容都增量更新的方式添加到 HISTORY.md,然后 llm 自己通过 gerp / glob 进行搜索
或者如果觉得这样太浪费空间也可以对最近的对话进行摘要在存到 HISTORY.md 中,最好是一个 xml 的结构化摘要,记录一些关键信息,比如正在讨论内容是什么、之前提到过那些内容等等
生成摘要其实就是上下文压缩,可以创建一个可配置项,像 iflow cli,就是到达模型上下文的 80% token 数时自动压缩,其实就是利用剩下的上下文对前面的所有内容进行摘要,然后将这份摘要作为新的上下文输入,这样就可以空出一大段上下文了
3 个赞
OpenViking
1 个赞