15K star!超越RAG,让大模型拥有个性化记忆

通过RAG来增强LLM已经是目前很多的首选,但是最近有一个新的开源项目让大家看到了更好的选择的可能。

今天我们分享一个开源项目,它号称是RAG的下一代技术,让大模型可以拥有个性化的记忆,它就是:mem0

mem0 是什么

Mem0,前身为 EmbedChain, 是一款由 YC 孵化的开源技术,致力于为 AI 代理提供长期记忆能力。Mem0 旨在为大型语言模型 (LLM) 和 AI 代理提供一个记忆层,从而实现真正个性化的 AI 交互。它允许开发者通过集成长期记忆来增强他们的 AI 代理,从而带来更具适应性和个性化的 AI 体验。Mem0也是YC资助的项目。

简单的说,Mem0 为大语言模型提供了一个智能、自我改进的记忆层,实现了跨应用的个性化 AI 体验。

核心功能包括:

  • 多级内存:用户、会话和 AI 代理内存保留

  • 自适应个性化:基于交互的持续改进

  • 开发人员友好型 API:轻松集成到各种应用程序

  • 跨平台一致性:跨设备的统一行为

  • 托管服务:无忧托管解决方案

在线Demo

Mem0称自己是 RAG 发展的下一个阶段,相比 RAG 的核心区别:关注实体和实体关系;关注最近、最相关的;上下文连续性;适应性学习;动态更新信息。而普通 RAG 只是单纯的从静态的文档中检索信息。

具体来说,Mem0 提供的记忆实现相比 RAG 具有以下优势:

  • 关注实体关系:Mem0 能理解和关联不同交互中的实体,而 RAG 则从静态文档中检索信息。这使得 Mem0 对上下文和关系的理解更深刻。

  • 最近性、相关性和衰减:Mem0 优先考虑最近的交互,并逐渐忘记过时的信息,确保记忆保持相关和最新,以提供更准确的响应。

  • 上下文连续性:Mem0 在多个会话中保留信息,保持对话和交互的连续性,这对于长期参与应用,如虚拟伴侣或个性化学习助手来说至关重要。

  • 自适应学习:Mem0 根据用户交互和反馈改进其个性化,使记忆随着时间的推移更加准确和贴合个人用户。

  • 动态更新信息:Mem0 能够根据新的信息和交互动态更新其记忆,而 RAG 依赖于静态数据。这允许实时调整和改进,提升用户体验。

这些先进的记忆功能使 Mem0 成为开发者创建个性化和上下文感知 AI 应用的强大工具。

安装和使用

Mem0 还提供了开发者友好的 API,安装和使用也很简单。

通过pip安装mem0

pip install mem0ai

基本用法:

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)

上述的示例代码展示了如何添加记忆、检索记忆、搜索、更新和获取记忆历史。

注意代码里的metadata, 这里相当于定义了一个schema,让LLM从非结构化数据里提取相关的记忆信息。

高级使用,在面向生成的环境中,可以增加向量数据库比如Qdrant

from mem0 import Memory``   ``config = {`    `"vector_store": {`        `"provider": "qdrant",`        `"config": {`            `"host": "localhost",`            `"port": 6333,`        `}`    `},``}``   ``m = Memory.from_config(config)

实现原理

从本质上讲,Mem0 是AI 应用程序和内存存储之间的智能中介。与 LLM 集成后,Mem0 可管理信息的存储、检索和优先级排序。

以下是简化的工作流程:

  1. 当用户与AI交互时,Mem0会存储来自交互的相关信息。

  2. 在后续交互中,Mem0 检索相关的过去信息,为 LLM 提供背景信息。

  3. 系统不断更新对最相关信息的理解,以适应用户的需求。

Mem0 使用先进的矢量存储技术来有效地管理和查询大量数据,确保快速和相关的信息检索。

在源码中可以看到项目包含4个核心模块:embeddings、llms、memory、vector_stores,最重要的就是memory部分,提供对记忆的处理能力。结合前面的快速上手,我们可以看到,mem0的memory部分提供的能力简单点说就是记忆的“增删改查”,具体如下:

Store a Memory``Retrieve Memories``Search Memories``Update a Memory``Memory History``Delete Memory

参考例子

在mem0的文档中还提供了一些例子来方便大家更好的理解其作用,比如个人AI助理、AI旅行助手、客服AI助手等,都包含说明和 示例的代码。

