MemoryScope:为LLM聊天机器人配备的长期记忆系统

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 如何选择合适的方法构建自己的智能体助理呢?这里向您介绍强大、低延迟、安全可控的MemoryScope开源项目。

01

前言

记忆连接着人的过去与现在,塑造着人的身份和经验。每个人的记忆都是独一无二的,记忆存储着经历和知识,帮助人类不断提升与突破自我。如果在生活工作中,能有一个AI助手能像朋友一样,记住我们的喜好、习惯,甚至是微小的细节,提高工作效率必不在话下。

面对当下RAG( Retrieval-Augmented Generation)与各类Memory Management框架蓬勃发展的景象,构建一个既强大又个性化的智能体助手似乎成了技术探索中的新蓝海。要想在众多技术路线中找到那个“最优解”,关键在于识别那些能够平衡性能、灵活性及安全性的解决方案。

如何选择合适的方法构建自己的智能体助理呢?这里向您介绍强大、低延迟、安全可控的MemoryScope开源项目。MemoryScope可以为LLM聊天机器人提供强大且灵活的长期记忆能力,并提供了构建长期记忆能力的框架。MemoryScope可以用于个人助理、情感陪伴等记忆场景,通过长期记忆能力来不断学习,记得用户的基础信息以及各种习惯和喜好,使得用户在使用LLM时逐渐感受到一种“默契”。

与其他的RAG和记忆框架相比,MemoryScope具有⚡极低的线上时延(约500毫秒)、🌲分层记忆存储能力和⏰处理时间敏感性记忆的能力。

