Mem0 - 个人 AI 的内存层

news2024/9/22 21:17:48

在这里插入图片描述

文章目录

    • 一、关于 Mem0
      • 核心功能🔑
      • 路线图 🗺️
      • 常见用例
      • Mem0与RAG有何不同?
    • 二、快速入门 🚀
      • 1、安装
      • 2、基本用法(开源)
      • 3、高级用法🔧
      • 4、大模型支持
    • 三、MultiOn
      • 1、概览
      • 2、设置和配置
      • 4、将记忆添加到Mem0
      • 5、检索相关记忆
      • 6、浏览arxiv
      • 7、结论


一、关于 Mem0

Personalized AI 的内存层

Mem0为大型语言模型提供智能、自我改进的内存层,实现跨应用程序的个性化AI体验。

  • Mem0 Slack : https://mem0.ai/slack
  • 官方文档:https://docs.mem0.ai/overview
  • Mem0 Discord : https://mem0.ai/discord
  • Mem0 Twitter : https://x.com/mem0ai
  • Y Combinator S24 : https://www.ycombinator.com/companies/mem0
  • mem0ai npm package : https://www.npmjs.com/package/mem0ai
  • mem0ai Python package on PyPi : https://pypi.python.org/pypi/mem0ai

注意:Mem0存储库现在还包括Embedchain项目,我们继续维护和支持Embedchain❤️,您可以在嵌入链目录中找到Embedchain代码库。


核心功能🔑

  • 多级内存:用户、会话和AI代理内存保留
  • 自适应个性化:基于交互的持续改进
  • 开发人员友好的API:简单集成到各种应用程序中
  • 跨平台一致性:跨设备的统一行为
  • 托管服务:无忧的托管解决方案

路线图 🗺️

  • 与各种LLM提供商集成
  • 支持LLM框架
  • 与AI代理框架集成
  • 可定制的内存创建/更新规则
  • 托管平台支持

常见用例

  • 个性化学习助手:长期记忆允许学习助手记住用户偏好、过去的交互和进度,提供更量身定制和有效的学习体验。
  • 客户支持AI代理:通过保留以前交互中的信息,客户支持机器人可以提供更准确和上下文感知的帮助,提高客户满意度并缩短解决时间。
  • 医疗助理:长期记忆使医疗助理能够跟踪患者病史、用药时间表和治疗计划,确保个性化和一致的护理。
  • 虚拟同伴:虚拟同伴可以通过记住个人细节、偏好和过去的对话,利用长期记忆与用户建立更深层次的关系,使互动更有意义。
  • 生产力工具:长期记忆有助于生产力工具记住用户习惯、常用文档和任务历史记录,简化工作流程并提高效率。
  • 游戏AI:在游戏中,具有长期记忆的AI可以通过记住玩家的选择、策略和进度来创造更身临其境的体验,从而相应地调整游戏环境。

Mem0与RAG有何不同?

与检索增强生成(RAG)相比,Mem0的大型语言模型(LLM)内存实现提供了几个优势:

  • 实体关系:Mem0可以跨不同的交互理解和关联实体,不像RAG从静态文档中检索信息。这导致对上下文和关系的更深入理解。
  • 最近性、相关性和衰减:Mem0优先考虑最近的交互并逐渐忘记过时的信息,确保记忆保持相关和最新,以获得更准确的响应。
  • 上下文连续性:Mem0跨会话保留信息,保持对话和交互的连续性,这对于虚拟同伴或个性化学习助手等长期参与应用程序至关重要。
  • 自适应学习:Mem0根据用户交互和反馈改进其个性化,随着时间的推移使记忆更加准确并为个人用户量身定制。
  • 动态更新:Mem0可以使用新的信息和交互动态更新其内存,这与依赖静态数据的RAG不同。这允许实时调整和改进,增强用户体验。

这些先进的内存功能使Mem0成为旨在创建个性化和上下文感知AI应用程序的开发人员的强大工具。


二、快速入门 🚀


1、安装

pip install mem0ai

2、基本用法(开源)

如果您正在寻找托管版本并且不想自己设置基础设施,请查看Mem0平台文档以在几分钟内开始使用。

import os
from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "xxx"

# Initialize Mem0
m = Memory()

# Store a memory from any unstructured text
result = m.add("I am working on improving my tennis skills. Suggest some online courses.", user_id="alice", metadata={"category": "hobbies"})
print(result)
# Created memory: Improving her tennis skills. Looking for online suggestions.

# Retrieve memories
all_memories = m.get_all()
print(all_memories)

# Search memories
related_memories = m.search(query="What are Alice's hobbies?", user_id="alice")
print(related_memories)

# Update a memory
result = m.update(memory_id="m1", data="Likes to play tennis on weekends")
print(result)

# Get memory history
history = m.history(memory_id="m1")
print(history)


3、高级用法🔧

对于生产环境,您可以使用Qdrant作为矢量存储:

