当前位置: 首页 > article >正文

基于 FAISS 的 AI 长期记忆系统示例

FAISSFacebook AI Similarity Search是 Meta 开源的高性能向量检索库专为海量高维向量数据的快速近似搜索而设计。基于 FAISS 构建的 AI 长期记忆系统本质上是为 AI 模型尤其是大语言模型提供持久化、可检索的“外部大脑”。该系统通常采用“向量索引 元数据存储”的双存储架构向量化Embedding利用嵌入模型如 OpenAI text-embedding-ada-002、Sentence-BERT将文本、图像等非结构化数据转换为高维向量例如 1536 维。索引构建Indexing使用 FAISS 将向量构建成高效的索引结构如 FlatL2、IVFFlat、HNSW支持毫秒级近似最近邻ANN搜索。元数据关联为每个向量附加原始文本、时间戳、来源等元数据通常存储在 JSON 或 SQLite 中。检索增强生成RAG当用户提问时系统将查询文本向量化通过 FAISS 召回最相关的历史记忆并将其作为上下文注入 LLM 的 Prompt实现“记忆唤醒”。核心优势高性能针对 GPU 和批量查询高度优化能在百万级向量中实现亚秒级检索。可扩展性支持从本地小文件到分布式集群的平滑扩展。灵活性提供多种索引算法精确搜索 vs. 近似搜索和距离度量L2、内积、余弦相似度可根据数据规模和精度需求灵活配置。典型应用场景对话记忆持久化跨会话记住用户的偏好、习惯和重要对话历史。知识库问答KBQA将企业文档、技术手册向量化构建私有知识库。智能助理实现基于历史交互的个性化推荐和上下文感知服务。需求分析本文示例代码实现了一个AI长期记忆系统其核心需求源于当前AI应用对上下文记忆和历史交互保持能力的迫切需求。随着大型语言模型的普及人们发现单次会话的AI虽然能提供即时响应但缺乏持续的学习和记忆能力导致每次对话都像是重新开始。这个记忆系统旨在解决这一痛点为AI提供类似人类长期记忆的功能使其能够跨会话保持知识、学习用户偏好、积累经验从而提供更加个性化、连贯和智能的服务。具体需求包括向量化存储和检索技术文档、会议记录、用户交互历史等非结构化信息支持高效的相似性搜索快速找到相关历史信息提供数据持久化机制确保记忆不因系统重启而丢失具备可扩展的架构能够适应不同规模的数据集和多样的应用场景。设计架构该系统采用经典的知识库检索架构以FAISS向量数据库为核心结合元数据管理实现完整的记忆生命周期管理。系统设计分为三层存储层使用FAISS索引进行高维向量的高效相似性搜索这是系统的性能基础业务层管理记忆的增删改查操作包括向量的添加、相似性检索、元数据更新和软删除持久化层负责将内存中的索引和元数据序列化到磁盘。系统采用模块化设计索引类型可配置FlatL2用于精确搜索HNSW用于近似大规模搜索维度可调节以适配不同的嵌入模型。元数据与向量通过索引位置隐式关联的设计简化了数据一致性维护但需要注意删除操作只能软删除的局限性。系统还包含一个简单的文本向量化示例展示了如何将文本转化为向量尽管实际应用中需要替换为更专业的嵌入模型。代码实现# -*- coding: utf-8 -*- Created on Wed Jul 9 09:11:42 2025 author: liguo import faiss import numpy as np from typing import List, Dict, Any import json import os class AIMemory: def __init__(self, dim: int 1536, index_type: str FlatL2, storage_path: str ai_memory): 初始化AI长期记忆系统 Args: dim: 向量维度 index_type: 索引类型支持FlatL2、HNSW等 storage_path: 数据存储路径 self.dim dim self.index_type index_type self.storage_path storage_path self.metadata [] # 存储向量对应的元数据 # 创建存储目录 if not os.path.exists(storage_path): os.makedirs(storage_path) # 初始化索引 self._init_index() # 加载已保存的数据 self._load_memory() def _init_index(self): 根据指定类型初始化FAISS索引 if self.index_type FlatL2: self.index faiss.IndexFlatL2(self.dim) elif self.index_type HNSW: self.index faiss.IndexHNSWFlat(self.dim, 32) self.index.hnsw.efConstruction 40 else: raise ValueError(f不支持的索引类型: {self.index_type}) def _load_memory(self): 从磁盘加载已保存的记忆 index_path os.path.join(self.storage_path, index.faiss) metadata_path os.path.join(self.storage_path, metadata.json) if os.path.exists(index_path) and os.path.exists(metadata_path): try: # 加载索引 self.index faiss.read_index(index_path) # 加载元数据 with open(metadata_path, r, encodingutf-8) as f: self.metadata json.load(f) print(f已从 {self.storage_path} 加载记忆: {len(self.metadata)} 条记录) except Exception as e: print(f加载记忆失败: {e}) # 重新初始化索引 self._init_index() def save_memory(self): 保存记忆到磁盘 index_path os.path.join(self.storage_path, index.faiss) metadata_path os.path.join(self.storage_path, metadata.json) try: # 保存索引 faiss.write_index(self.index, index_path) # 保存元数据 with open(metadata_path, w, encodingutf-8) as f: json.dump(self.metadata, f, ensure_asciiFalse, indent2) print(f已保存记忆到 {self.storage_path}) except Exception as e: print(f保存记忆失败: {e}) def add_memory(self, vector: np.ndarray, data: Dict[str, Any]): 添加记忆条目 Args: vector: 特征向量numpy数组 data: 相关元数据字典格式 # 确保向量维度正确 vector vector.reshape(1, -1) if vector.shape[1] ! self.dim: raise ValueError(f向量维度不匹配期望 {self.dim}实际 {vector.shape[1]}) # 添加到索引 self.index.add(vector) # 保存元数据 self.metadata.append(data) # 自动保存可优化为定期保存 self.save_memory() return len(self.metadata) - 1 # 返回添加的记忆ID def search_memory(self, query_vector: np.ndarray, k: int 5) - List[Dict[str, Any]]: 搜索相似记忆 Args: query_vector: 查询向量 k: 返回结果数量 Returns: 包含相似度和元数据的列表 # 确保向量维度正确 query_vector query_vector.reshape(1, -1) if query_vector.shape[1] ! self.dim: raise ValueError(f向量维度不匹配期望 {self.dim}实际 {query_vector.shape[1]}) # 搜索 distances, indices self.index.search(query_vector, k) # 构建结果 results [] for i, idx in enumerate(indices[0]): if idx ! -1: # -1表示未找到 results.append({ similarity: float(distances[0][i]), metadata: self.metadata[idx], memory_id: idx }) return results def update_memory(self, memory_id: int, new_data: Dict[str, Any]): 更新记忆元数据 Args: memory_id: 记忆ID new_data: 新的元数据 if 0 memory_id len(self.metadata): self.metadata[memory_id].update(new_data) self.save_memory() return True return False def delete_memory(self, memory_id: int): 删除记忆 Args: memory_id: 记忆ID if 0 memory_id len(self.metadata): # 注意FAISS不支持直接删除索引项这里采用标记删除 self.metadata[memory_id][deleted] True self.save_memory() return True return False # 简单的文本向量化器示例实际应用中应使用更强大的模型 def simple_text_embedding(text: str) - np.ndarray: 简单的文本向量化函数实际应用中应替换为如OpenAI Embeddings等 # 这里仅作示例返回随机向量 # 实际应用中应使用如sentence-transformers等模型 return np.random.random(1536).astype(float32) # 使用示例 if __name__ __main__: # 初始化记忆系统 memory AIMemory(dim1536, index_typeFlatL2) # 添加记忆 memory.add_memory( simple_text_embedding(机器学习是人工智能的一个分支), {text: 机器学习是人工智能的一个分支, timestamp: 2023-05-15, source: 教科书} ) memory.add_memory( simple_text_embedding(深度学习是机器学习的一个子领域), {text: 深度学习是机器学习的一个子领域, timestamp: 2023-05-16, source: 网络文章} ) # 搜索记忆 query_vector simple_text_embedding(人工智能的分支有哪些) results memory.search_memory(query_vector, k2) print(\n搜索结果:) for result in results: print(f相似度: {result[similarity]:.4f}) print(f内容: {result[metadata][text]}) print(f来源: {result[metadata][source]}) print(- * 40) # 更新记忆 memory.update_memory(0, {importance: high}) # 删除记忆 # memory.delete_memory(1)代码执行结果C:\Users\xiayu\miniconda3\envs\langchain03\python.exe C:\Users\xiayu\PyCharmMiscProject\AI-Agent-Dev-Practices-Code\第3章代码\3.18-实现了一个基于 FAISS 的 AI 长期记忆系统.py已从 ai_memory 加载记忆: 12 条记录已保存记忆到 ai_memory已保存记忆到 ai_memory搜索结果:相似度: 259.3894内容: 机器学习是人工智能的一个分支来源: 教科书----------------------------------------相似度: 260.8898内容: 机器学习是人工智能的一个分支来源: 教科书----------------------------------------已保存记忆到 ai_memoryProcess finished with exit code 0代码解析代码实现展示了清晰的面向对象设计AIMemory类封装了所有记忆管理功能。构造函数初始化向量维度、索引类型和存储路径并调用_init_index()根据配置创建FAISS索引。add_memory()方法首先验证输入向量维度然后将其添加到索引并关联元数据。search_memory()方法接收查询向量通过FAISS的search方法找到最相似的k个记忆返回包含相似度分数、元数据和内存ID的结果列表。持久化通过save_memory()和_load_memory()方法实现分别将FAISS索引和元数据JSON文件保存到磁盘。示例中使用的simple_text_embedding()函数只是随机向量生成器实际部署时需要替换为真正的嵌入模型如Sentence-BERT或OpenAI Embeddings。主程序示例演示了完整的工作流程初始化系统、添加记忆条目、执行搜索、更新和删除记忆展示了系统的基本使用模式。

