MemoryScope
为您的大语言模型聊天机器人配备强大且灵活的长期记忆系统。
📰 新闻
[2024-09-10] 我们现在发布了 MemoryScope v0.1.1.0,该版本也可以在 PyPI 上获取!
🌟 什么是MemoryScope?
MemoryScope可以为LLM聊天机器人提供强大且灵活的长期记忆能力,并提供了构建长期记忆能力的框架。 MemoryScope可以用于个人助理、情感陪伴等记忆场景,通过长期记忆能力来不断学习,记得用户的基础信息以及各种习惯和喜好,使得用户在使用LLM时逐渐感受到一种“默契”。
Demo
核心框架:
💾 记忆数据库: MemoryScope配备了向量数据库(默认是ElasticSearch),用于存储系统中记录的所有记忆片段。
🔧 核心worker库: MemoryScope将长期记忆的能力原子化,抽象成单独的worker,包括query信息过滤,observation抽取,insight更新等20+worker。
🛠️ 核心Operation库: MemoryScope将workers组织为工作流(workflow),构建了处理记忆的完善Operation库,实现了记忆检索,记忆巩固等核心能力。
记忆检索:当用户输入对话,此操作返回语义相关的记忆片段。如果输入对话包含对时间的指涉,则同时返回相应时间中的记忆片段。
记忆巩固:此操作接收一批用户的输入对话,并从对话中提取重要的用户信息,将其作为 observation 形式的记忆片段存储在记忆数据库中。
反思与再巩固:每隔一段时间,此操作对新记录的 observations 进行反思,以形成和更新 insight 形式的记忆片段。然后执行记忆再巩固,以确保记忆片段之间的矛盾和重复得到妥善处理。
⚙️ 最佳实践:
MemoryScope在构建了长期记忆核心能力的基础上,实现了带长期记忆的对话接口(API)和带长期记忆的命令行对话实践(CLI)。
MemoryScope结合了目前流行的Agent框架(AutoGen、AgentScope),给出了最佳实践。
🤝主要特点
⚡ 极低的线上时延(RT):
系统中后端操作(记忆巩固、反思和再巩固)与前端操作(记忆检索)相互独立。
由于后端操作通常(并且推荐)通过队列或每隔固定间隔执行,系统的用户时延(RT)完全取决于前端操作,仅为约500毫秒。
🌲 记忆存储的层次结构和内容的连贯一致性:
系统中存储的记忆片段采用分层结构,通过汇总主题相似的 observations 生成高层次的 insights 信息。
定期处理记忆片段之间的矛盾和重复,以保证记忆内容的连贯一致性。
过滤掉用户输入的虚构内容,以避免LLM产生幻觉。
⏰ 时间敏感性:
在执行记忆检索和记忆巩固时具备时间敏感性,因此在输入对话包含对时间的指涉时,可以检索到准确的相关信息。
💼 支持的模型API
Backend |
Task |
Some Supported Models |
---|---|---|
openai_backend |
Generation |
gpt-4o, gpt-4o-mini, gpt-4, gpt-3.5-turbo |
Embedding |
text-embedding-ada-002, text-embedding-3-large, text-embedding-3-small |
|
dashscope_backend |
Generation |
qwen-max, qwen-plus, qwen-plus, qwen2-72b-instruct |
Embedding |
text-embedding-v1, text-embedding-v2 |
|
Reranker |
gte-rerank |
未来将支持更多的模型接口和支持本地部署的LLM和emb服务
🚀 安装
完整的安装方法请参考安装指南。
🍕 快速开始
💡 代码贡献
欢迎社区的代码贡献。
我们非常推荐每一个贡献者在代码提交前,安装pre-commit
钩子工具,
能够帮助在每一次git提交的时候,进行自动化的代码格式校验。
pip install -e .
pre-commit install
请参阅我们的贡献指南 了解更多详细信息。
📖 引用
如果您在论文中有使用该项目,请添加以下引用:
@software{MemoryScope,
author = {Li Yu and
Tiancheng Qin and
Qingxu Fu and
Sen Huang and
Xianzhe Xu and
Zhaoyang Liu and
Boyin Liu},
month = {09},
title = {{MemoryScope}},
url = {https://github.com/modelscope/MemoryScope},
year = {2024}
}