LangFriend:一款具有长期记忆功能的日记
原文:https://blog.langchain.dev/langfriend/?t=ZMdNze4qQKvNzUMHPhQRfg
LangChain非常关注记忆这个概念,我们习惯于创建示例应用以展现我们所关注的概念。对于记忆,我们选择了创建一个日记应用(LangFriend)!我们向任何人提供了一个可尝试的版本,并且已经开始与一些早期用户开发面向开发者的API。如果您对这个感兴趣,请在下方报名参与。
主要链接:
💡我们还计划与New Computer, MongoDB和Anthropic一起,在2024年4月6日举办一个与记忆相关的黑客马拉松。您可以在[这里]报名参与。
我们对LLM系统中记忆这个部分寄予厚望。生成AI的大部分能量来自于其能够随时生成独特内容的能力,这对于定制用户体验来说非常强大。这不仅可以通过获取已有的有关用户信息,还可以通过记住之前与用户的交互并从中学习来实现。
就是这种”记忆”型的探索让我们充满了期待。我们认为用户与LLM之间的交互会越来越多 —— 聊天机器人正成为LLM应用的主要形式。这意味着越来越多的有价值的用户信息将会在这些对话中交换 – 比如一个人的喜好或厌恶,他们的朋友是谁,他们的目标是什么等等。学习并理解这些属性,然后将它们融入应用,可以大大改善用户的体验。
在探索记忆的过程中,我们认为结合一个具体的用例例子,会对我们的工作起到很好的激励和引导作用。于是我们选择了创建一个日记应用。我们将这个应用命名为”LangFriend”,并在今天向公众开放使用。虽然现在这只是一个小小的研究预览版本,但我们希望收集到社区的反馈,了解哪些地方做的好,哪些地方还需要改进,之后再将其开源。
在这篇文章中,我们会谈论关于记忆的一些学术研究,其他一些公司在相关领域做的有趣的事情,以及我们为什么选择专注于开发日记应用。我们随后会深度洞察这个日记应用,展示其功能。如果您有兴趣与我们一起探索记忆,欢迎与我们取得联系。
学术研究
在我们从事记忆研究的过程中,找到了两篇对我们工作非常有启发的学术论文。
首先是一篇来自加州大学伯克利分校的研究者们的[MemGPT]。这篇论文的关键理念是,他们让LLM具备了执行几个功能的能力,如记住一些具体的事实,回顾相关的事项等等。
大型语言模型(LLMs)已经彻底地革新了AI,但是,受限于有限的上下文窗口,阻碍了AI在像冗长的对话和文档分析等任务中的实用性。为了解决这个问题,我们提出了一种叫做虚拟上下文管理的技术,灵感源于传统操作系统中的分层记忆系统,这些系统利用在物理记忆和磁盘之间进行调度的方式,实现了无限扩展的虚拟记忆的效果。利用这种技术,我们开发出了MemGPT(记忆GPT),这是一种能有效地提供LLM有限上下文窗口内扩展上下文的存储层管理系统。
另一篇是来自斯坦福大学研究者们的[生成代理]。这篇论文的关键理念是,他们通过反思过往的经验形成记忆,然后将记忆存储并以编程方式进行检索。
我们通过实证研究证明了我们的代理架构经过观察、计划、反思等各个环节的工作,每个部分都对生成代理的行为的准确性产生了重要的影响。通过将大型语言模型与计算交互代理融合,我们在这项工作中引入了生成准确模拟人类行为的架构和交互模式。
这两篇论文中一个有趣的区别是LLM主动使用记忆的程度与它更多地作为一个后台过程来进行的程度。MemGPT迫使LLM使用记忆功能,而生成代理则更像背景进程。
公司
有几家公司在内存技术领域有着杰出的表现。
Plastic Labs 是一家专注于开发诸如[TutorGPT]的创新项目的初创公司。
LangChain LLM应用。这是一个针对理论思维辅导的动态元提示功能。
[Good AI] 则是一家新近开源了一个具备长期记忆功能的聊天助手的初创公司。
乍一看,Charlie可能与现有的LLM代理如ChatGPT,Claude和Gemini相似。然而,其独特之处在于其引入了LTM的实现,让它能够从每次互动中学习。这包括将用户消息、助手响应和环境反馈存储并整合进LTM,以便在需要的时候进行相关任务的查询。
OpenAI最近也将记忆功能整合进了ChatGPT。
从这些公司的视角看,实现内存功能有两种方式:一种是LLM必须有意识调用的主动方式(如ChatGPT),另一种是自动融合为背景过程的被动方式(如TutorGPT),它们之间存在着不同。
为什么选择日记APP?
当考虑一个好的场景去实现和测试长期记忆时,一个日记APP立即跃入我们的思绪。主要的原因是,我们认为这款APP所包含的互动信息会比常规聊天应用有更多的相关信息需要被记住。
与普通的聊天应用相比,后者可能会有很多不需要记忆的日常寒暄 – “嘿!”,”你好”,”最近怎么样”等等。而在日记类应用中,你更容易达到分享真实,有趣的情感和见解的阶段。
尽管如此 – 我们还是希望在这款APP中增加一个聊天组件。主要的原因是,我们想要展示出我们的应用是能够学习和记忆用户信息的。这款应用会利用这些信息来为用户生成个性化的响应。
你可以看到这款应用记住了我是意大利美食的爱好者,也记住了我锻炼后会感到精神焕发。
在你添加第一篇日记并与我们的陪伴者对话后,你会在导航栏看到一个 “Memories” 按钮。点击它,你就会看到我们从你的日记中提取出的所有主要记忆。
你会发现列表简洁明了,信息量并不大。这些仅仅是我们提取的最重要的一些基本信息。其实在幕后,我们从你的日志中提取出了比这更多的信息,你可以通过搜索查找它们!
在 “搜索记忆…(Search memories…)” 的输入框中开始输入,你就能实时地看到LangFriend存储的关于你的各种各样的信息:
自定义
我们期望让 LangFriend 对所有用户都具有吸引力。因此,我们允许用户调整系统消息,这些消息将作为和我们的聊天伙伴所有聊天的开始和基调。我们提供了一个默认的设置,经过精心设计,以满足大多数用户的需求。然而,如果你期望的东西稍微不同,或者完全不同,你可以根据你的喜好改变任何部分。
你可以找到并更新系统提示,方法是访问“日志”页面,然后点击“配置”按钮。在这里,一个包含你的系统提示的对话框将会弹出。
你做的任何更改都将在各个会话之间保持,成为你未来所有聊天对话的开始!
结论
LangFriend 是一个一瞥未来的研究预演,展示了将长期记忆并入 LLM 应用的巨大潜力。我们通过专注开发记事应用,旨在获取有意义的用户信息,以提供个性化的回复并提升用户体验。LangFriend 出色地展示了我们如何积极地利用记忆或作为背景过程并入应用,创建令人着迷和适应变化的互动体验。我们热烈邀请社区参与探索 LangFriend,提供反馈,和我们一起推动 LLM 应用中记忆的可能性,挖掘生成性AI的所有潜力,为用户提供更强大、更个性化、更有价值的体验。