相关文章:

基于 FAISS 的 AI 长期记忆系统示例

FAISS(Facebook AI Similarity Search)是 Meta 开源的高性能向量检索库,专为海量高维向量数据的快速近似搜索而设计。基于 FAISS 构建的 AI 长期记忆系统,本质上是为 AI 模型(尤其是大语言模型)提供持久化、…...

面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附Python实战演示

面阵相机 vs 线阵相机:堡盟与海康相机选型差异全解析 附Python 实战演示面阵 vs 线阵:工业视觉的“广角镜”与“扫描仪”🔍 核心差异:一帧 vs 一行面阵相机 (Area Scan):瞬间的“广角镜”线阵相机 (Line Scan)&#xf…...

5个机器学习可视化黑马工具:从EDA到模型解释

1. 项目概述:机器学习可视化工具的隐藏瑰宝在数据科学项目中,可视化从来不只是锦上添花——它直接决定了你的模型价值能否被决策者理解和采纳。虽然Matplotlib和Seaborn已经成为行业标配,但当我连续三个季度需要向非技术高管汇报机器学习项目…...

边走边聊 Python 3.8:pandas 内存优化技巧(深度版)

pandas 内存优化技巧(深度版)——专为 Python 3.8 + Windows 7 系统打造 大家好!第9篇我们用 pandas 处理了手机记账 CSV,很多读者反馈“Win7 老机器内存只有 4~8GB,处理 10 万行以上文件就卡死了”。今天专门出一期内存优化实战技巧,全部代码在 Python 3.8 + Windows 7…...

