agno-3-记忆系统
记忆是什么在智能体Agent的语境下记忆Memory指的是智能体存储、回忆并利用过往交互信息的能力。没有记忆的智能体每次对话都像“第一次见面”无法从历史中学习也无法建立持续的关系。记忆系统要解决的正是这个问题。它让智能体从“无状态工具”进化为“有状态的伙伴”。有了记忆智能体才能提供个性化体验记住用户的名字、偏好和习惯。实现连续对话在多轮对话中能自动参考之前的聊天内容。随时间成长通过每次交互学习变得越来越懂用户。三大核心记忆类型Agno 将“记忆”分为三种类型协同工作以提供完整的上下文1.会话存储 (Session Storage)这是短期记忆是 Agent 进行多轮对话的基础。存储什么完整的聊天历史和当前的会话状态Session State。如何工作每次对话后系统都会自动将新的消息和状态保存到数据库。当用户继续对话时Agent 会读取这些历史从而理解上下文。解决的问题确保智能体在一个会话中不会“失忆”能进行连贯的对话。2.用户记忆 (User Memories)这是长期记忆是真正意义上的“记忆”目的是构建用户画像实现个性化。存储什么从对话中提取的关于用户的事实、洞察和偏好。两种管理模式自动记忆 (Automatic Memory)通过update_memory_on_runTrue启用。Agno 在后台自动提取并存储记忆无需干预。适合大多数场景。智能体记忆 (Agentic Memory)通过enable_agentic_memoryTrue启用。Agent 自己通过工具Tools决定何时创建、更新或删除记忆。适合需要精细控制的复杂场景。解决的问题让 Agent 能“记住”用户提供真正个性化的交互体验。3.会话摘要 (Session Summaries)这是对长期记忆的优化用于管理过长的对话历史。存储什么对冗长对话历史的浓缩摘要。如何工作当对话历史过长、可能超出模型上下文限制时Agent 可以生成并存储摘要。解决的问题节省 Token 消耗并在长对话中保持关键上下文不丢失。存储架构与工作机制Agno 的记忆系统通过“存储后端”实现数据持久化。核心组件Agent: 业务逻辑的载体。Memory(v2):记忆管理中心负责创建、检索、更新和删除记忆。MemoryManager: 执行记忆管理任务的实际工作者。Storage(Storage Backend):数据持久化层与数据库交互。数据模型与存储内容使用持久化存储时系统主要存储用户记忆 (User Memories)关于用户的洞察和事实。最后更新时间戳 (Last Updated Timestamps)追踪记忆的修改时间。记忆 ID (Memory IDs)每条记忆的唯一标识符。两种记忆管理模式Agno 提供两种模式让智能体管理用户记忆自主模式 (Agentic Memory)通过enable_agentic_memoryTrue启用。智能体获得管理记忆的工具可自主决定何时创建、检索或删除记忆。这是官方推荐的起点。被动模式 (Automatic Memory)通过enable_user_memoriesTrue启用。MemoryManager在每次用户消息后自动运行提取并存储记忆。支持的存储后端Agno 支持 13 种以上的数据库通过插件式接口接入。主要分为开发/测试SqliteDb或InMemoryDb无需配置数据不持久。生产环境PostgresDb。记忆隔离机制Agno 的所有记忆包括长期记忆和会话历史都严格与user_id绑定。只要在调用时传入不同的user_id系统就能确保不同用户的数据完全隔离。核心隔离机制user_id是 Agno 中数据隔离的第一道也是最关键的一道防线。记忆的作用域用户的长期记忆User Memories和会话记录都与user_id绑定。在查询或存储记忆时系统都会通过user_id进行过滤。关键实践在生产环境中必须为每个用户提供唯一的user_id例如你系统中的用户ID或邮箱。如果忽略这一点所有用户的数据都会混在一起造成严重的数据泄露。会话层面的隔离如果说user_id是“人”的维度那么session_id就是“对话”的维度。作用session_id用于隔离同一个用户的不同对话线程。使用在同一个user_id下不同的session_id代表着独立的会话历史。它们之间不会互相干扰但会共享该用户的长期记忆。agent_id与team_id会话归属与组件标识agent_id和team_id主要用于标识和区分不同的组件Agent 或 Team并作为会话 (Session) 的归属标识。agent_id标识一个特定的 Agent 实例。在AgentSession数据模型中agent_id是一个核心字段用于记录会话属于哪个 Agent。team_id标识一个特定的 Team 实例。在TeamSession数据模型中team_id是核心字段。当一个 Agent 作为 Team 的成员时其team_id会被自动关联。它们隔离了什么agent_id和team_id主要用于在数据库层面区分和归类不同组件产生的会话数据。例如它们能确保在查询某个 Agent 的历史会话时不会错误地返回另一个 Agent 的会话。从这个角度看它们提供了一种组件级别的数据隔离。代码示例会话记忆案例from agno.agent import Agent from agno.db.sqlite import SqliteDb from dotenv import load_dotenv from agno.models.deepseek import DeepSeek load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) db SqliteDb(db_filesession_store.db) agent Agent( modeldeepseek, dbdb, # 注入存储后端 instructions[你是一个智能助手], markdownTrue, add_history_to_contextTrue, # 将历史加入上下文关键 num_history_runs3, # 包含最近3轮对话 user_idxiaoxiaoer ) resp agent.run(你好,我是小小儿你是谁) print(resp.content) resp agent.run(我是谁) print(resp.content)用户记忆自动模式from agno.agent import Agent from agno.db.sqlite import SqliteDb from dotenv import load_dotenv from agno.models.deepseek import DeepSeek load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) db SqliteDb(db_filesession_store.db) # 2. 创建 Agent 并启用自动记忆 agent Agent( modeldeepseek, dbdb, update_memory_on_runTrue, # 自动提取记忆 user_idxiaoxiaoer, instructions[你是一个智能助手], ) resp agent.run(你好,我是小小儿我喜欢滑雪跑步你是谁) print(resp.content) resp agent.run(我有哪些爱好) print(resp.content)用户记忆自主模式from agno.agent import Agent from agno.db.sqlite import SqliteDb from dotenv import load_dotenv from agno.models.deepseek import DeepSeek load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) db SqliteDb(db_filesession_store.db) # 2. 创建 Agent 并启用自动记忆 agent Agent( modeldeepseek, dbdb, enable_agentic_memoryTrue, # 自动提取记忆 user_idxiaoxiaoer, instructions[你是一个智能助手], ) resp agent.run(你好,我是小小儿我喜欢滑雪跑步你是谁) print(resp.content) resp agent.run(我有哪些爱好) print(resp.content)摘要记忆from agno.agent import Agent from agno.db.sqlite import SqliteDb from agno.session import SessionSummaryManager from dotenv import load_dotenv from agno.models.deepseek import DeepSeek load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) db SqliteDb(db_filesession_store.db) # 可选自定义摘要管理器使用默认也可 summary_manager SessionSummaryManager( modeldeepseek, # 用于生成摘要的模型 ) # 2. 创建 Agent 并启用自动记忆 agent Agent( modeldeepseek, dbdb, enable_session_summariesTrue, # 开启摘要 add_session_summary_to_contextTrue, # 默认 True将摘要放入上下文 session_summary_managersummary_manager, # 自定义摘要管理器 user_idxiaoxiaoer, instructions[你是一个智能助手], ) resp agent.run(你好,我是小小儿我喜欢滑雪跑步你是谁) print(resp.content) resp agent.run(我有哪些爱好) print(resp.content)三者如何协同工作层级作用依赖关系Storage存储完整的原始聊天记录和状态基础层Summary 和 Memory 都需要它Memory提取并存储用户画像可在 Storage 之上独立运行Summary压缩过长的历史生成摘要必须与 Storage 配合用于上下文注入from agno.agent import Agent from agno.db.sqlite import SqliteDb from dotenv import load_dotenv from agno.models.deepseek import DeepSeek load_dotenv() #定义大模型 deepseek DeepSeek(iddeepseek-chat) db SqliteDb(db_filesession_store1.db) agent Agent( modeldeepseek, dbdb, # 注入存储后端 instructions[你是一个智能助手], markdownTrue, #会话记忆 add_history_to_contextTrue, # 将历史加入上下文关键 num_history_runs3, # 包含最近3轮对话 # 用户记忆 enable_agentic_memoryTrue, # 自主模式 update_memory_on_runTrue, # 同时自动提取 # 会话摘要 enable_session_summariesTrue, add_session_summary_to_contextTrue, user_idxiaoxiaoer ) resp agent.run(你好,我是小小儿你是谁) print(resp.content) resp agent.run(我是谁) print(resp.content)

相关新闻