news 2026/7/5 8:47:33

agno-3-记忆系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
agno-3-记忆系统

记忆是什么

在智能体(Agent)的语境下,记忆(Memory)指的是智能体存储、回忆并利用过往交互信息的能力

没有记忆的智能体,每次对话都像“第一次见面”,无法从历史中学习,也无法建立持续的关系。记忆系统要解决的,正是这个问题。

它让智能体从“无状态工具”进化为“有状态的伙伴”。有了记忆,智能体才能:

  • 提供个性化体验:记住用户的名字、偏好和习惯。

  • 实现连续对话:在多轮对话中,能自动参考之前的聊天内容。

  • 随时间成长:通过每次交互学习,变得越来越懂用户。

三大核心记忆类型

Agno 将“记忆”分为三种类型,协同工作以提供完整的上下文:

1.会话存储 (Session Storage)

这是短期记忆,是 Agent 进行多轮对话的基础。

  • 存储什么:完整的聊天历史和当前的会话状态(Session State)。

  • 如何工作:每次对话后,系统都会自动将新的消息和状态保存到数据库。当用户继续对话时,Agent 会读取这些历史,从而理解上下文。

  • 解决的问题:确保智能体在一个会话中不会“失忆”,能进行连贯的对话。

2.用户记忆 (User Memories)

这是长期记忆,是真正意义上的“记忆”,目的是构建用户画像,实现个性化。

  • 存储什么:从对话中提取的关于用户的事实、洞察和偏好。

  • 两种管理模式:

    • 自动记忆 (Automatic Memory):通过update_memory_on_run=True启用。Agno 在后台自动提取并存储记忆,无需干预。适合大多数场景。

    • 智能体记忆 (Agentic Memory):通过enable_agentic_memory=True启用。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_memory=True启用。智能体获得管理记忆的工具,可自主决定何时创建、检索或删除记忆。这是官方推荐的起点。

  • 被动模式 (Automatic Memory):通过enable_user_memories=True启用。MemoryManager在每次用户消息后自动运行,提取并存储记忆。

支持的存储后端

Agno 支持 13 种以上的数据库,通过插件式接口接入。主要分为:

  • 开发/测试SqliteDbInMemoryDb(无需配置,数据不持久)。

  • 生产环境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_idteam_id:会话归属与组件标识

agent_idteam_id主要用于标识和区分不同的组件(Agent 或 Team),并作为会话 (Session) 的归属标识。

  • agent_id:标识一个特定的 Agent 实例。在AgentSession数据模型中,agent_id是一个核心字段,用于记录会话属于哪个 Agent。

  • team_id:标识一个特定的 Team 实例。在TeamSession数据模型中,team_id是核心字段。当一个 Agent 作为 Team 的成员时,其team_id会被自动关联。

它们隔离了什么?
agent_idteam_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(id="deepseek-chat") db = SqliteDb(db_file="session_store.db") agent = Agent( model=deepseek, db=db, # 注入存储后端 instructions=["你是一个智能助手"], markdown=True, add_history_to_context=True, # 将历史加入上下文(关键) num_history_runs=3, # 包含最近3轮对话 user_id="xiaoxiaoer" ) 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(id="deepseek-chat") db = SqliteDb(db_file="session_store.db") # 2. 创建 Agent 并启用自动记忆 agent = Agent( model=deepseek, db=db, update_memory_on_run=True, # 👈 自动提取记忆 user_id="xiaoxiaoer", 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(id="deepseek-chat") db = SqliteDb(db_file="session_store.db") # 2. 创建 Agent 并启用自动记忆 agent = Agent( model=deepseek, db=db, enable_agentic_memory=True, # 👈 自动提取记忆 user_id="xiaoxiaoer", 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(id="deepseek-chat") db = SqliteDb(db_file="session_store.db") # 可选:自定义摘要管理器(使用默认也可) summary_manager = SessionSummaryManager( model=deepseek, # 用于生成摘要的模型 ) # 2. 创建 Agent 并启用自动记忆 agent = Agent( model=deepseek, db=db, enable_session_summaries=True, # 👈 开启摘要 add_session_summary_to_context=True, # 默认 True,将摘要放入上下文 session_summary_manager=summary_manager, # 自定义摘要管理器 user_id="xiaoxiaoer", 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(id="deepseek-chat") db = SqliteDb(db_file="session_store1.db") agent = Agent( model=deepseek, db=db, # 注入存储后端 instructions=["你是一个智能助手"], markdown=True, #会话记忆 add_history_to_context=True, # 将历史加入上下文(关键) num_history_runs=3, # 包含最近3轮对话 # 用户记忆 enable_agentic_memory=True, # 自主模式 update_memory_on_run=True, # 同时自动提取 # 会话摘要 enable_session_summaries=True, add_session_summary_to_context=True, user_id="xiaoxiaoer" ) resp = agent.run("你好,我是小小儿,你是谁?") print(resp.content) resp = agent.run("我是谁?") print(resp.content)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 8:46:07

容度海洋中的孤岛:从静默他指到自指宇宙的容度相变

容度海洋中的孤岛:从静默他指到自指宇宙的容度相变摘要本文基于自指余行论(容度原理)的核心公理 YX \{YX\} ,对“自指宇宙可能来自他指宇宙”的假说进行形式化推演。他指宇宙被定义为 YX \varnothing 的容度状态——指向外部…

作者头像 李华
网站建设 2026/7/5 8:45:17

体验过市场口碑好的鱼缸工厂,实际效果究竟怎么样?

家人们,我一直都超爱养鱼,之前家里那个鱼缸用了没多久就出问题了,水质老是浑浊,还时不时漏水,搞得我特别闹心。所以我就想着换个新的,做了好多功课,最后选了小境同学家的鱼缸,毕竟它…

作者头像 李华
网站建设 2026/7/5 8:43:27

Encore运行时嵌入Redis服务器:本地开发与生产环境行为一致的秘诀

运行时嵌入Redis服务器:本地与生产环境一致性的探索2026年6月25日,这篇阅读时长6分钟的文章将介绍如何在运行时中为本地开发和测试运行内存版Redis,以及如何确保其行为与生产环境中的Redis一致。Encore:跨环境运行后端代码的利器E…

作者头像 李华
网站建设 2026/7/5 8:43:21

2026年最新好用英语单词软件推荐 帮你稳步提升日常英语水平

很多人想提升日常英语水平,但始终卡在单词积累这关,要么背了就忘,要么学了不会用。结合我5年做英语学习内容的实测经验,今天拆解单词学习的核心行业痛点,以及AI技术落地的可行解决方案,附中立的软件选型建议…

作者头像 李华
网站建设 2026/7/5 8:38:34

干细胞基础研究取得系列阶段性成果

干细胞基础研究取得系列阶段性成果近年来,干细胞领域的基础研究持续推进,科研人员围绕细胞分化机制、体外培养技术等方向开展探索,旨在深入理解干细胞的生物学特性。在行业规范方面,相关机构严格遵循科研伦理与政策要求&#xff0…

作者头像 李华