以下是使用mem0来构建一个只能旅游助手的代码。

import os``from openai import OpenAI``from mem0 import Memory``   ``# Set the OpenAI API key``os.environ['OPENAI_API_KEY'] = 'sk-xxx'``   ``class PersonalTravelAssistant:`    `def __init__(self):`        `self.client = OpenAI()`        `self.memory = Memory()`        `self.messages = [{"role": "system", "content": "You are a personal AI Assistant."}]``   `    `def ask_question(self, question, user_id):`        `# Fetch previous related memories`        `previous_memories = self.search_memories(question, user_id=user_id)`        `prompt = question`        `if previous_memories:`            `prompt = f"User input: {question}\\n Previous memories: {previous_memories}"`        `self.messages.append({"role": "user", "content": prompt})``   `        `# Generate response using GPT-4o`        `response = self.client.chat.completions.create(`            `model="gpt-4o",`            `messages=self.messages`        `)`        `answer = response.choices[0].message.content`        `self.messages.append({"role": "assistant", "content": answer})``   `        `# Store the question in memory`        `self.memory.add(question, user_id=user_id)`        `return answer``   `    `def get_memories(self, user_id):`        `memories = self.memory.get_all(user_id=user_id)`        `return [m['text'] for m in memories]``   `    `def search_memories(self, query, user_id):`        `memories = self.memory.search(query, user_id=user_id)`        `return [m['text'] for m in memories]``   ``# Usage example``user_id = "traveler_123"``ai_assistant = PersonalTravelAssistant()``   ``def main():`    `while True:`        `question = input("Question: ")`        `if question.lower() in ['q', 'exit']:`            `print("Exiting...")`            `break``   `        `answer = ai_assistant.ask_question(question, user_id=user_id)`        `print(f"Answer: {answer}")`        `memories = ai_assistant.get_memories(user_id=user_id)`        `print("Memories:")`        `for memory in memories:`            `print(f"- {memory}")`        `print("-----")``   ``if __name__ == "__main__":`    `main()

总结

Mem0 作为一种革命性的AI记忆技术,为构建个性化的AI应用提供了全新的解决方案。Mem0 不仅可以提高AI代理的智能水平,还可以为用户带来更加个性化和人性化的AI体验。相信在不久的将来,Mem0 将会应用到更多的AI应用场景中,为我们带来更加智能和便捷的生活体验。

项目信息

  • 项目名称: mem0

  • GitHub 链接:https://github.com/mem0ai/mem0

  • Star 数:15K

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

  • 15
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个大小不超过15k字节的 HTML 设备控制范例: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>设备控制界面</title> <style> body { font-family: Arial, sans-serif; text-align: center; background-color: #f2f2f2; } h1 { margin-top: 40px; margin-bottom: 20px; } button { font-size: 18px; padding: 10px 20px; margin: 10px; border: none; border-radius: 5px; background-color: #4CAF50; color: #fff; cursor: pointer; } button:hover { background-color: #2E8B57; } .status { font-size: 24px; margin-top: 40px; margin-bottom: 20px; } </style> </head> <body> <h1>设备控制界面</h1> <button id="on">开</button> <button id="off">关</button> <p class="status">设备状态:未知</p> <script> // 获取按钮元素和状态元素 var onBtn = document.getElementById('on'); var offBtn = document.getElementById('off'); var statusEl = document.querySelector('.status'); // 给按钮绑定点击事件 onBtn.addEventListener('click', function() { // 发送请求控制设备开启 controlDevice('on'); }); offBtn.addEventListener('click', function() { // 发送请求控制设备关闭 controlDevice('off'); }); // 发送请求控制设备 function controlDevice(action) { // 发送 AJAX 请求 var xhr = new XMLHttpRequest(); xhr.open('POST', '/api/control', true); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { // 请求成功,更新状态元素 var res = JSON.parse(xhr.responseText); statusEl.textContent = '设备状态:' + res.status; } }; xhr.send(JSON.stringify({ action: action })); } </script> </body> </html> ``` 这个范例中,页面包含一个标题、两个按钮和一个状态元素,使用了简单的样式和布局。通过给按钮绑定点击事件,可以发送 AJAX 请求控制设备的开启和关闭,并且在请求成功后更新状态元素。你可以根据具体需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值