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

多模态记忆:让 AI Agent 记忆各种类型的信息

多模态记忆:让 AI Agent 记忆各种类型的信息

前言

多模态记忆是指让 AI Agent 能够记忆和理解多种类型的信息,包括文本、图像、音频等。这能显著提升 Agent 的能力。

我在多个项目中实现过多模态记忆,今天分享一些设计和实现。

记忆项设计

from dataclasses import dataclass, field from typing import Dict, Any, Optional, List from enum import Enum import hashlib import time class MemoryType(Enum): """记忆类型""" TEXT = "text" IMAGE = "image" AUDIO = "audio" DOCUMENT = "document" CODE = "code" DIALOGUE = "dialogue" @dataclass class MemoryItem: """记忆项""" id: str type: MemoryType content: Any metadata: Dict[str, Any] = field(default_factory=dict) embedding: Optional[List[float]] = None timestamp: float = field(default_factory=time.time) importance: float = 1.0 tags: List[str] = field(default_factory=list) access_count: int = 0 last_access: Optional[float] = None def generate_id(self): """生成唯一 ID""" content_str = str(self.content) return hashlib.md5((content_str + str(self.timestamp)).encode()).hexdigest() def to_dict(self) -> Dict[str, Any]: """转换为字典""" return { "id": self.id, "type": self.type.value, "content": self.content, "metadata": self.metadata, "embedding": self.embedding, "timestamp": self.timestamp, "importance": self.importance, "tags": self.tags, "access_count": self.access_count, "last_access": self.last_access }

多模态 Embedding

from typing import List, Any class MultimodalEmbedder: """多模态 Embedding 生成器""" def __init__(self): # 这里应该加载实际的模型 self.text_model = None # 文本模型 self.image_model = None # 图像模型 def embed_text(self, text: str) -> List[float]: """文本 Embedding""" # 实际实现应该调用真实模型 return [0.0] * 768 # 示例 def embed_image(self, image_data: bytes) -> List[float]: """图像 Embedding""" # 实际实现应该调用真实模型 return [0.0] * 768 # 示例 def embed(self, memory: MemoryItem) -> List[float]: """通用 Embedding""" if memory.type == MemoryType.TEXT: return self.embed_text(str(memory.content)) elif memory.type == MemoryType.IMAGE: return self.embed_image(memory.content) else: # 其他类型转为文本处理 return self.embed_text(str(memory.content))

记忆存储

from typing import List, Dict, Any, Optional import faiss import numpy as np class MemoryStore: """记忆存储""" def __init__(self, dimension: int = 768): self.dimension = dimension self.memories: Dict[str, MemoryItem] = {} self.index: Optional[faiss.Index] = None self.embeddings: List[List[float]] = [] self.id_map: List[str] = [] self.embedder = MultimodalEmbedder() def add(self, memory: MemoryItem): """添加记忆""" if not memory.id: memory.id = memory.generate_id() # 生成 Embedding if not memory.embedding: memory.embedding = self.embedder.embed(memory) # 存储 self.memories[memory.id] = memory self.embeddings.append(memory.embedding) self.id_map.append(memory.id) # 重建索引 self._rebuild_index() def add_batch(self, memories: List[MemoryItem]): """批量添加""" for memory in memories: self.add(memory) def _rebuild_index(self): """重建索引""" if not self.embeddings: self.index = None return vectors = np.array(self.embeddings).astype(np.float32) self.index = faiss.IndexFlatL2(self.dimension) self.index.add(vectors) def retrieve(self, query: Any, top_k: int = 5) -> List[MemoryItem]: """检索相关记忆""" # 将查询转为 embedding if isinstance(query, str): query_emb = self.embedder.embed_text(query) else: # 处理其他类型 query_emb = [0.0] * self.dimension # 搜索 query_vec = np.array([query_emb]).astype(np.float32) if self.index is None: return [] scores, indices = self.index.search(query_vec, min(top_k, len(self.id_map))) # 获取结果 results = [] for idx in indices[0]: if idx >= 0 and idx < len(self.id_map): memory_id = self.id_map[idx] memory = self.memories[memory_id] memory.access_count += 1 memory.last_access = time.time() results.append(memory) return results

记忆组织

from typing import List from collections import defaultdict class MemoryOrganizer: """记忆组织者""" def __init__(self, store: MemoryStore): self.store = store def get_by_type(self, mem_type: MemoryType) -> List[MemoryItem]: """按类型获取""" return [ mem for mem in self.store.memories.values() if mem.type == mem_type ] def get_by_tag(self, tag: str) -> List[MemoryItem]: """按标签获取""" return [ mem for mem in self.store.memories.values() if tag in mem.tags ] def get_recent(self, limit: int = 10) -> List[MemoryItem]: """获取最近的记忆""" sorted_memories = sorted( self.store.memories.values(), key=lambda m: m.timestamp, reverse=True ) return sorted_memories[:limit] def get_important(self, limit: int = 10) -> List[MemoryItem]: """获取重要的记忆""" sorted_memories = sorted( self.store.memories.values(), key=lambda m: m.importance, reverse=True ) return sorted_memories[:limit]

