- 支持跨会话的连续对话体验;
- 让智能体在多次交互中保留学习成果和用户特定信息;
- 减少重复询问,提升满意度与效率;
- 支撑长期策略优化,如个性化推荐或任务追踪。
统一入口:LongTermMemory
无论使用哪种后端,均通过统一的 veadk.memory.long_term_memory.LongTermMemory 接入。它可直接作为智能体的记忆服务,并根据 backend 选择存储后端。
参数
向量类后端(
local、opensearch、redis)会对记忆做向量化,需要安装扩展依赖并配置 embedding 模型。viking、mem0、openviking 与 tos_context 使用外部服务,无需本地 embedding。选择后端
调试可以用local;生产环境可根据已有云服务和数据管理要求选择 viking、mem0 或 tos_context
绑定到智能体
把long_term_memory 传给 Agent 后,智能体会自动获得 load_memory 工具,可在运行时检索过往会话。
记忆管理
写入:add_session_to_memory
会话结束或达到某个节点时,调用异步方法 add_session_to_memory 把会话持久化。LongTermMemory 会根据自动保存策略过滤事件,默认只保留用户文本事件以提升检索质量;你也可以通过 auto_save_memory_policy 参数自定义过滤规则,再交给后端写入。
add_session_to_memory 接受可选的 auto_save_memory_policy 关键字参数,用于覆盖默认过滤策略:
检索:search_memory
除了智能体运行时通过 load_memory 自动检索,你也可以直接调用异步方法 search_memory 做语义搜索,用于调试或自定义 RAG:
get_user_profile(user_id) 仅 viking 后端支持,用于获取用户画像;其他后端会返回空字符串。自动保存会话
在初始化Agent 时开启 auto_save_session=True 并配置好长期记忆,VeADK 会自动把会话写入长期记忆,无需手动调用 add_session_to_memory。
MIN_MESSAGES_THRESHOLD 与 MIN_TIME_THRESHOLD 两个环境变量自定义保存周期:默认在累计 10 条 event 或间隔 60 秒时触发保存;此外,当切换 session_id 并发起新问答时,VeADK 会自动把上一个会话写入长期记忆。
自动保存采用增量写入:每次触发保存时只持久化自上次保存以来新增的事件,而非整个会话。如果两次保存之间没有新事件,则跳过写入。
控制保存内容:auto_save_memory_policy
Agent 接受 auto_save_memory_policy 参数,用于控制自动保存时哪些事件会被写入长期记忆。该参数同样作为 auto_save_memory_policy 关键字参数传递给 add_session_to_memory。
参数类型为 MemoryAutoSavePolicyInput,接受以下形式之一:
- 字符串预设值:
"default"、"all"或"custom"; MemoryAutoSavePolicy实例;- 与
MemoryAutoSavePolicy字段同构的dict; None(等效于"default")
使用预设字符串:
MemoryAutoSavePolicy 实例进行精细控制:
MemoryAutoSavePolicy 的完整字段:
MemoryEventType 包含以下事件类型:text、thought、function_call、function_response、tool_call、tool_response、media、executable_code、code_execution_result、transcription、error。
预设字符串提供快捷配置。传入
MemoryAutoSavePolicy 实例或 dict 时,以 preset 指定的基础预设为起点,仅显式设置的字段会覆盖预设值,其余字段保持预设的默认行为。跨会话示例
先完成模型配置和本地记忆 embedding 配置,再运行端到端流程:会话 #1 告诉智能体一个事实并自动归档,然后在全新的会话 #2 提问,智能体通过检索长期记忆(而非上下文窗口)回忆起该事实。这里用local 后端,需要 pip install "veadk-python[extensions]"。
隔离和保存边界
长期记忆不等于永久保存:local 只在当前实例内存中保留数据,而且不按用户过滤检索。Mem0 不把 index 当作服务端隔离标识;OpenViking 需要明确 owner/context 和 peer 映射。应按后端说明确定应用与用户隔离,不能仅凭 LongTermMemory 构造参数推断
自动保存的时间阈值不是后台定时任务,进程退出前也不保证触发最后一次保存;对必须保留的信息应主动调用保存并检索验证。search_memory() 返回空列表时也可能发生了后端错误。手动重复保存完整会话可能重复写入,自动保存的增量行为不适用于任意重复手动调用
上文记忆管理代码为同一异步流程中的片段:先为 APP_NAME、USER_ID、SESSION_ID 赋值并确认查询得到非空 Session,再调用保存;完整入口见跨会话示例。启用 all 策略会将思考、工具输入输出和媒体信息发送到存储服务,执行前确认这些内容适合保留