Qwen3-32B镜像配置优化:提升响应速度与使用体验

Qwen3-32B镜像配置优化:提升响应速度与使用体验 1. 为什么需要优化Qwen3-32B镜像配置 Qwen3-32B作为一款320亿参数的大型语言模型,在推理能力、多语言支持和复杂任务处理方面表现出色。然而,在实际部署和使用过程中,许多用户会遇…...

PCA降维技术:原理、实现与优化实战

## 1. PCA基础概念与核心价值主成分分析(PCA)本质上是一种降维技术,它通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量。我第一次接触PCA是在处理一个包含200多个特征的数据集时——当时可视化都成问题,更别说…...

贝叶斯最优分类器:理论与应用解析

1. 贝叶斯最优分类器入门指南 在机器学习领域,分类问题就像一场永不停歇的智慧较量。我们不断开发新算法,调整参数,优化模型,只为了那百分之几的准确率提升。但你是否想过,理论上存在一个完美的分类器,它的…...

终极指南:UABEAvalonia - 跨平台Unity资源编辑器完全解析

终极指南:UABEAvalonia - 跨平台Unity资源编辑器完全解析 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA UABEAvalonia是一款功能强大的跨平台Unity资源编辑器,专为游戏开发者和…...

PHP进程管理利器:轻量级工具pao的原理、配置与实战