from mem0 import Memory

config = {
    "vector_store": {
        "provider": "qdrant",
        "config": {
            "host": "localhost",
            "port": 6333,
        }
    },
}

m = Memory.from_config(config)

4、大模型支持

更多可见:https://docs.mem0.ai/llms

这里以 openai 为例

要使用OpenAI LLM模型,必须设置OPENAI_API_KEY环境变量,可以从OpenAI平台获取OpenAI API密钥。

获得密钥后,您可以这样使用它:

import os
from mem0 import Memory

os.environ["OPENAI_API_KEY"] = "your-api-key"

config = {
    "llm": {
        "provider": "openai",
        "config": {
            "model": "gpt-4o",
            "temperature": 0.2,
            "max_tokens": 1500,
        }
    }
}

m = Memory.from_config(config)
m.add("Likes to play cricket on weekends", user_id="alice", metadata={"category": "hobbies"})

三、MultiOn

构建个人浏览器代理 会记住用户偏好 并自动执行Web任务。

它将用于内存管理的Mem0 与用于执行浏览器操作的MultiOn 集成在一起,从而实现个性化和高效的Web交互。

1、概览

在这个例子中,我们将创建一个基于浏览器的人工智能代理,在 arxiv.org 上搜索与用户研究兴趣相关的研究论文。

2、设置和配置

安装必要的库:

pip install mem0ai multion

首先,我们将导入必要的库并设置我们的配置。

import os
from mem0 import Memory
from multion.client import MultiOn

# Configuration
OPENAI_API_KEY = 'sk-xxx'  # Replace with your actual OpenAI API key
MULTION_API_KEY = 'your-multion-key'  # Replace with your actual MultiOn API key
USER_ID = "deshraj"

# Set up OpenAI API key
os.environ['OPENAI_API_KEY'] = OPENAI_API_KEY

# Initialize Mem0 and MultiOn
memory = Memory()
multion = MultiOn(api_key=MULTION_API_KEY)

4、将记忆添加到Mem0

接下来,我们将定义我们的用户数据并将其添加到Mem0。

# Define user data
USER_DATA = """
About me
- I'm Deshraj Yadav, Co-founder and CTO at Mem0, interested in AI and ML Infrastructure.
- Previously, I was a Senior Autopilot Engineer at Tesla, leading the AI Platform for Autopilot.
- I built EvalAI at Georgia Tech, an open-source platform for evaluating ML algorithms.
- Outside of work, I enjoy playing cricket in two leagues in the San Francisco.
"""

# Add user data to memory
memory.add(USER_DATA, user_id=USER_ID)
print("User data added to memory.")

5、检索相关记忆

现在,我们将定义搜索命令并从Mem0中检索相关内存。

# Define search command and retrieve relevant memories
command = "Find papers on arxiv that I should read based on my interests."

relevant_memories = memory.search(command, user_id=USER_ID, limit=3)
relevant_memories_text = '\n'.join(mem['text'] for mem in relevant_memories)
print(f"Relevant memories:")
print(relevant_memories_text)

6、浏览arxiv

最后,我们将使用MultiOn根据我们的命令和相关记忆浏览arxiv。

# Create prompt and browse arXiv
prompt = f"{command}\n My past memories: {relevant_memories_text}"
browse_result = multion.browse(cmd=prompt, url="https://arxiv.org/")
print(browse_result)

7、结论

通过将Mem0与MultiOn集成,您创建了一个个性化的浏览器代理,可以记住用户偏好并自动执行web任务。

有关更多详细信息和高级用法,请参阅完整recipe:https://github.com/mem0ai/mem0/blob/main/cookbooks/mem0-multion.ipynb 。


2024-07-23(二)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【嵌入式开发之并发程序设计】守护进程的定义、特点、相关概念及创建

守护进程的定义 守护进程(Daemon Process),又叫精灵进程、监控进程,是Linux三种进程类型之一,是 Linux 中的后台服务进程,是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事…

亚信安全与软银中国全资企业爱思比通信达成战略合作

近日,亚信安全携手软银集团旗下全资企业爱思比通信科技(上海)有限公司(以下简称“爱思比通信”) 共同宣布,双方正式签署战略合作协议。依托双方在技术、业务和资源三大层面的实力与优势,亚信安全…

2024-07-23 Unity AI行为树2 —— 项目介绍

文章目录 1 项目介绍2 AI 代码介绍2.1 BTBaseNode / BTControlNode2.2 动作/条件节点2.3 选择 / 顺序节点 3 怪物实现4 其他功能5 UML 类图 项目借鉴 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 项目介绍 ​ 本项目使用 Unity 2022.3.32f1c1,实现基…

韦东山嵌入式linux系列-查询方式的按键驱动程序_编写框架

1 LED 驱动回顾 对于 LED, APP 调用 open 函数导致驱动程序的 led_open 函数被调用。在里面,把 GPIO 配置为输出引脚。安装驱动程序后并不意味着会使用对应的硬件,而 APP 要使用对应的硬件,必须先调用 open 函数。所以建议在驱动…

