AI 情报局用 PowerMem SeekDB 做一个多 Agent 记忆小游戏引言从记忆到智能在人工智能的世界里“记忆”是智能体的核心能力之一。想象一下一群AI特工在情报局中收集线索、交换信息、协作完成任务——这就是我们今天要构建的多Agent记忆小游戏的灵感来源。我们将使用两个关键工具PowerMem一个强大的记忆管理库和SeekDB一个轻量级的向量数据库来模拟多个智能体如何存储、检索和共享记忆。本文将从基础概念讲起逐步深入到多Agent协作的实现最终带你完成一个完整的记忆小游戏。准备好了吗让我们开启这场AI情报局的冒险## 第一部分基础知识### 什么是 PowerMem 和 SeekDB-PowerMem一个Python库专注于为AI Agent提供结构化记忆管理。它支持短期记忆、长期记忆和语义记忆的存储与检索并允许自定义记忆的权重和过期时间。-SeekDB一个嵌入式的向量数据库用于高效存储和查询高维向量。它特别适合处理文本嵌入支持近似最近邻搜索是实现记忆匹配的核心工具。在记忆小游戏中PowerMem负责管理每个Agent的记忆生命周期而SeekDB则作为记忆的“搜索引擎”让Agent能快速找到相关记忆片段。### 核心概念Agent 记忆模型一个Agent的记忆可以拆解为-工作记忆当前任务相关的临时信息比如“我看到一个红色箱子”。-长期记忆经过编码的持久知识比如“红色箱子通常包含武器”。-语义记忆对事实和概念的抽象理解比如“箱子是容器”。多Agent系统还涉及共享记忆——多个Agent可以交换记忆片段从而协作完成任务。## 第二部分环境搭建与基础代码### 安装依赖首先确保你的Python环境建议3.8安装了以下库bashpip install powermem seekdb numpy### 代码示例1创建一个简单Agent的记忆系统下面是一个基础示例展示如何用PowerMem和SeekDB为单个Agent创建记忆存储和检索。python# 导入所需库from powermem import MemoryManager # 记忆管理器from seekdb import SeekDB # 向量数据库import numpy as np# 初始化记忆管理系统class SimpleAgent: def __init__(self, name): self.name name # 创建PowerMem管理器设置短期记忆容量为5条 self.memory MemoryManager(short_term_capacity5) # 创建SeekDB实例用于存储长文本记忆的向量 self.db SeekDB(dimension128) # 向量维度设为128 def remember(self, content, importance1.0): 存储一条记忆content是文本importance是重要性权重 # 将文本转换为向量这里用随机向量模拟实际应调用嵌入模型 vector np.random.randn(128).astype(np.float32) # 存储到PowerMem self.memory.add(content, importanceimportance) # 存储到SeekDB self.db.insert({text: content, vector: vector}) print(f{self.name}记住了: {content}) def recall(self, query, top_k1): 根据查询检索相关记忆 # 模拟查询向量 query_vector np.random.randn(128).astype(np.float32) # 从SeekDB搜索 results self.db.search(query_vector, ktop_k) if results: return [r[text] for r in results] return []# 创建一个Agent并测试记忆功能agent SimpleAgent(特工A)agent.remember(我在大厅发现一个蓝色信封, importance0.8)agent.remember(蓝色信封里藏有任务指令, importance0.9)# 检索记忆found agent.recall(信封在哪里?, top_k1)print(f检索结果: {found})运行结果示例特工A记住了: 我在大厅发现一个蓝色信封特工A记住了: 蓝色信封里藏有任务指令检索结果: [我在大厅发现一个蓝色信封]代码解析-MemoryManager负责管理记忆的排序和过期add()方法自动处理短期记忆的溢出。-SeekDB存储了向量的副本用于快速相似度检索。- 实际项目中向量应由嵌入模型如Sentence-BERT生成这里用随机数简化。## 第三部分多Agent协作与共享记忆### 核心挑战如何让Agent交换记忆多Agent系统的关键在于通信协议。我们将设计一个简单的共享记忆机制每个Agent可以“广播”记忆到全局黑板其他Agent从中获取。### 代码示例2多Agent情报局游戏现在我们创建一个完整的情报游戏场景三个Agent特工A、B、C各自探索不同区域收集线索并通过共享记忆板协作找到最终目标。pythonfrom powermem import MemoryManagerfrom seekdb import SeekDBimport numpy as npimport random# 共享记忆板所有Agent共用class SharedMemoryBoard: def __init__(self): self.db SeekDB(dimension128) # 全局数据库 self.broadcast_log [] # 记录广播历史 def broadcast(self, agent_name, content): Agent向共享板广播记忆 vector np.random.randn(128).astype(np.float32) self.db.insert({agent: agent_name, text: content, vector: vector}) self.broadcast_log.append(f{agent_name}广播: {content}) print(f[共享板] 收到来自 {agent_name} 的广播: {content}) def query(self, query_text, top_k2): 从共享板检索相关记忆 query_vector np.random.randn(128).astype(np.float32) results self.db.search(query_vector, ktop_k) return [r[text] for r in results]# 情报局特工类class SecretAgent: def __init__(self, name, shared_board): self.name name self.memory MemoryManager(short_term_capacity3) self.shared_board shared_board # 共享记忆板引用 def explore(self, location): 探索特定区域生成随机线索 clues [ f在{location}发现了一个{random.choice([密码箱, 地图碎片, 加密信件])}, f{location}的墙上写着一串数字: {random.randint(100,999)}, f在{location}的角落有{random.choice([血迹, 脚印, 烟头])} ] clue random.choice(clues) self.memory.add(clue, importance0.7) # 同时广播到共享板 self.shared_board.broadcast(self.name, clue) return clue def share_knowledge(self, query): 向共享板请求帮助 print(f{self.name}正在查询: {query}) results self.shared_board.query(query) return results# 创建共享记忆板board SharedMemoryBoard()# 创建三个特工agents [ SecretAgent(特工A, board), SecretAgent(特工B, board), SecretAgent(特工C, board)]# 模拟游戏回合每个Agent探索不同区域locations [大厅, 密室, 天台]print( 情报局行动开始 )for i in range(3): for agent, loc in zip(agents, locations): agent.explore(loc)# 特工A试图根据共享记忆推断目标print(\n 特工A尝试推理 )shared_clues agents[0].share_knowledge(密码箱线索)print(f特工A从共享板获取到: {shared_clues})# 模拟协作完成所有Agent共享记忆后找出共同点print(\n 最终情报汇总 )for log in board.broadcast_log: print(log)print(任务完成)运行结果示例 情报局行动开始 [共享板] 收到来自 特工A 的广播: 在大厅发现了一个密码箱[共享板] 收到来自 特工B 的广播: 密室的墙上写着一串数字: 456[共享板] 收到来自 特工C 的广播: 在天台的角落有脚印 特工A尝试推理 特工A正在查询: 密码箱线索特工A从共享板获取到: [在大厅发现了一个密码箱, 密室的墙上写着一串数字: 456] 最终情报汇总 特工A广播: 在大厅发现了一个密码箱特工B广播: 密室的墙上写着一串数字: 456特工C广播: 在天台的角落有脚印任务完成代码解析-SharedMemoryBoard充当全局“情报中心”所有Agent通过它交换信息。-SecretAgent.explore()模拟探索行为同时将发现广播到共享板。- 在推理阶段Agent可以检索共享记忆从而获得单凭自己无法获取的线索。- 这个框架可以轻松扩展例如添加记忆的“重要性衰减”机制让旧记忆随时间被遗忘。## 第四部分高级用法与优化### 记忆的权重与遗忘机制在真实场景中记忆需要动态管理。PowerMem支持自定义遗忘策略python# 在MemoryManager中设置遗忘策略self.memory MemoryManager( short_term_capacity5, decay_rate0.1, # 每次检索后记忆权重衰减10% importance_threshold0.2 # 低于此权重的记忆被自动删除)### 向量嵌入的优化为了提升SeekDB的检索精度建议使用预训练模型生成文本向量pythonfrom sentence_transformers import SentenceTransformermodel SentenceTransformer(all-MiniLM-L6-v2)vector model.encode(content) # 输出384维向量### 多Agent协作策略更高级的游戏可以引入角色分工-侦察Agent负责探索生成大量原始记忆。-分析师Agent负责检索和分析找出模式。-行动Agent基于分析结果执行操作。通过PowerMem的记忆分区功能可以为不同角色设置专用的记忆空间。## 总结通过本文我们从零开始构建了一个多Agent记忆小游戏核心要点包括1.PowerMem管理记忆的生命周期提供短期/长期记忆的自动维护。2.SeekDB提供高效的向量检索让Agent能快速找到相关记忆。3.多Agent协作通过共享记忆板实现模拟了真实情报局的信息交换流程。这个框架不仅是一个有趣的游戏更是AI Agent系统的一个缩影。你可以进一步扩展它添加真实文本嵌入、引入强化学习让Agent自主选择记忆优先级、或者增加Agent之间的“信任评分”机制。记住智能的本质往往藏在记忆的细节中——现在你的AI情报局已经开始运作了
AI 情报局:用 PowerMem + SeekDB 做一个多 Agent 记忆小游戏
AI 情报局用 PowerMem SeekDB 做一个多 Agent 记忆小游戏引言从记忆到智能在人工智能的世界里“记忆”是智能体的核心能力之一。想象一下一群AI特工在情报局中收集线索、交换信息、协作完成任务——这就是我们今天要构建的多Agent记忆小游戏的灵感来源。我们将使用两个关键工具PowerMem一个强大的记忆管理库和SeekDB一个轻量级的向量数据库来模拟多个智能体如何存储、检索和共享记忆。本文将从基础概念讲起逐步深入到多Agent协作的实现最终带你完成一个完整的记忆小游戏。准备好了吗让我们开启这场AI情报局的冒险## 第一部分基础知识### 什么是 PowerMem 和 SeekDB-PowerMem一个Python库专注于为AI Agent提供结构化记忆管理。它支持短期记忆、长期记忆和语义记忆的存储与检索并允许自定义记忆的权重和过期时间。-SeekDB一个嵌入式的向量数据库用于高效存储和查询高维向量。它特别适合处理文本嵌入支持近似最近邻搜索是实现记忆匹配的核心工具。在记忆小游戏中PowerMem负责管理每个Agent的记忆生命周期而SeekDB则作为记忆的“搜索引擎”让Agent能快速找到相关记忆片段。### 核心概念Agent 记忆模型一个Agent的记忆可以拆解为-工作记忆当前任务相关的临时信息比如“我看到一个红色箱子”。-长期记忆经过编码的持久知识比如“红色箱子通常包含武器”。-语义记忆对事实和概念的抽象理解比如“箱子是容器”。多Agent系统还涉及共享记忆——多个Agent可以交换记忆片段从而协作完成任务。## 第二部分环境搭建与基础代码### 安装依赖首先确保你的Python环境建议3.8安装了以下库bashpip install powermem seekdb numpy### 代码示例1创建一个简单Agent的记忆系统下面是一个基础示例展示如何用PowerMem和SeekDB为单个Agent创建记忆存储和检索。python# 导入所需库from powermem import MemoryManager # 记忆管理器from seekdb import SeekDB # 向量数据库import numpy as np# 初始化记忆管理系统class SimpleAgent: def __init__(self, name): self.name name # 创建PowerMem管理器设置短期记忆容量为5条 self.memory MemoryManager(short_term_capacity5) # 创建SeekDB实例用于存储长文本记忆的向量 self.db SeekDB(dimension128) # 向量维度设为128 def remember(self, content, importance1.0): 存储一条记忆content是文本importance是重要性权重 # 将文本转换为向量这里用随机向量模拟实际应调用嵌入模型 vector np.random.randn(128).astype(np.float32) # 存储到PowerMem self.memory.add(content, importanceimportance) # 存储到SeekDB self.db.insert({text: content, vector: vector}) print(f{self.name}记住了: {content}) def recall(self, query, top_k1): 根据查询检索相关记忆 # 模拟查询向量 query_vector np.random.randn(128).astype(np.float32) # 从SeekDB搜索 results self.db.search(query_vector, ktop_k) if results: return [r[text] for r in results] return []# 创建一个Agent并测试记忆功能agent SimpleAgent(特工A)agent.remember(我在大厅发现一个蓝色信封, importance0.8)agent.remember(蓝色信封里藏有任务指令, importance0.9)# 检索记忆found agent.recall(信封在哪里?, top_k1)print(f检索结果: {found})运行结果示例特工A记住了: 我在大厅发现一个蓝色信封特工A记住了: 蓝色信封里藏有任务指令检索结果: [我在大厅发现一个蓝色信封]代码解析-MemoryManager负责管理记忆的排序和过期add()方法自动处理短期记忆的溢出。-SeekDB存储了向量的副本用于快速相似度检索。- 实际项目中向量应由嵌入模型如Sentence-BERT生成这里用随机数简化。## 第三部分多Agent协作与共享记忆### 核心挑战如何让Agent交换记忆多Agent系统的关键在于通信协议。我们将设计一个简单的共享记忆机制每个Agent可以“广播”记忆到全局黑板其他Agent从中获取。### 代码示例2多Agent情报局游戏现在我们创建一个完整的情报游戏场景三个Agent特工A、B、C各自探索不同区域收集线索并通过共享记忆板协作找到最终目标。pythonfrom powermem import MemoryManagerfrom seekdb import SeekDBimport numpy as npimport random# 共享记忆板所有Agent共用class SharedMemoryBoard: def __init__(self): self.db SeekDB(dimension128) # 全局数据库 self.broadcast_log [] # 记录广播历史 def broadcast(self, agent_name, content): Agent向共享板广播记忆 vector np.random.randn(128).astype(np.float32) self.db.insert({agent: agent_name, text: content, vector: vector}) self.broadcast_log.append(f{agent_name}广播: {content}) print(f[共享板] 收到来自 {agent_name} 的广播: {content}) def query(self, query_text, top_k2): 从共享板检索相关记忆 query_vector np.random.randn(128).astype(np.float32) results self.db.search(query_vector, ktop_k) return [r[text] for r in results]# 情报局特工类class SecretAgent: def __init__(self, name, shared_board): self.name name self.memory MemoryManager(short_term_capacity3) self.shared_board shared_board # 共享记忆板引用 def explore(self, location): 探索特定区域生成随机线索 clues [ f在{location}发现了一个{random.choice([密码箱, 地图碎片, 加密信件])}, f{location}的墙上写着一串数字: {random.randint(100,999)}, f在{location}的角落有{random.choice([血迹, 脚印, 烟头])} ] clue random.choice(clues) self.memory.add(clue, importance0.7) # 同时广播到共享板 self.shared_board.broadcast(self.name, clue) return clue def share_knowledge(self, query): 向共享板请求帮助 print(f{self.name}正在查询: {query}) results self.shared_board.query(query) return results# 创建共享记忆板board SharedMemoryBoard()# 创建三个特工agents [ SecretAgent(特工A, board), SecretAgent(特工B, board), SecretAgent(特工C, board)]# 模拟游戏回合每个Agent探索不同区域locations [大厅, 密室, 天台]print( 情报局行动开始 )for i in range(3): for agent, loc in zip(agents, locations): agent.explore(loc)# 特工A试图根据共享记忆推断目标print(\n 特工A尝试推理 )shared_clues agents[0].share_knowledge(密码箱线索)print(f特工A从共享板获取到: {shared_clues})# 模拟协作完成所有Agent共享记忆后找出共同点print(\n 最终情报汇总 )for log in board.broadcast_log: print(log)print(任务完成)运行结果示例 情报局行动开始 [共享板] 收到来自 特工A 的广播: 在大厅发现了一个密码箱[共享板] 收到来自 特工B 的广播: 密室的墙上写着一串数字: 456[共享板] 收到来自 特工C 的广播: 在天台的角落有脚印 特工A尝试推理 特工A正在查询: 密码箱线索特工A从共享板获取到: [在大厅发现了一个密码箱, 密室的墙上写着一串数字: 456] 最终情报汇总 特工A广播: 在大厅发现了一个密码箱特工B广播: 密室的墙上写着一串数字: 456特工C广播: 在天台的角落有脚印任务完成代码解析-SharedMemoryBoard充当全局“情报中心”所有Agent通过它交换信息。-SecretAgent.explore()模拟探索行为同时将发现广播到共享板。- 在推理阶段Agent可以检索共享记忆从而获得单凭自己无法获取的线索。- 这个框架可以轻松扩展例如添加记忆的“重要性衰减”机制让旧记忆随时间被遗忘。## 第四部分高级用法与优化### 记忆的权重与遗忘机制在真实场景中记忆需要动态管理。PowerMem支持自定义遗忘策略python# 在MemoryManager中设置遗忘策略self.memory MemoryManager( short_term_capacity5, decay_rate0.1, # 每次检索后记忆权重衰减10% importance_threshold0.2 # 低于此权重的记忆被自动删除)### 向量嵌入的优化为了提升SeekDB的检索精度建议使用预训练模型生成文本向量pythonfrom sentence_transformers import SentenceTransformermodel SentenceTransformer(all-MiniLM-L6-v2)vector model.encode(content) # 输出384维向量### 多Agent协作策略更高级的游戏可以引入角色分工-侦察Agent负责探索生成大量原始记忆。-分析师Agent负责检索和分析找出模式。-行动Agent基于分析结果执行操作。通过PowerMem的记忆分区功能可以为不同角色设置专用的记忆空间。## 总结通过本文我们从零开始构建了一个多Agent记忆小游戏核心要点包括1.PowerMem管理记忆的生命周期提供短期/长期记忆的自动维护。2.SeekDB提供高效的向量检索让Agent能快速找到相关记忆。3.多Agent协作通过共享记忆板实现模拟了真实情报局的信息交换流程。这个框架不仅是一个有趣的游戏更是AI Agent系统的一个缩影。你可以进一步扩展它添加真实文本嵌入、引入强化学习让Agent自主选择记忆优先级、或者增加Agent之间的“信任评分”机制。记住智能的本质往往藏在记忆的细节中——现在你的AI情报局已经开始运作了