1. 项目概述:一个轻量级的PHP进程管理器如果你在PHP开发中,特别是处理后台任务、队列消费或者需要管理长时间运行的脚本时,还在为进程的启动、停止、重启和监控而头疼,那么nunomaduro/pao这个项目绝对值得你花时间了解一下。它不是…...

RePKG终极指南:如何轻松搞定Wallpaper Engine资源提取与转换

RePKG终极指南:如何轻松搞定Wallpaper Engine资源提取与转换 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 想要编辑Wallpaper Engine的壁纸资源却总是卡在PKG文件提取…...

视频字幕提取终极指南:用Video-subtitle-extractor本地提取87种语言字幕

视频字幕提取终极指南:用Video-subtitle-extractor本地提取87种语言字幕 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕…...

高效QMC音频解密实战指南:qmc-decoder深度解析与跨平台部署

高效QMC音频解密实战指南:qmc-decoder深度解析与跨平台部署 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 在数字音乐生态中,QQ音乐QMC加密格式一直…...

MongoDB Agent Skills:基于MCP协议构建AI与数据库的安全交互桥梁

1. 项目概述:当AI智能体学会“读写”数据库如果你正在尝试构建一个能真正理解并操作数据的AI智能体,比如让它帮你分析销售趋势、自动整理用户反馈,或者从海量文档中提取关键信息,那么你很可能已经遇到了一个核心瓶颈:如…...

掌握CefFlashBrowser:构建完整的Flash内容解决方案

掌握CefFlashBrowser:构建完整的Flash内容解决方案 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还在为无法访问经典Flash内容而烦恼吗?当主流浏览器纷纷放弃Fla…...

Asian Beauty Z-Image Turbo 5分钟快速部署:本地东方美学AI绘画工具一键启动

Asian Beauty Z-Image Turbo 5分钟快速部署:本地东方美学AI绘画工具一键启动 想象一下,你正在策划一个东方美学主题的艺术展,需要大量符合传统审美的视觉素材;或者你是一位独立创作者,希望为自己的小说生成具有东方韵…...

丹青幻境部署教程:Z-Image Atelier与Gradio双前端部署及性能对比

丹青幻境部署教程:Z-Image Atelier与Gradio双前端部署及性能对比 “见微知著,凝光成影。执笔入画,神游万象。” 丹青幻境,一个听起来就充满诗意的名字。它不是一个冰冷的AI工具,而是一个为你准备的“灵感实验室”。想象…...

3分钟快速上手:Iwara视频下载工具终极指南

3分钟快速上手:Iwara视频下载工具终极指南 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 你是否经常在Iwara平台发现精彩视频,却苦于无法保存到本地&am…...

Fashion-MNIST图像分类实战:CNN实现93%+准确率

1. 项目概述:当深度学习遇上时尚Fashion-MNIST数据集自2017年发布以来,已成为机器学习领域的"新MNIST"。这个包含7万张28x28灰度服装图像的数据集,涵盖了T恤、裤子、套头衫等10个类别,完美复刻了经典MNIST的格式却带来了…...

