Qurio / backend-python /docs /AGNO-memory-integration.md
veeiiinnnnn's picture
Add backend-python and Dockerfile
4ef118d

AGNO 长期记忆集成说明

目标

现行逻辑概要

  1. 设置页的开关同步到 chatStore.memoryEnabled,并在 /api/stream-chat 请求中附带 enableLongTermMemory;后端只有这个字段为 true(与 enable_long_term_memory 相等)且请求包含合法 userId 时才会启动记忆读写。
  2. 记忆写入/读取走 AGNO memory manager,所有流量都到 backend-python 的 agent(主 agent 或 lite agent);前端只负责传 Supabase 配置与开关状态。
  3. Supabase 参数由前端通过 databaseProvider/databaseConfig 传递,后端在 agent_registry._build_memory_kwargs 中识别 provider 为 supabase 才创建 PostgresDb 连接并设置 update_memory_on_run=True
  4. 多 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_memoryuser_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 无效,就不会做记忆操作。