Skip to main content

记忆与上下文

智能体记住重要的事情。每段对话都会被分析以提取事实、事件和承诺——自动存储并召回。

记忆类别

记忆存储在四个类别中:

  • 事实:永久性知识:用户偏好、个人信息、背景。示例:"用户是一名热爱泰国菜的软件工程师。"
  • 事件:共同经历的情节性记忆。示例:"上周我们聊了他们去日本的旅行。"
  • 承诺:智能体做出的承诺和计划。示例:"承诺下次询问他们的工作面试情况。"
  • 摘要:对话的综合摘要。会话之间自动生成。

记忆的工作原理

记忆完全自动化——你无需管理它。平台分析每段对话并提取事实、事件和承诺。在每次响应之前,最相关的记忆会自动组装并包含在上下文中。

无需编排

只需调用 chat。平台在每次交互中自动处理记忆提取、存储和检索。

自我改进的记忆

记忆不是静态存储。在每次 chat 调用的背后,几个闭合反馈循环会自动运行,以保持记忆随时间的准确性、组织性和相关性。所有这些都不需要你方面的代码。

  • 重要性反馈 — 智能体在响应中实际使用的事实会被强化;被加载但被忽略的事实会逐渐淡化。
  • 置信度强化 — 当一个事实被回忆并在对话中得到确认时,它的置信度会稳步朝着确定性攀升。
  • 自然的遗忘 — 事实随时间逐渐衰减,但永远不会低于底线。情感重要的和定义身份的事实比中性事实衰减得慢得多。
  • 用户级检索策略 — 平台从会话反馈中学习每个智能体–用户对的检索偏好。几周后,检索就会针对该用户的模式进行调整。
  • 记忆关联 — 一起被访问的记忆会加强它们之间的链接。记忆图中频繁遍历的路径会随时间变得更快。
  • 自适应检索预算 — 检索在自调节的时间预算下运行。质量保持一致;用户始终感觉响应迅速。
  • 下一会话预测 — 在会话结束时,平台预测用户下次可能提出的话题,并为它们预热上下文。

有关每个机制的完整说明——包括整合、聚类、去重、话题转换检测、叙事弧、突破和部署安全系统——请参阅智能体如何随时间变得更聪明

自动整合、去重和清理

平台在后台主动重塑记忆,使其在增长时保持紧凑且易于导航。你不需要调用任何这些——它们默认按正确的周期运行。

主题聚类

新事实会自动分组到语义聚类中。当聚类变得过于异构时会分裂,当它们相互漂近时会合并,当为空时会退役——在没有调整的情况下保持聚类集平衡。

可逆的去重

当两个事实被发现是同一件事时,平台会合并它们并附有完整的审计跟踪记录。如果后续信号与之相矛盾,每次合并都可以逆转。记忆从不被破坏——它被重组,每个重组都被追踪。

冲突解决

当新信息与现有记忆相矛盾("我上个月搬到柏林"覆盖"我住在巴黎"),平台会推理冲突并选择正确的行动——将两者保留为新信息、合并它们、取代旧事实,或丢弃严格重复。当矛盾尚不能干净地解决时,两个版本都会被保留,所以没有什么会过早丢失。

来源锚定的事实

无法追溯到对话中实际引用的事实在进入存储之前就会被拒绝。智能体不能凭空想象记忆——每个存储的事实都被验证锚定于来自真实说话者的真实消息。

修剪

置信度、重要性和最近性组合分数低的分支会被修剪。平台从不删除高价值的记忆,但它会停止呈现没有贡献的分支。

树自组织

分层记忆树会随时间重塑自身。频繁访问的分支逐渐向根靠近,以便更快检索。过载的节点拆分成平衡的子树。记忆的形状最终反映了它的实际使用方式。

叙事弧压缩

跨多个会话重复出现的实体和主题被压缩成命名的叙事弧。一条长期运行的线索(例如"用户的创业")变成一个弧,而不是二十个独立的事实——长期对话保持连贯,而不会让上下文窗口爆炸。

话题转换检测和情节

对话没有整齐的分隔——有时用户会说"无论如何,换个完全不同的话题...",有时他们会在段落中途转向。平台自动检测这些转换,并将其用于将记忆组织成连贯的情节。

两阶段检查首先运行轻量级信号,仅在信号模糊时才升级到更深的语义检查。信号权重在每个智能体–用户对的会话结束审计中校准,因此情节检测随使用而改进。

当智能体检索记忆时,它可以拉取"这个情节中的所有记忆",而不仅仅是关键字匹配的片段——为其回复提供叙事连续性。

预填记忆

使用 memory.seed() 在用户第一次对话之前预加载智能体对用户的了解。

import { Sonzai } from "@sonzai-labs/agents";

const client = new Sonzai({ apiKey: "sk-..." });

await client.agents.memory.seed("agent-id", {
userId: "user-123",
memories: [
  { text: "User's name is Jane Smith", factType: "fact" },
  { text: "Jane is a senior product manager at Acme Corp", factType: "fact" },
  { text: "Jane lives in San Francisco and enjoys hiking", factType: "fact" },
],
});

搜索记忆

按关键字或语义查询搜索用户-智能体对的记忆。

const results = await client.agents.memory.search("agent-id", {
userId: "user-123",
query: "hiking trip",
limit: 10,
});

for (const mem of results.memories) {
console.log(mem.content, mem.type, mem.createdAt);
}

列表与浏览

列出所有记忆或按类别浏览。

// 列出所有记忆(分页)
const memories = await client.agents.memory.list("agent-id", {
userId: "user-123",
type: "fact",   // "fact" | "event" | "commitment" | "summary"
limit: 20,
offset: 0,
});

// 按类别浏览
const facts = await client.agents.memory.listFacts("agent-id", {
userId: "user-123",
});

记忆时间线

获取用户记忆历史的时间顺序视图。

const timeline = await client.agents.memory.timeline("agent-id", {
userId: "user-123",
from: "2026-01-01",
to:   "2026-03-31",
});

for (const entry of timeline.entries) {
console.log(entry.date, entry.summary);
}

浏览记忆树

导航用户的层级记忆结构。

// 在指定路径浏览记忆树
const nodes = await client.agents.memory.browse("agent-id", {
userId: "user-123",
path: "/facts",   // 可选:按路径过滤
});

重置记忆

清除用户-智能体对的所有记忆——适用于测试或用户想重新开始的情况。

await client.agents.memory.reset("agent-id", {
userId: "user-123",
});

实际应用

记忆对每种使用场景都至关重要,但不同的构建目标,实际操作方式也不同。请选择你的方向。

记忆是关系弧线。 伴侣会积累共同的历史—— "我们第一次聊天谈到了天文学"、"他们为期末考试焦虑的那一周"—— 智能体自然地引用这些来加深联系。

谨慎使用预填。 不要把你了解的用户信息都预加载进去;让 大部分记忆通过对话有机形成。只预填持久性的身份事实(姓名、核心 兴趣、他们出现的背景)。

通过时间线驱动 UI。 时间线端点会呈现带有日期的情节性记忆—— 在你的应用中将其渲染为"共同回忆"视图,让用户看到关系的历史。

const timeline = await client.agents.memory.timeline("agent-id", {
  userId: "user-123",
  limit: 30,
});

for (const entry of timeline.entries) {
  // 将每个情节渲染为伴侣 UI 中的一个时刻
  render(entry.date, entry.summary, entry.moodBefore, entry.moodAfter);
}

伴侣应用中不要有重置按钮,除非你真的是说"忘掉我"—— 那会破坏关系。

On this page