如何快速解决chromatic开发中的5个常见问题?终极调试指南

如何快速解决chromatic开发中的5个常见问题?终极调试指南 【免费下载链接】chromatic Universal modifier for Chromium/V8 | 广谱注入 Chromium/V8 的通用修改器 项目地址: https://gitcode.com/gh_mirrors/be/chromatic 你是否在使用chromatic进行Chromium…...

如何在Windows上轻松运行Flash游戏:CefFlashBrowser完整解决方案指南

如何在Windows上轻松运行Flash游戏:CefFlashBrowser完整解决方案指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 还在为无法打开珍藏的Flash游戏而烦恼吗?当现…...

为什么92%的MCP项目卡在模态同步阶段?资深专家用3个数学模型讲透时序一致性本质

更多请点击: https://intelliparadigm.com 第一章:MCP多模态处理的核心挑战与破局路径 MCP(Multimodal Co-Processing)架构在融合视觉、语音、文本与传感器信号时,面临模态对齐粒度不一致、时序异步性显著、语义鸿沟…...

多智能体强化学习实战:基于PyMARL与SMAC环境的算法解析与代码实现

1. 项目概述:从多智能体强化学习研究到可复现的代码实践如果你对深度强化学习(DRL)感兴趣,并且已经不再满足于让单个智能体在Atari游戏里打砖块,而是想探索多个智能体如何协作或竞争来完成更复杂的任务,比如…...

5步掌握猫抓资源嗅探:网页媒体下载终极指南

5步掌握猫抓资源嗅探:网页媒体下载终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在观看在线视频时想要保存精彩片段…...

Python的__getattribute__性能分析

Python中的__getattribute__方法是一个强大的内置函数,它在对象属性访问时自动触发,是理解Python属性查找机制的关键。过度或不合理的使用__getattribute__可能导致性能问题,尤其是在高频调用的场景下。本文将从性能角度分析__getattribute__…...

AI入门—— 一文读懂什么是RAG

一文读懂什么是RAG 如果你在用大模型做问答、知识库、客服、代码助手,你一定会遇到同一个问题: 模型“很会说”,但它并不总是“知道最新、最对、最贴合你业务”的内容。 RAG(Retrieval-Augmented Generation,检索增强生…...

基于大模型的AI外呼系统:语音与对话能力拆解(二)

在完成基础架构升级之后,AI外呼系统的核心竞争开始转向“语音 对话”的细节能力。相比传统机器人只能执行预设逻辑,新一代系统需要具备更强的语义理解、上下文记忆与情绪反馈能力,这本质上是对实时对话系统的工程挑战。 语音处理侧的关键在于…...

单链表的多项式创建和相加

#include<stdio.h> #include<iostream> #include <windows.h> // 必须放在最前面&#xff08;或至少在 SetConsoleOutputCP 之前&#xff09; using namespace std; typedef struct PLnode {int coef;//系数int exp;//指数struct PLnode* next; }PLnode, *…...

Android高级开发工程师技术深度解析与面试指南

在移动互联网时代,Android应用开发已成为技术领域的热点。作为一名Android应用高级开发工程师,不仅需要扎实的编程基础,还需具备解决复杂问题的能力。本文基于典型的职位要求(如KTV产品开发、性能优化、技术攻坚等),提供全面的技术解析和实用指导。文章将从开发经验、性能…...

GHelper终极指南:如何用轻量级工具全面掌控华硕笔记本性能

GHelper终极指南&#xff1a;如何用轻量级工具全面掌控华硕笔记本性能 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix…...

AIGC算法岗面试指南:从Transformer到AI Agent的求职秘籍

1. 项目概述&#xff1a;一份来自AIGC从业者的面试求生指南最近几年&#xff0c;AI领域&#xff0c;特别是AIGC&#xff08;生成式AI&#xff09;和LLM&#xff08;大语言模型&#xff09;的爆发&#xff0c;让算法岗和开发岗的面试难度和广度都上了一个新台阶。我身边不少朋友…...