尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Agno 02_agents 示例详解:用 MemoryManager 与 LearningMachine 为 Agent 构建跨会话持久记忆

Agno 02_agents 示例详解:用 MemoryManager 与 LearningMachine 为 Agent 构建跨会话持久记忆 Agno 02_agents 示例详解用 MemoryManager 与 LearningMachine 为 Agent 构建跨会话持久记忆【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno本文围绕 Agno 仓库cookbook/02_agents/06_memory_and_learning目录中的两个官方示例展开memory_manager.py演示如何为 Agent 提供跨会话的持久记忆MemoryManagerlearning_machine.py演示如何基于 LearningMachine 实现 agentic 模式的用户画像学习。读完本文你将理解两种记忆机制的适用边界、关键参数enable_agentic_memory、LearningMode.AGENTIC、记忆数据库注入等的作用方式并能按文档给出的环境配置直接复现这两个可运行的完整示例。一、文档定位与示例文件清单cookbook/02_agents/06_memory_and_learning是 Agent 章节02_agents下专门演示持久记忆与学习行为persistent memory and learning behavior的示例目录。目录中的 README.md 列出了两个核心文件文件作用learning_machine.py演示基于 LearningMachine 的学习能力以 agentic 模式维护用户画像memory_manager.py使用 MemoryManager 为 Agent 提供跨会话的持久记忆两个示例的共同思路是在两次独立的交互之间Agent 能把第一次交互中获得的信息姓名、偏好沉淀下来并在第二次交互中被主动调用。区别在于沉淀的载体与机制MemoryManager 走记忆捕获 记忆检索路线LearningMachine 则走结构化学习类型用户画像、实体记忆、决策日志等路线。二、前置条件与环境准备README 给出的运行前置条件原文完整继承使用direnv allow加载环境变量其中必须包含OPENAI_API_KEY通过./scripts/demo_setup.sh创建演示环境对应仓库根目录的 scripts/demo_setup.sh随后使用.venvs/demo/bin/python运行 cookbook部分示例依赖可选的本地服务例如 pgvector或特定服务商的 API Key。运行命令统一为.venvs/demo/bin/python cookbook/02_agents/06_memory_and_learning/file.py两个示例都使用OpenAIResponses模型因此OPENAI_API_KEY是硬性依赖而记忆/学习数据的落盘在本示例中使用 SQLite不需要额外数据库服务。三、示例一MemoryManager 跨会话持久记忆3.1 完整示例代码cookbook/02_agents/06_memory_and_learning/memory_manager.py 的完整内容如下 Memory Manager Use a MemoryManager to give agents persistent memory across sessions. from agno.agent import Agent from agno.db.sqlite import SqliteDb from agno.memory.manager import MemoryManager from agno.models.openai import OpenAIResponses # --------------------------------------------------------------------------- # Create Agent # --------------------------------------------------------------------------- db SqliteDb(db_filetmp/memory_demo.db) agent Agent( modelOpenAIResponses(idgpt-5.2), dbdb, # Enable agentic memory so the agent can store and retrieve memories enable_agentic_memoryTrue, # Provide a MemoryManager for structured memory operations memory_managerMemoryManager( dbdb, modelOpenAIResponses(idgpt-5-mini), ), markdownTrue, ) # --------------------------------------------------------------------------- # Run Agent # --------------------------------------------------------------------------- if __name__ __main__: # First interaction: tell the agent something to remember agent.print_response( My name is Alice and I prefer Python over JavaScript., streamTrue, ) print(\n--- Second interaction ---\n) # Second interaction: the agent should recall the preference agent.print_response( What programming language do I prefer?, streamTrue, )示例的验证逻辑非常直接第一次交互向 Agent 陈述My name is Alice and I prefer Python over JavaScript.第二次交互提问What programming language do I prefer?。如果 Agent 能回答出 Python说明记忆已成功持久化并在会话间被召回。3.2 关键参数解读db SqliteDb(db_filetmp/memory_demo.db)记忆与运行状态的落盘位置。同一个db实例同时传给Agent和MemoryManager保证记忆读取/写入与 Agent 会话数据使用同一个存储后端。SqliteDb来自agno.db.sqlite是本地零依赖的默认选择生产环境可替换为其他实现仓库 libs/agno/agno/db 下还有 PostgreSQL、Mongo、Redis 等后端。enable_agentic_memoryTrue开启 agentic memory使 Agent 自身具备存储与检索记忆的工具能力源码注释即Enable agentic memory so the agent can store and retrieve memories。memory_managerMemoryManager(dbdb, modelOpenAIResponses(idgpt-5-mini))提供结构化的记忆管理操作。注意这里使用了一个更小、更廉价的模型gpt-5-mini来执行记忆管理而不是与主 Agent 相同的gpt-5.2——记忆捕获本质上是辅助任务用轻量模型控制成本是合理的工程做法。两次print_response调用未显式传user_id默认用户下两次交互共享同一记忆命名空间因此偏好可以跨会话召回。3.3 源码级实现MemoryManager 到底做了什么MemoryManager定义在 libs/agno/agno/memory/manager.py。从源码结构看它是一个 dataclass核心字段包括model执行记忆管理记忆捕获、去重、更新所用的模型。若未提供get_model()会回退到OpenAIChat(idgpt-4o)见 manager.py#L112-L123并在缺少openai包时打印明确的安装提示后退出。system_message/memory_capture_instructions/additional_instructions分别用于覆盖默认的 Manager 系统消息、默认的记忆捕获指令以及追加附加指令。这三个参数是让记忆行为可定制的入口默认值即可满足示例场景。四个数据库工具开关delete_memories、clear_memories、update_memories、add_memories决定 Manager 向 Agent 暴露哪些记忆操作工具。注意__init__签名中的默认值为delete_memoriesFalse、clear_memoriesFalse、update_memoriesTrue、add_memoriesTrue见 manager.py#L77-L93即默认只开放增、改不开放删、清这与示例中不做删除操作的行为一致。db类型标注为Optional[Union[BaseDb, AsyncBaseDb]]见 manager.py#L73即同步/异步数据库基类均可。示例中读取记忆走read_from_db()当未指定user_id时调用db.get_user_memories()读取全部记忆并按user_id分组成字典见 manager.py#L125-L139。这解释了为什么示例中同一个user_id空间内的两次交互能互相记住对方。debug_mode置为True可打开 Manager 内部的调试日志排查为什么这条记忆没有被捕获时很有用。另外Manager 内部定义了一个MemorySearchResponse模型字段为memory_ids用于按语义相似度返回与查询最匹配的记忆 ID见 manager.py#L36-L42说明记忆召回支持基于相似度的检索路径。四、示例二LearningMachine 的 Agentic 学习4.1 完整示例代码cookbook/02_agents/06_memory_and_learning/learning_machine.py 的完整内容如下 Learning Machine Learning Machine. from agno.agent import Agent from agno.db.sqlite import SqliteDb from agno.learn import LearningMachine, LearningMode, UserProfileConfig from agno.models.openai import OpenAIResponses # --------------------------------------------------------------------------- # Setup # --------------------------------------------------------------------------- agent_db SqliteDb(db_filetmp/agents.db) # --------------------------------------------------------------------------- # Create Agent # --------------------------------------------------------------------------- agent Agent( nameLearning Agent, modelOpenAIResponses(idgpt-5.2), dbagent_db, learningLearningMachine( user_profileUserProfileConfig(modeLearningMode.AGENTIC), ), markdownTrue, ) # --------------------------------------------------------------------------- # Run Agent # --------------------------------------------------------------------------- if __name__ __main__: user_id learning-demo-user agent.print_response( My name is Alex, and I prefer concise responses., user_iduser_id, session_idlearning_session_1, streamTrue, ) agent.print_response( What do you remember about me?, user_iduser_id, session_idlearning_session_2, streamTrue, )与 MemoryManager 示例相比这个示例刻意强调了跨会话cross-session两次print_response使用同一个user_idlearning-demo-user但不同的session_idlearning_session_1/learning_session_2。第一次会话陈述姓名与偏好My name is Alex, and I prefer concise responses.第二次会话直接提问What do you remember about me?——如果学习成果按用户而非会话维度持久化第二次会话应当能复述出这两条信息。4.2 关键参数解读learningLearningMachine(...)Agent通过learning参数挂载学习系统。LearningMachine是学习模块的统一入口模块文档字符串libs/agno/agno/learn/init.py将其描述为Unified learning system与 Config学习类型配置、Schemas学习类型数据结构、Stores存储后端四大组件共同构成agno.learn包。UserProfileConfig(modeLearningMode.AGENTIC)只启用用户画像这一种学习类型并指定其模式为AGENTIC。LearningMode是定义在 libs/agno/agno/learn/config.py 中的枚举UserProfileConfig在 config.py#L57。从命名与枚举设计可以推断AGENTIC 模式意味着由模型自主决定何时提取/更新画像字段而不是按固定规则硬编码捕获。agent_db SqliteDb(db_filetmp/agents.db)学习数据同样依赖db落盘且文件与 MemoryManager 示例tmp/memory_demo.db相互独立避免两个演示互相污染。4.3 源码级实现learn 模块的结构libs/agno/agno/learn 包的__init__.py导出了完整的组件面见 learn/init.py#L41-L67主类LearningMachine实现位于 learn/machine.py#L82六种学习类型的 ConfigUserProfileConfig用户画像、UserMemoryConfig用户记忆、EntityMemoryConfig实体记忆、SessionContextConfig会话上下文、LearnedKnowledgeConfig习得知识、DecisionLogConfig决策日志对应的 SchemasUserProfile、Memories、EntityMemory、SessionContext、LearnedKnowledge、DecisionLog对应的 StoresUserProfileStore、UserMemoryStore、EntityMemoryStore、SessionContextStore、LearnedKnowledgeStore、DecisionLogStore以及通用基类LearningStore。也就是说示例中只开了UserProfileConfig一项但同一套机制还可以按需叠加实体记忆、决策日志等其它学习类型——每种类型都有独立的 Config / Schema / Store 三元组彼此正交。此外learn包还包含curate.py学习成果的整理/精炼与migrations.py存储迁移等支撑模块说明学习数据在持久化层面有版本演进能力。五、两种机制的对比与选型维度MemoryManagermemory_manager.pyLearningMachinelearning_machine.py启用方式Agent(enable_agentic_memoryTrue, memory_managerMemoryManager(...))Agent(learningLearningMachine(user_profileUserProfileConfig(...)))记忆载体非结构化记忆条目存于db.get_user_memories()可读取的用户记忆表结构化学习类型用户画像等按类型分 Store辅助模型示例中显式指定gpt-5-mini降低记忆管理成本由学习模式如 AGENTIC驱动未单独指定用户隔离示例未显式传user_id使用默认用户显式传user_id并跨两个session_id验证典型问题我偏好什么语言单点事实召回你记得我什么画像式复述选型建议如果只需要记住用户说过的事实并能在后续会话中召回MemoryManager 方案更直接如果需要把用户信息沉淀为可管理、可演进的画像/实体/决策日志等结构化资产配合libs/agno/agno/learn中六种学习类型则应使用 LearningMachine。两者都要求为Agent与记忆/学习组件注入同一个db实例这是示例中最容易被忽略的隐性契约。六、测试记录与复现cookbook/02_agents/06_memory_and_learning/TEST_LOG.md 记录了 2026-02-13 的验证结果learning_machine.pyPASS5 秒内完成Ran successfully and produced expected outputmemory_manager.pyPASS9 秒内完成同样成功产出预期输出测试环境为.venvs/demo/bin/pythonpgvector 服务处于运行状态。复现步骤与 README 一致# 1. 允许 direnv 加载 .env需包含 OPENAI_API_KEY direnv allow # 2. 创建 demo 虚拟环境 ./scripts/demo_setup.sh # 3. 分别运行两个示例 .venvs/demo/bin/python cookbook/02_agents/06_memory_and_learning/memory_manager.py .venvs/demo/bin/python cookbook/02_agents/06_memory_and_learning/learning_machine.py运行后可检查tmp/memory_demo.db与tmp/agents.db两个 SQLite 文件确认记忆/学习数据确实被持久化。七、小结06_memory_and_learning目录虽然只有两个示例脚本但完整覆盖了 Agno Agent 的两条记忆/学习技术路线MemoryManager 路线enable_agentic_memoryMemoryManager(db..., model...)通过 libs/agno/agno/memory/manager.py 中的可定制系统消息、记忆捕获指令与增/改/删/清四个工具开关实现跨会话的事实记忆LearningMachine 路线learningLearningMachine(user_profileUserProfileConfig(modeLearningMode.AGENTIC))依托 libs/agno/agno/learn 中Config—Schema—Store三件套把用户画像等学习成果结构化地按用户维度持久化并用不同session_id验证跨会话生效。两条路线都以显式注入共享db为前提都可用仓库自带的scripts/demo_setup.sh环境直接复现适合作为在生产 Agent 中引入长期记忆前的最小可行验证方案。【免费下载链接】agnoBuild, run, and manage agent platforms.项目地址: https://gitcode.com/GitHub_Trending/ag/agno创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表