跳转到内容

记忆

TomoriBot 有一套持久记忆系统,所以她能跨对话记住事实。这一页讲的是她知道什么(事实、上下文、文档)。至于她如何表现(性格、语气),见多个人格

从最持久到最短暂

层级它是什么能留多久
长期记忆(LTM)保存下来的关于某个用户或某个服务器的事实、上传的文档,以及奖励与惩罚永久,直到有人移除它。/refresh、重启等等都冲不掉
短期记忆(STM)她为某个频道写的摘要,加上最近几条消息24 小时。可以跨频道
聊天历史她正在回复的那个频道里的近期消息只限这个频道,而且只在它们滚出 /config > 行为 > 常规行为 的范围(默认最近 80 条消息)之前有效。/refresh 会立刻切断它

她在对话里看起来「知道」的东西,几乎都只是最近的聊天历史,所以对话一长她就好像忘了某条消息。只有长期记忆是永久的。 STM 夹在中间:适合在不做任何承诺的情况下把一段场景带过频道,但它仍然会过期。

想看清她每一轮究竟拿到什么,见提示词内部

长期记忆是她唯一永久保留的东西。它们不受 /refresh、重启或换频道影响。

长期记忆分两种:

  • 个人记忆/personal memories):关于某个具体用户的事实,例如 「Amaori 喜欢猫」「偏好深色模式」「对花生过敏」。它们绑定在身上,跨所有服务器跟着你走,但她只在你实际参与的对话里才会用到。
  • 服务器记忆/memories):与整个服务器相关的信息, 例如「游戏之夜是每周五晚上 8 点」「禁止发布 NSFW 内容」「#general 用来发公告」。它们留在服务器内部,在那里始终会被考虑到。

默认情况下,记忆按人格隔离。 每个人格(包括副人格)都保有自己的个人记忆与服务器记忆,所以换人格就意味着她记不起另一个人格学过的东西。唯一的例外是在 /personal memories 的全局页面添加的个人记忆,它对你而言会作用于每个人格。服务器记忆没有这种选项,每个人格的服务器记忆集合始终分开,即使在同一个服务器里也一样。

/memories 浏览、添加、编辑、移除服务器记忆,或者把它们移进文档知识库。/personal memories 管理绑定在你身上的事实。记忆会一直保留到你移除它们。

在新服务器里,非管理员成员创建、编辑或移除共享服务器记忆的权限默认是关闭的。拥有 Manage Server 权限的成员始终保有权限,管理员可以通过 /moderation 的成员访问把其他成员加进来。

长期记忆的创建方式只有两种:

  1. 你自己保存,用 /personal memories/memories
  2. 她自己保存,当她判断某件事值得记下来的时候。

她自己保存时,会发一条嵌入说学到了东西。那条嵌入就是确认。 如果你告诉她一件事却没有出现嵌入,那就什么都没保存:它仍然只是聊天历史,所以对话一往前走她就会丢掉它,换个频道也不会有。

如果她不保存你想留下的事,你有三个办法,强制程度依次递增:

  • 直接让她记住。
  • /config > 行为 > 常规行为 加一句提醒,或者用提示词内部里其他携带提示词的指令(/config > 人格 > 高级、/config > 行为 > 常规行为、/config > 频道 > 频道覆盖)。上下文提醒尤其位于她提示词的靠后位置,因此更可能被采纳。像*「鼓励为值得记住的信息创建长期记忆」*这样简单的一句通常就够。要在不写死可能随提供方而变化的东西的前提下按名字引用真正的保存记忆工具,请改用 {memory_tool} 提示词宏,例如 「凡是……就使用 {memory_tool}」
  • 你自己用 /personal memories 保存,这是最可靠的办法。

服务器管理员可以用 /config > 权限 完全关掉她的自我保存。

默认情况下她最多保有 100 条个人记忆100 条服务器记忆。自部署者可以用 .env 变量 MAX_PERSONAL_MEMORIESMAX_SERVER_MEMORIESMAX_MEMORY_LENGTH 修改这些值。调高长度比调高条数要多消耗远远更多的上下文,所以宁可多一些短记忆,也不要少数几条长记忆。

这些条数都是按人格算的,不是按用户或按服务器。每个人格保有自己的那一份,所以一个跑着四个人格的服务器就有四份独立额度。你自己的全局个人记忆会占用每个人格的个人额度。

服务器管理员可以用 RAG 给她文档作参考。文档会被切块并存储为可搜索的嵌入;她回答时会自动检索 相关内容。在新服务器里,文档管理同样默认只限拥有 Manage Server 的成员;管理员可以通过 /moderation 的成员访问授予成员权限。

需要嵌入模型,用 /config > 模型 > 切换模型 配置。见 提供方与模型/memories 里的文档页面提供人格范围与全服务器范围、实时的文档 与分块计数、上传、文档浏览和移除:

  • 把文本、PDF 或 Markdown 文件作为服务器知识上传。范围决定它是只绑定当前人格(默认),还是全服务器供每个人格参考。
  • /learn history:把频道历史提取成可搜索的知识。
  • 逐块浏览已存储的文档。服务器管理员可以编辑单个分块、更新文档的频道标签,或者只删掉一个分块而不移除整份文档。
  • 直接从面板里移除已存储的文档或单个分块。