欢迎关注MemoryScope,在Github上(https://github.com/modelscope/memoryscope) 为我们star 🌟。

02

介绍MemoryScope

image.png

MemoryScope核心包含以下三个部分:

💾 记忆数据库: MemoryScope配备了向量数据库(默认是ElasticSearch),用于存储系统中记录的所有记忆片段。

🔧 Worker库: MemoryScope将长期记忆的能力原子化,抽象成单独的worker,包括信息过滤、记忆抽取,insight更新等20+Worker。

🛠️ 记忆算子库: 每个记忆算子把多个Worker集成在一起,形成完整的记忆工作流,从而构建MemoryScope核心服务,实现“记忆检索”,“记忆巩固”,“反思与再巩固”等核心能力。

欢迎关注MemoryScope,在Github上(https://github.com/modelscope/memoryscope) 为我们star 🌟。

03

MemoryScope Application构建 101

MemoryScope支持在线模型调用,不需要本地显卡,因此即使普通笔记本电脑也可以运行。我们推荐使用Docker或者Docker Compose运行MemoryScope,其他更多安装方法请参考https://github.com/modelscope/MemoryScope/blob/main/docs/installation_zh.md

1. 三步运行MemoryScope的Demo

先决条件:

  • 大模型:推荐注册并使用DashScope平台,无需特殊网络环境即可运行多种模型。
  • 硬件和操作系统要求:任意操作系统(Linux,Windows,MacOS)均可,已安装Docker以及Docker-Compose。(如果是ARM架构,还需要手动将docker-compose.yml中的`ghcr.io/modelscope/memoryscope:main`修改成`ghcr.io/modelscope/memoryscope_arm:main` )
  • 部署方法:推荐使用docker或者docker-compose体验MemoryScope。
# 下载memoryscope仓库
git clone https://github.com/modelscope/memoryscope
# 填写DashScope API-KEY
vim memoryscope/docker-compose.yml
# 运行!(P.S. 实现双窗口监控实时memory,请参考https://github.com/modelscope/MemoryScope/blob/main/docs/installation_zh.md)
docker-compose run memory_scope_main

image.png

2. 在Python项目中灵活运用MemoryScope

先决条件:

  • 大模型:推荐注册并使用DashScope平台,无需特殊网络环境即可运行多种模型。
  • Python 3.10 及以上版本

2.1. 通过PyPI包在自定义项目中调用

MemoryScope可以被灵活地嵌入到各种Python项目。要在自己的项目中使用MemoryScope,只需要import memoryscope即可。

i. 从PyPI安装MemoryScope。然后运行 Elasticsearch 服务存储记忆数据,请参照 [Elasticsearch 文档](https://www.elastic.co/guide/cn/elasticsearch/reference/current/getting-started.html)。

这里推荐使用 Docker 方法:

pip install memoryscope
sudo docker run -p 9200:9200 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=false" \
  -e "xpack.license.self_generated.type=trial" \
  docker.elastic.co/elasticsearch/elasticsearch:8.13.2

ii. 将DashScope或者Openai密钥等私密变量导入环境变量

# dashboard
export DASHSCOPE_API_KEY="sk-0000000000"
# openai
export OPENAI_API_KEY="sk-000000000000000000000"
# openai base url
export OPENAI_API_BASE="https://00000.0000.000/v1"

iii. 初始化memory scope实例

from memoryscope import MemoryScope, Arguments
arguments = Arguments(
    language="cn",
    human_name="用户",
    assistant_name="AI",
    memory_chat_class="api_memory_chat",
    generation_backend="dashscope_generation",
    generation_model="qwen2-72b-instruct",
    embedding_backend="dashscope_embedding",
    embedding_model="text-embedding-v2",
    rank_backend="dashscope_rank",
    rank_model="gte-rerank",
    enable_ranker=True,
    worker_params={"get_reflection_subject": {"reflect_num_questions": 3}}
)
ms = MemoryScope(arguments=arguments)
ms.default_memory_service.init_service()

iv. 与memoryscope对话

qs = [
    "I love playing the piano.", 
    "I work at Alibaba.", 
    "I really like eating watermelon.", 
    "Tomorrow I plan to go to Beijing for a business trip.", 
    "What fruit is good to eat this afternoon?", 
]
for query in qs:
    # 抽取之前的记忆,并对话
    response = memory_chat.chat_with_memory(query)
    print(query, '\n', response.message.content)
    # 巩固对新产生的对话的记忆
    result = memory_service.consolidate_memory()
    # 列举当前存储的记忆
    print(memory_chat.run_service_operation("list_memory"))
# 记忆的反思与再巩固
result = memory_service.reflect_and_reconsolidate()

2.2. 结合AutoGen使用MemoryScope

AutoGen是一个强大的多智能体互动与组织框架。MemoryScope可以用来管理智能体的记忆能力,增强AutoGen智能体的基础能力。一个简单的AutoGen增强智能体的实例如下:

class MemoryScopeAgent(ConversableAgent):
    def __init__(
            self,
            name: str = "assistant",
            system_message: Optional[str] = "",
            human_input_mode: Literal["ALWAYS", "NEVER", "TERMINATE"] = "NEVER",
            llm_config: Optional[Union[Dict, bool]] = None,
            arguments: Arguments = None,
            **kwargs,
    ):
        super().__init__(
            name=name,
            system_message=system_message,
            human_input_mode=human_input_mode,
            llm_config=llm_config,
            **kwargs,
        )
        # Create a memory client in MemoryScope
        self.memory_scope = MemoryScope(arguments=arguments)
        self.memory_chat = self.memory_scope.default_memory_chat
        self.register_reply([Agent, None], MemoryScopeAgent.generate_reply_with_memory, remove_other_reply_funcs=True)
    def generate_reply_with_memory(
            self,
            messages: Optional[List[Dict]] = None,
            sender: Optional[Agent] = None,
            config: Optional[Any] = None,
    ) -> Tuple[bool, Union[str, Dict, None]]:
        # Generate response
        contents = []
        for message in messages:
            if message.get("role") != self.name:
                contents.append(message.get("content", ""))
        query = contents[-1]
        response = self.memory_chat.chat_with_memory(query=query)
        return True, response.message.content
    def close(self):
        self.memory_scope.close()

接下来,只需要将memoryscope的参数传入上面定义的`MemoryScopeAgent`,就能够成功运行被MemoryScope增强的AutoGen了:

from typing import Optional, Union, Literal, Dict, List, Any, Tuple
from autogen import Agent, ConversableAgent, UserProxyAgent
from memoryscope import MemoryScope, Arguments
from where_you_define_the_new_agent import MemoryScopeAgent
def main():
    # Create the agent of MemoryScope
    arguments = Arguments(
        language="cn",
        human_name="用户",
        assistant_name="AI",
        memory_chat_class="api_memory_chat",
        generation_backend="dashscope_generation",
        generation_model="qwen-max",
        embedding_backend="dashscope_embedding",
        embedding_model="text-embedding-v2",
        rank_backend="dashscope_rank",
        rank_model="gte-rerank"
    )
    assistant = MemoryScopeAgent("assistant", arguments=arguments)
    # Create the agent that represents the user in the conversation.
    user_proxy = UserProxyAgent("user", code_execution_config=False)
    # Let the assistant start the conversation.  It will end when the user types exit.
    assistant.initiate_chat(user_proxy, message="有什么需要帮忙的吗?")
    assistant.close()
if __name__ == "__main__":
    main()

P.S. 另外,我们提供并持续更新更多案例,请参考项目demo: https://github.com/modelscope/MemoryScope/tree/main/examples/api

04

长期关注MemoryScope

MemoryScope正在经历飞速的成长与发展,我们诚挚邀请您持续关注我们的进展。

我们热烈欢迎更多对此领域充满热情的开发者加入我们的社群,携手共进。如果您希望通过贡献代码来共同塑造一个强大的RAG和Memory框架,那么,请不要犹豫,MemoryScope开发者社区正是理想平台,期待与您的加入!

@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}
}

欢迎访问项目:https://github.com/modelscope/memoryscope为 MemoryScope 点亮star🌟。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
9天前
|
Ubuntu 机器人 Linux
|
4月前
|
传感器 人工智能 算法
适应多形态多任务,最强开源机器人学习系统八爪鱼诞生
【6月更文挑战第6天】【八爪鱼开源机器人学习系统】由加州大学伯克利分校等机构研发,适用于多形态多任务,已在arXiv上发表。系统基于transformer,预训练于800k机器人轨迹数据集,能快速适应新环境,支持单臂、双机械臂等。特点是多形态适应、多任务处理、快速微调及开源可复现。实验显示其在9个平台有效,但仍需改进传感器处理和语言指令理解。论文链接:https://arxiv.org/pdf/2405.12213
92 1
|
9天前
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
|
9天前
|
机器人
【ROS速成】半小时入门机器人ROS系统简明教程之安装测速(二)
半小时入门机器人ROS系统简明教程之安装测速
|
2月前
|
前端开发 Linux API
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
【8月更文挑战第3天】无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
无缝融入,即刻智能[一]:Dify-LLM大模型平台,零编码集成嵌入第三方系统,42K+星标见证专属智能方案
|
4月前
|
存储 人工智能 自然语言处理
LangChain让LLM带上记忆
最近两年,我们见识了“百模大战”,领略到了大型语言模型(LLM)的风采,但它们也存在一个显著的缺陷:没有记忆。在对话中,无法记住上下文的 LLM 常常会让用户感到困扰。本文探讨如何利用 LangChain,快速为 LLM 添加记忆能力,提升对话体验。
49798 7
LangChain让LLM带上记忆
|
5月前
|
机器学习/深度学习 自然语言处理 搜索推荐
【大模型】LLM与传统聊天机器人的区别是什么?
【5月更文挑战第4天】【大模型】LLM与传统聊天机器人的区别是什么?
|
5月前
|
传感器 算法 机器人
在实用化人形机器人控制系统中深入应用FPGA的框架设计(基于特斯拉Optimus-Gen2的硬件系统)
针对实用化人形机器人的控制系统,以深入应用FPGA技术为指导思想做了一个框架设计,提供一个具象化的设计实例、参考技术方案,协助各研发团队及相关决策者了解这一技术思路的价值。 进而,笔者希望读者将这个框架设计与《在实用化人形机器人研发流程中深入应用FPGA技术的流程图》结合起来进行分析、思考,希望: 进一步降低将FPGA深入应用于人形机器人在纯粹技术维度上的门槛; 助力更多正在人形机器人领域参与竞争的团队 -- 及时做出实质性决策,及时将更多资源分配到深入应用FPGA技术这一竞争维度。
256 4
在实用化人形机器人控制系统中深入应用FPGA的框架设计(基于特斯拉Optimus-Gen2的硬件系统)
|
5月前
|
人工智能 安全 机器人
AI电销机器人系统源码部署:freeswitch安装Windows
在Windows上安装FreeSWITCH:访问官网下载安装程序,运行并按提示安装;选择安装路径和组件;等待安装完成;配置FreeSWITCH,修改设置;启动服务;测试其功能;如遇问题,参考官方文档或进行调试故障排除。记得定期更新维护以保证稳定安全。
|
5月前
|
自然语言处理 算法 搜索推荐
基于LLM(Large Language Model,大语言模型)的智能问答系统
基于LLM(Large Language Model,大语言模型)的智能问答系统
515 6

热门文章

最新文章