智能体记忆:从对话历史到持久化知识
文章深入探讨了AI智能体记忆的概念、类型及其重要性。LLM本身是无状态的,但通过不同类型的记忆(如对话记忆、语义记忆、情景记忆、程序记忆、实体记忆、工作记忆和摘要记忆),智能体可以实现持续交互和个性化服务。文章还讨论了记忆系统的挑战,包括判断什么应该被记住、何时更新、如何检索以及防止记忆泄露。最后,介绍了Oracle的AI Agent Memory Package (OAMP) 如何利用AI数据库实现高效的智能体记忆管理。
智能体记忆是当前人工智能领域一个令人着迷的概念。大语言模型(LLM)本质上是无状态的,这意味着它们没有过去交互的记忆或意识。每次向LLM发送的提示都被视为完全孤立的事件。然而,当你与AI智能体进行持续对话时,它似乎能记住之前的消息。这实际上是界面在“假装”记忆——智能体在后台将整个对话历史重新发送给LLM,作为一个巨大的组合提示。
为了让智能体真正拥有记忆,不同组织、研究人员和独立开发者都在努力破解这一难题。一旦智能体能够记住,整个交互方式就会改变:它可以基于学到的信息构建,适应使用者,在重启后恢复工作,并产生连续性。
最近,本文作者与Oracle的Richmond Alake进行了深入交流,他一直在从事智能体记忆的研究。他们的对话涵盖了不同类型的记忆、记忆为何比听起来更困难,以及如何构建在生产环境中真正有用的记忆系统。
七种记忆类型
对话记忆是最常见的记忆类型,它存储用户与助手之间的消息交换。如果用户问“我刚才说这项任务的最终目标是什么?”,智能体需要访问对话才能回答。但这种记忆系统容易出现问题:最直接的尝试是将之前的消息不断附加到提示中。短期内有效,但对话过长时,模型会接收到一个包含重要细节、过时信息和完全不相关内容的巨大上下文块。真正的记忆工程需要决定存储什么、存储在哪里、如何检索,以及何时需要总结、遗忘或压缩。
语义记忆存储持久性事实,这些事实应该超出具体对话而存在。例如“用户更喜欢Python而非TypeScript进行后端开发”。语义记忆通过向量搜索实现,智能体无需重放完整对话,只需检索与当前请求相关的少数持久性事实。
情景记忆存储事件,记录“发生了什么”。例如“智能体搜索了最近的API网关模式”或“工作流在合规审查步骤失败”。这对于调试、审计和长期运行的工作流特别有用,通常受益于结构化存储。
程序记忆是关于“如何做”的记忆,帮助智能体改进流程。例如调查失败部署时,先检查日志,再检查配置变更,然后检查依赖更新。这使智能体能在混乱的现实环境中重用经过验证的方法。
实体记忆存储关于特定人物、账户、项目、系统、工单或对象的事实。例如“Acme公司有严格的数据驻留要求”。这要求记忆系统具有强作用域功能,防止不同用户或项目之间的上下文泄露。
工作记忆是当前任务的短期暂存区,用于临时信息。它通常不需要持久化,因为如果每个临时想法都存储为长期记忆,记忆库会很快变得嘈杂,智能体可能将不成熟的假设当作事实。
摘要记忆解决上下文窗口限制问题。当对话过长时,需要压缩。智能体发送摘要而非全部80轮对话,例如“用户正在构建SaaS客服智能体,偏好Python和FastAPI,部署在OCI上,希望智能体在草拟回复前检索过往工单。”
记忆的挑战
记忆看似简单,但真正的困难在于判断,而非存储。智能体需要区分哪些细节值得记住,哪些只是临时上下文。此外,记忆需要更新策略:当用户改变偏好时,旧记忆是删除、覆盖还是保留时间戳?检索多少记忆也很关键:太少会丢失上下文,太多则引入噪音。防止记忆泄露同样重要,尤其是在多用户或多租户的企业系统中。最终,记忆应改善智能体行为:减少重复问题、提高连续性、降低令牌使用率、提升相关性。如果记忆只增加复杂性而不改善结果,则没有价值。
Oracle的智能体记忆方案
Oracle正在通过Oracle AI Agent Memory Package(OAMP)应对这一挑战,该包基于Oracle AI Database 26ai构建。这是一种AI数据库,能够存储和查询AI应用所需的数据类型——不仅包括传统的行和列,还包括嵌入向量、JSON文档、文本搜索和常规SQL。这些数据在数据库中并存,智能体无需在多个系统间切换来获取上下文。
OAMP提供以下核心功能:
- 用户和智能体:用于作用域记忆所有权
- 记忆:用于持久性事实和提取的知识
- 线程:用于对话历史和连续性
- 上下文卡片:用于紧凑、即用型记忆检索
- 摘要:用于长对话
- 向量搜索:用于语义回忆
- 数据库持久化:确保重启后记忆不丢失
以下是一个简单代码示例,展示了使用OAMP的基本流程:
from oracleagentmemory.core import OracleAgentMemory
from oracleagentmemory.core.llms import Llm
client = OracleAgentMemory(
connection=connection,
embedder="text-embedding-3-small",
llm=Llm("gpt-5.5"),
extract_memories=True,
schema_policy="create_if_necessary",
)
client.add_user("angie", "Developer exploring agent memory patterns.")
client.add_agent("memory-demo-agent", "Assistant that demonstrates Oracle AI Agent Memory.")
client.add_memory("Angie is fascinated by agent memory and prefers practical examples over abstract explanations.", user_id="angie", agent_id="memory-demo-agent")这段代码展示了OAMP如何通过OracleAgentMemory客户端桥接智能体应用和Oracle AI数据库。数据库连接指定记忆存储位置,嵌入器将记忆文本转化为向量用于语义检索,LLM支持自动记忆提取和摘要生成。用户和智能体注册实现记忆所有权作用域,防止跨用户或跨智能体的上下文泄露。
OAMP的设计理念是:智能体记忆不仅仅是向量搜索问题,有些记忆需要语义检索,有些需要有序读取或精确SQL过滤。基于数据库的记忆系统能够支持所有这些模式。
总之,智能体记忆是一个充满挑战但潜力巨大的领域。通过理解不同类型的记忆并采用合适的存储和检索策略,开发者可以构建出真正具有连续性和适应性的AI智能体。Oracle的OAMP为这一目标提供了一个强大的基础设施。