Spaces:
Running
Running
AGNO 长期记忆集成说明
目标
- 终结当前自建的长期记忆逻辑,改用 AGNO 官方 memory 路径(参考 https://docs.agno.com/context/memory/overview 和 https://docs.agno.com/context/memory/working-with-memories/overview)。
- UX 端保留“长期记忆”开关,控制
enableLongTermMemory参数,后台只有在这个标记及enable_long_term_memory为 true 时才读写记忆。 - 目前仅使用 Supabase 作为数据源,但保留 provider 等级的结构以便未来扩展。
- 后端位于
backend-python,由它调用 AGNO memory manager 与 Supabase 同步。
现行逻辑概要
- 设置页的开关同步到
chatStore.memoryEnabled,并在/api/stream-chat请求中附带enableLongTermMemory;后端只有这个字段为 true(与enable_long_term_memory相等)且请求包含合法userId时才会启动记忆读写。 - 记忆写入/读取走 AGNO memory manager,所有流量都到
backend-python的 agent(主 agent 或 lite agent);前端只负责传 Supabase 配置与开关状态。 - Supabase 参数由前端通过
databaseProvider/databaseConfig传递,后端在agent_registry._build_memory_kwargs中识别 provider 为supabase才创建PostgresDb连接并设置update_memory_on_run=True。 - 多 agent 共用同一 Supabase 数据库且启用
update_memory_on_run,任何一个 agent 写入的记忆都对其他 agent 可见。
数据库/表结构说明
- AGNO memory 会在 Supabase 内部自动建表(通过
postgresql://postgres:<service-role>@db.<project>.supabase.co:5432/postgres?sslmode=require),无需手动创建。 - 未来新增 provider 只需在 UI/配置里增加选项,并在
agent_registry.build_memory_agent中传入 provider/model 即可。
需要注意
- Supabase 变更时同步前端的 database 配置与
backend-python/.env(比如DATABASE_PROVIDER)。 - “长期记忆”开关与
enable_long_term_memory必须一致:开关决定前端是否传参,后端才有开关值可读。 - 记忆数据不再存到 local storage 或临时会话,只存在 AGNO + Supabase。
记忆优化与多 agent 共享
- 记忆优化通过
agent.memory_manager.optimize_memories(..., strategy=MemoryOptimizationStrategyType.SUMMARIZE)压缩 token,默认以当前 agent 的 lite 模型为标准。 - 多 agent 共享只要统一指向 Supabase 并打开
update_memory_on_run,任何一个 agent 写入的记忆都对其它 agent 可见。 memory_service.optimize_user_memories允许传provider/model/base_url/api_key,方便手动调度时传 agent lite metadata。
自动优化策略
StreamChatService完成 run 后检查request.enable_long_term_memory、user_id与 lite agent memory_manager;满足条件才继续。- 若记忆数 ≥ 50 且距上次优化 ≥ 12 小时,后台自动执行
memory_manager.optimize_memories(..., strategy=SUMMARIZE, apply=True),以asyncio.to_thread在后台运行,避免每次会话都跑。 - 这个流程遵循 AGNO “batch memories should auto-summarize” 最佳实践,并只在
enable_long_term_memory为 true 时有效。
常见 WARN:Supabase credentials missing
- 看到
Supabase credentials are missing; cannot initialize AGNO memory store.或Memory requested but Supabase memory store is unavailable.时说明 ENV 里缺SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY(service-role key,必须在 Supabase 控制台拿)。 - 只有在
enable_long_term_memory(即开关)为 true 的情况下才会触发该逻辑;关闭开关或让前端传enableLongTermMemory: false就不会触发 WARN。 - 准备好 credentials 后再打开放记忆功能,AGNO 会自动在 Supabase 建表,警告也会消失。
备选 Agent 与 lite 模型兜底
- 记忆 API 使用当前上下文的 lite 配置:前端在
/api/stream-chat中附加memoryProvider/memoryModel/memoryBaseUrl/memoryApiKey(优先取当前 agent 的 lite 设置,否则 fallback 到默认 agent)。 - 主 agent 即便用高质量模型,记忆读写/优化也始终沿用 lite 配置,既避免高 token 成本,又保留未来切 provider 的弹性。
- 无论主 agent 还是 lite fallback,只要
enable_long_term_memory关闭、请求少了userId或 memory_manager 无效,就不会做记忆操作。