完整记忆系统

class MultimodalMemorySystem: """多模态记忆系统""" def __init__(self): self.store = MemoryStore() self.organizer = MemoryOrganizer(self.store) def add_memory(self, content: Any, mem_type: MemoryType, metadata: Dict = None, tags: List[str] = None): """添加记忆""" memory = MemoryItem( id="", type=mem_type, content=content, metadata=metadata or {}, tags=tags or [] ) self.store.add(memory) return memory def recall(self, query: str, top_k: int = 5) -> List[MemoryItem]: """回忆相关记忆""" return self.store.retrieve(query, top_k) def get_recent_history(self, limit: int = 20) -> List[MemoryItem]: """获取最近的历史""" return self.organizer.get_recent(limit)

总结

多模态记忆要点:

  1. 记忆表示:多类型统一表示
  2. 嵌入生成:多模态 Embedding
  3. 存储检索:高效存储和检索
  4. 组织管理:按类型、标签等组织
  5. 生命周期:重要性评估和老化

实践建议:

  • 从文本记忆开始
  • 逐步支持更多模态
  • 设计合理的重要性评估
  • 考虑记忆清理策略
http://www.rkmt.cn/news/1435869.html

相关文章:

  • 2026年4月行业内比较好的轨距拉杆直销厂家找哪家,道钉锚固剂/鱼尾螺栓/RGV轨道/轨距拉杆,轨距拉杆公司哪个好 - 品牌推荐师
  • AI儿童绘本生成:技术架构、实战难点与未来展望
  • 2026 年贵州铜仁职业培训怎么选?本地综合培训机构全面解析 - 资讯纵览
  • 【Gemini诗歌生成高阶秘籍】:20年AI内容专家亲授7大避坑法则与韵律控制心法
  • 为什么92%的Gemini私有部署未启用内存隔离?——2024 Q2第三方审计报告首次公开,含3步热修复补丁
  • Windows微信QQ防撤回终极指南:一键永久保存所有消息的完整教程
  • Xenia Canary终极指南:5个专业技巧实现Xbox 360游戏完美模拟
  • 基于Arduino Leonardo的街机外设DIY:从HID原理到实战开发
  • GPT还是MBR?给SATA/NVMe固态硬盘分区选错,重装系统白忙活
  • 基于Arduino Leonardo的头部控制游戏控制器设计与实现
  • 避坑指南:用Python做DEA效率分析时,为什么你的SBM模型结果总不对?
  • 基于Arduino的智能宠物模拟装置:温度触发与振动反馈的硬件实现
  • 【零基础部署】Docker 部署 CrewAI 多 Agent 编排框架保姆级教程
  • 手把手教你用Python处理Weibo_Datasets:从原始TXT到结构化CSV的完整流程
  • 媒体舆情响应延迟超83分钟?Gemini关系管理紧急升级清单,含3个即刻生效的API级补丁
  • 终极Windows优化指南:如何用Atlas OS让老电脑焕发新生?
  • OpCore-Simplify架构设计:从硬件适配自动化到智能配置生成的技术演进
  • 2026年广州二手房装修市场洞察:8强品牌格局与选企策略 - 优家闲谈
  • 微信聊天记录终极保存方案:三步永久备份你的数字记忆
  • WarcraftHelper:3层架构重塑魔兽争霸3现代游戏体验
  • 区块链治理:DAO与去中心化治理机制
  • 终极怀旧指南:如何在现代Windows上重现经典任务栏界面
  • 如何永久保存微信聊天记录:WeChatMsg本地导出工具完整指南
  • 【图像融合】带有散焦扩散缓解机制的自适应区域分割多焦点图像融合【含Matlab源码 15584期】
  • 终极OBS直播计时器:6种专业模式掌控你的直播时间
  • 5分钟快速上手:B站缓存转换工具终极指南,让珍贵视频永不丢失
  • 微信QQ消息防撤回终极指南:如何永久保存重要聊天记录
  • 终极指南:3步掌握国家中小学智慧教育平台电子课本解析下载
  • 捐赠响应延迟超8.3秒即流失?Gemini活动策划实时决策引擎搭建指南(含可部署Prompt模板)
  • 2026保姆级MD转PDF方法大全|5种实用工具手把手教程