算法-DFS搜索

题目一 解题思路 深度遍历剪枝优化 第r行,第i列能不能放棋子:用数组dg udg cor 分别表示:点对应的两个斜线以及列上是否有皇后。 边界问题: dg[i r] 表示 r行i列处,所在的对角线上有没有棋子 udg[n - i r]表示 r…

环信+亚马逊云科技服务:助力出海AI社交应用扬帆起航

随着大模型技术的飞速发展,AI智能体的社交体验得到了显著提升,AI社交类应用在全球范围内持续火热。尤其是年轻一代对新技术和新体验的热情,使得AI社交产品在海外市场迅速崛起。作为领先的即时通讯解决方案提供商,环信与亚马逊云科…

uni-app:踩坑路---scroll-view内使用fixed定位,无效的问题

前言: emmm,说起来这个问题整得还挺好笑的,本人在公司内,奋笔疾书写代码,愉快的提交测试的时候,测试跟我说,在苹果手机上你这个样式有bug,我倒是要看看,是什么bug。 安卓…

Golang | Leetcode Golang题解之第268题丢失的数字

题目: 题解: func missingNumber(nums []int) int {n : len(nums)total : n * (n 1) / 2arrSum : 0for _, num : range nums {arrSum num}return total - arrSum }

5.9 结构化开发方法

大纲 系统分析与设计概述(选择题 1 分) 结构化开发方法 系统分析阶段的主要工作 系统设计基本原理 内聚(主要考点)

【HarmonyOS学习】用户文件访问

概述 文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。 用户文件访问框架 是一套提供给开发者访问和管理用户文件的基础框…

深入Mysql-03-MySQL 表的约束与数据库设计

文章目录 数据库约束的概述约束种类主键约束唯一约束非空约束默认值外键约束 表与表之间的关系数据库设计 数据库约束的概述 对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无法插入到表中。 约束种类 …

java实现OCR图片识别,RapidOcr开源免费

先看一下识别效果(自我感觉很牛逼),比Tess4J Tesseract省事,这个还需要训练,安装软件、下载语言包什么的 很费事,关键识别率不高 RapidOcr不管文字的横竖,还是斜的都能识别(代码实现…

鸿蒙开发仓颉语言【在工程中使用Hyperion TCP框架】

3. 在工程中使用Hyperion TCP框架 3.1 导入Hyperion TCP框架的静态库 在工程的module.json中引入Hyperion TCP框架的静态库: "package_requires": {"package_option": {"hyperion_hyperion.buffer": "${path_to_hyperion_proj…

SpringBoot整合SSE技术详解

Hi 👋, Im shy SpringBoot整合SSE技术详解 1. 引言 在现代Web应用中,实时通信变得越来越重要。Server-Sent Events (SSE)是一种允许服务器向客户端推送数据的技术,为实现实时更新提供了一种简单而有效的方法。本文将详细介绍如何在SpringBoot中整合SSE,并探讨S…

java之回合制游戏以及如何优化

public class Role {private String name;private int blood;//空参public Role() {}//包含全部参数的构造public Role(String name, int blood) {this.name name;this.blood blood;}public String getName() {return name;}public void setName(String name) {this.name na…

单细胞生物都能学会的树莓派4B实现路由器

本文参考自CSDN用户羟基氟化宇的畅玩树莓派4B(二)树莓派搭建无线路由器(支持5GWIFI) 本文补充其中的细节及遇到的问题。 本文提及的代码,均需在树莓派终端中运行。 〇、硬件准备 树莓派4B一个、网线一根。 &#xff…

【NoSQL数据库】Redis学习笔记

一、缓存穿透 缓存穿透是先查Redis,发现缓存中没有数据,再查数据库。然而,如果查询的数据在数据库中也不存在,那么每次查询都会绕过缓存,直接落到数据库上。 解决方案一、缓存空数据 查询Redis缓存:首先查…

前后端分离项目部署,vue--nagix发布部署,.net--API发布部署。

目录 Nginx免安装部署文件包准备一、vue前端部署1、修改http.js2、npm run build 编译项目3、解压Nginx免安装,修改nginx.conf二、.net后端发布部署1、编辑appsetting.json,配置跨域请求2、配置WebApi,点击发布3、配置文件发布到那个文件夹4、配置发布相关选项5、点击保存,…

中电金信:AI数据服务

01 方案简介 AI数据服务解决方案为泛娱乐、电子商务、交通出行等行业提供数据处理、数据分析、AI模型训练等服务,通过自主研发的IDSC自动化数据服务平台与客户业务流程无缝衔接,实现超低延时的实时数据处理支持。 02 应用场景 智能医疗: 通…

Ribbon负载均衡与内核原理

什么是Ribbon? 目前主流的负载方案分为两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(Nginx)客户端根据自己的请求做负…