Skip to content

记忆系统

记忆系统是 Snail AI 平台为智能体提供对话上下文延续能力的核心模块。通过记忆系统,智能体可以在多轮对话中记住用户的偏好、已做出的决策、正在进行的任务等关键信息,从而提供更加个性化和连贯的对话体验。

核心概念

什么是记忆?

在 Snail AI 中,"记忆"是从对话中自动提取出的结构化信息片段。每条记忆包含标题、内容、类型、置信度等属性,并以向量形式存储在向量数据库中,以便后续通过语义相似度进行高效召回。

与传统的"完整对话历史"不同,记忆系统通过智能提取和压缩,将冗长的对话历史浓缩为关键信息点,既节省了 Token 开销,又保留了对话的核心上下文。

记忆类型

Snail AI 将记忆按语义分为以下五种类型:

类型标识说明示例
事实FACT用户或对话中出现的客观事实信息"用户的公司使用 Java 17 和 Spring Boot"
决策DECISION对话中做出的决定或达成的共识"决定使用 PostgreSQL 作为主数据库"
偏好PREFERENCE用户表达的个人偏好和习惯"用户偏好使用函数式编程风格"
任务进度TASK_PROGRESS正在进行的任务的进度信息"数据迁移任务已完成 70%,还剩 3 个表"
参考资料REFERENCE对话中提及的有价值的参考信息"项目架构图在 Confluence 的 /arch/overview 页面"

记忆状态

每条记忆有三种状态,用于管理记忆的生命周期:

状态标识说明
激活ACTIVE记忆处于活跃状态,可被检索和注入到对话上下文中
已归档ARCHIVED记忆被归档,不会被自动检索,但仍保留在系统中
已压制SUPPRESSED记忆被压制/屏蔽,不参与任何检索,通常用于标记错误或不再需要的记忆

状态转换关系如下:

ACTIVE ←→ ARCHIVED
ACTIVE ←→ SUPPRESSED
ARCHIVED → ACTIVE(重新激活)
SUPPRESSED → ACTIVE(重新激活)

记忆架构

Snail AI 的记忆系统采用短期记忆 + 长期记忆的双层架构,模拟人类记忆的工作模式:

短期记忆(滑动窗口)

短期记忆通过滑动窗口机制实现,保留最近 N 条对话消息作为即时上下文。

参数说明默认值
窗口大小保留的最近消息条数20 条
配置位置智能体配置中的 shortTermMemorySize 字段可在智能体配置页面修改

工作原理:当对话消息数超过窗口大小时,最早的消息会被移出窗口。滑动窗口中的消息会完整地作为上下文发送给大语言模型,确保智能体能理解当前对话的即时语境。

长期记忆(向量召回)

长期记忆通过向量化存储和语义检索实现,适用于跨对话、跨时间的信息持久化。

工作流程

  1. 记忆提取:系统按配置的间隔(默认每 4 轮对话),使用 LLM 从对话内容中自动提取关键信息,生成结构化的记忆条目。
  2. 向量化存储:提取的记忆通过 Embedding 模型转化为向量,存储在向量数据库中。
  3. 语义检索:当新的对话开始时,系统根据当前对话内容进行语义相似度搜索,召回相关的历史记忆。
  4. 上下文注入:召回的记忆被注入到对话上下文中,帮助智能体理解用户的历史背景。

存储后端

长期记忆支持两种存储后端,适用于不同的部署场景:

存储后端适用场景说明
内存存储单节点开发/测试记忆存储在 JVM 内存中,应用重启后数据丢失
数据库存储生产环境/分布式部署记忆持久化到向量数据库(PgVector/Milvus/Elasticsearch),支持多节点共享

记忆与智能体的关系

记忆系统通过**记忆库(Memory Config)**与智能体关联:

  1. 管理员在「记忆系统」中创建和配置记忆库,包括选择 Embedding 模型、向量存储实例、配置提取参数等。
  2. 在智能体的配置页面中,启用「记忆」开关,并选择要绑定的记忆库。
  3. 同一个记忆库可以被多个智能体共享,也可以为每个智能体创建独立的记忆库。

设计理念

记忆库与智能体解耦设计,使得记忆配置可以独立管理和复用。一个通用的记忆库配置可以同时服务于多个业务场景的智能体。

记忆数据模型

每条记忆包含以下核心字段:

字段类型说明
idnumber记忆唯一标识
agentIdnumber所属智能体 ID
userIdnumber所属用户 ID
conversationIdstring来源对话 ID
memoryTypeenum记忆类型(FACT/DECISION/PREFERENCE/TASK_PROGRESS/REFERENCE)
titlestring记忆标题
contentstring记忆内容
tagsstring[]标签列表
relevanceScorenumber相关性评分(0-1)
confidenceScorenumber置信度评分(0-1)
statusenum记忆状态(ACTIVE/ARCHIVED/SUPPRESSED)
accessCountnumber被检索访问的次数
vectorIdstring在向量数据库中的向量 ID
createDtstring创建时间
updateDtstring最后更新时间

功能概览

记忆库管理

在「记忆系统」管理页面,以卡片网格形式展示所有已创建的记忆库。每张卡片显示:

  • 记忆库名称
  • 绑定的 Embedding 模型 ID
  • 向量维度
  • 最大召回数和相似度阈值
  • 状态(启用/禁用)
  • 关联的向量存储实例

卡片支持以下操作:

  • 点击卡片:进入记忆检索与调试界面。
  • 编辑:修改记忆库的配置参数。
  • 删除:删除记忆库。

搜索与过滤

  • 支持按记忆库名称关键词搜索。
  • 列表顶部显示记忆库总数。

启用记忆的步骤

  1. 创建记忆库:在「记忆系统」页面创建新的记忆库,配置 Embedding 模型和存储参数。详见 记忆库配置
  2. 绑定智能体:在智能体配置页面,启用「记忆」开关,选择刚创建的记忆库。
  3. 开始对话:与智能体对话时,系统会自动进行记忆提取和检索。
  4. 监控调试:通过记忆检索与调试界面查看记忆的提取和召回效果。详见 记忆检索与调试

下一步

Apache 2.0 Licensed