/learn history 导入频道历史时,prompt 选项会改变 TomoriBot 提取记忆的方式:

  • Conversation 从普通聊天里提取独立的事实。它会解析代词,并在提到日期时间或者可以推断出来时使用绝对时间戳。
  • Roleplay 寻找场景、设定、关系和值得记住的事件,而不试图保留每一个小片段。
  • In-Character 从所选人格的视角提取记忆,把那个人格的提示词、属性、已有记忆和相关文档作为上下文。

提示词会在导入前显示出来,方便你针对频道或场景调整。

历史导入会存成文档,所以 /memories 对它们同样适用。

/conditioning 是一种按人格、按服务器的记忆,会随着时间塑造人格的行为。它比完整的属性或系统提示词更轻量。用它来强化某个特定角色在某个特定服务器里该怎么表现。

每次 /reward/punish 都会被计数,但只有当你给出 reason 时,它才会变成她真正会照做的记忆,在她的提示词里长这样:

## Rewarded Behaviors
Here are past things Tomori did that got rewarded for. Strive to do them again:
- [Tomori was fed by Amaori. Reason: `being extra helpful today` with `cookies`] (2 times)
## Punished Behaviors
Here are past things Tomori did that got punished for. Avoid doing them again:
- [Tomori was bonked by Amaori. Reason: `spamming pings after being told to stop`]

没有 reason 时,计数会被 记录下来,但永远不会出现在她的提示词里。用 /conditioning remove 查看或清除条目。

范围先于其他一切收窄:服务器记忆只会到达它自己服务器的提示词,个人记忆只在那个用户在对话里可见时才会,而两者都只对拥有它们的那个人格生效。在这个范围内,默认每条记忆都会随每次提示词发送。标签会进一步收窄,让某条记忆只在某个关键词出现时、或只在某个频道里激活。用 /config > 行为 > 高级记忆 打开它。

  • 没有关键词标签的记忆始终激活(默认)。
  • 关键词标签的记忆只在关键词出现在可见上下文里时激活。
  • /tool prompt snapshot 查看当前哪些记忆在激活。
  • #channel 标签的记忆只在该频道里激活。
  • 频道标签可以和关键词标签叠加。
  • 如果你在用文档知识库(RAG),频道标签同样作用于文档和提取出来的历史。

/help 里选择 记忆,再选 记忆标签(高级),可以看到 Discord 里的同一份说明。

TomoriBot 能轻松读到她在说话的那个频道里的消息,但 STM 让她在不真正保存长期记忆的前提下做到下面这些:

  1. 在上下文里临时强化频道当前的场景与处境
  2. 临时记住来自其他频道或服务器的对话

她只记得自己参与过的对话。 她只在自己回复时更新频道记忆,别的时候都不更新,所以一个没人跟她说话的繁忙频道不会留下任何痕迹。

每个频道的 STM 默认 24 小时后过期;如果你用 /personal config 选择了退出,你的消息根本不会进入其中。

位置这意味着什么
在服务器里每个频道一份共享记忆,不是每人一份。她不会单独记你的笔记。
在私信里只属于你。
其他频道她能回忆起同一个服务器里另外几个频道的近期对话。
私密频道/config > 频道 > 频道规则 设置过的内容都留在原地,不会出现在别处。
其他服务器永远不会,除非你打开 /personal configcrossserver。即便打开,也只有你自己的对话会跟着你走。
每个人格保有自己的独立记忆,所以换人格就是换记忆。

每个频道的记忆保存最近几条消息,加上她自己写、并随着对话推进刷新的简短摘要。安静几个小时后它会自行淡去。

指令它做什么
/config > 人格 > 记忆查看她为这个频道保存的摘要
/config > 人格 > 记忆修正它,或者自己重写
/personal config / /personal memories选择加入跨服务器回忆,或者清空你自己的
/refresh让她立刻忘掉这个频道
/config > 行为 > 高级记忆她多久更新一次,以及保留多少细节
/config > 行为 > 高级记忆把摘要换成最多 5 个带标签的字段(Current sceneMood……)
/config > 行为 > 高级记忆改写要求她记录时用的措辞
/memories在一个管理员面板里查看并选择性清除当前生效的服务器条目
/config > 权限允许私密频道的记忆出现在别处
/config > 权限打开或关闭这个功能(无论哪种,已存的记忆都会保留)

任何人都可以运行 /config > 人格 > 记忆、/personal config/personal memories。其余的需要管理服务器权限。

工作区管理员可以从 /config行为高级记忆 调整短期记忆。 这些设置作用于工作区当前生效的 STM 记录:

  • Refresh cadence 控制两次刷新提示之间隔多少轮 bot 发言。允许范围是 1 到 100。
  • Render mode 决定分类值是取代近期发言,还是以简化摘要的形式出现。
  • Crude messages 控制保留多少条近期消息,从 1 到该频道上限。
  • Nudge depth 决定刷新提示距离拼接完成的上下文末尾有多远,范围 0 到 20。
  • Content depth 决定 STM 内容距离拼接完成的上下文末尾有多远,范围 −1 到 20。

STM 分类把默认的摘要字段换成最多五个带标签的字段。每个字段按 Label: Description 填写;全部留空则恢复默认的摘要分类。保存分类会 清除不兼容的当前服务器频道 STM,面板会在保存前说明受影响的频道。

STM 提示词让管理员覆盖工具描述和更新提示。留空的覆盖会恢复 实际生效的默认值,包括启用分类时的分类感知提示。


关于她究竟存了什么、以及如何导出或删除,见 数据处理/legal privacy-policy。你可以用 /personal config 完全选择退出记忆功能。