Wiki / Core Features / AI 回复 / AI 记忆

AI 记忆

更新者 Maxime_48 · 28分钟前 · 浏览量:233

语言: English Français Deutsch Español Português (Brasil) Italiano Nederlands Polski Türkçe Русский 日本語 한국어 中文

AI 记忆让 YAWBDB 为服务器保存有用的上下文,使 AI 的回复随着时间推移越来越一致。

有两方会往里写入:你(在面板里),以及机器人(它会记下在 Discord 对话中了解到的内容)。记忆系统在面板里管理,里面的任何内容都不会被自动删除。

AI 记忆页面:列出某个服务器的生效中和已停用的事实,表格上方是记忆类型分布卡片


🧠 记忆的用途

记忆可以帮助 AI 记住这类信息:

  • 服务器设定
  • 社区的事实
  • 偏好的语气
  • 经常出现的梗
  • 用户或身份组的上下文
  • 服务器专属的术语
  • 重要的规则或提醒

目的是让 AI 的回复更了解这个服务器。


📒 记忆页面

记忆页面让有权限的用户可以完整查看已存储的记忆条目。

在这个页面上,你可以:

  • 按服务器查看记忆
  • 按键名或内容搜索
  • 手动添加新记忆
  • 编辑现有记忆
  • 删除过时的记忆
  • 查看置信度

🔎 筛选与分页

记忆可以按服务器筛选,并且支持即时搜索。

记忆很多时会分页显示,让页面保持好用。


✍️ 手动添加记忆

当你想让 AI 知道某件具体的事时,可以手动添加记忆条目。

示例:

  • server_theme:这个服务器是关于复古游戏的。
  • bot_tone:回复要友好、简洁。
  • important_rule:不要在公共频道提供支持,引导用户去开工单。

条目要简短、清晰。除非必要,不要塞进大段文字。


✏️ 编辑记忆

你可以编辑:

  • 键名
  • 内容
  • 置信度

当一条记忆仍然有用但需要修正时,就编辑它。

当它已经过时或不再相关时,就删除它。


♻️ 不会有东西在你背后被遗忘

条目绝不会被自动删除。没有过期时间,也没有清理任务:一条事实会一直保留,直到机器人自己判断它不再成立,或者有人在这个页面上把它删掉。

你能控制的是有多少内容会送到 AI 面前。AI 回复设置页面上的 每次注入的记忆事实数量上限 决定了作为上下文发送的事实数量:范围是 1 到 1000,默认 20。调高它,AI 能参考的内容更多;调低它,回答会更精炼。无论怎么调,都不会删除任何东西,所以你可以随意上下调整。

时间久并不是遗忘的理由。这个服务器说法语 两年后依然成立,而且不会有人再重新说一遍。

机器人如何判断

发送给模型的每条事实都带有自己的编号,在它收到的上下文里显示为 [#12]。当机器人断定某件事不再成立时(比如规则变了,或者某个偏好被推翻了),它会用这个编号作答,这条记忆就不再被使用。至于它是被删除,还是保留供查阅,取决于下面所说的记忆类型。

它只能移除在这次对话中实际展示给它的事实。如果它说出一个没有出现在它面前的编号,什么都不会发生:猜出来的编号碰不到另一场对话里的事实,哪怕那个编号真实存在、而且属于同一个服务器。

这就是为什么 每次注入的记忆事实数量上限 有双重意义。一条从未送到模型面前的事实,模型永远无法重新审视它,它会一直留着,直到有人在这个页面上删掉。在可搜索归档下,这就不再是死胡同:机器人查到的事实,也是它可以纠正的事实。


🧭 选择记忆类型

记忆类型 是每个服务器选一个,在这个记忆页面上选择,而不是在 AI 回复设置页面上。它决定机器人如何存储它所知道的内容,以及如何把这些内容找回来,并且在你点击的那一刻就会保存。它不是下拉菜单:点击后,六种类型会并排展开在页面上,每一种都写明它做什么、会改变什么、切换过去会移动什么,以及去哪里了解更多。

页面顶部把六种类型画成一条刻度,并标出你的服务器当前所处的位置,你甚至不用先打开选择器就能看到。

AI 回复设置页面仍然保存着与当前所选类型配套的设置:排序权重(新鲜度、重要性、相关性)、注入的事实数量,以及后台整合任务和语义嵌入所用的模型。这个页面会明确告诉你这些设置各自在哪里,不用你自己去找。

Classic 是目前运行的类型,也是默认值。从未打开过这个选项的服务器,行为与以往完全一样:一个平铺的事实列表,最近更新的事实会被注入每次回答,不会有任何东西被自动删除。

其余五种,每一种都在前一种的基础上增加一项能力,它们正在按顺序逐步构建:

  • 日志:现已可用。不再成立的事实会被停用而不是被抹掉,所以你仍然可以读到它原来写的是什么。见下一节。
  • 可搜索归档:现已可用。机器人可以主动查找,而不是只用递给它的事实,所以超出注入上限的内容不再是看不见的。见再下一节。
  • 排序记忆:现已可用。名额会给最有用的事实,而不只是最新的事实。
  • 整合记忆:现已可用。后台任务会在服务器安静的时候把重复内容归并起来,并重写摘要,而且每一项改动都会作为提案交给你批准。
  • 语义记忆:按含义而不是按字面匹配,所以 “他说法语” 能找到 “服务器语言是法语”。这是六种里最强的一种,也是唯一会产生费用的一种。

唯一还没有准备好的那一种,在对话框里有标记,无法选择。无论选哪种类型,下面两条规则始终成立:它们读取的都是同一份记忆,并且没有任何一种会自行删除内容,所以改变主意、再切换回去,永远不会让你丢掉一条事实。

选定一个服务器后,记忆页面会在你做出更改之前,用数字告诉你这次更改实际会移动什么。


📓 日志:什么都不会被抹掉,只会被停用

在日志类型下,机器人判断一条事实已经过时后,不再删除它。这条事实的有效期只是结束了:它离开 AI 拿到的上下文,但仍然留在这个页面上,并标明它何时停止生效,以及(如果有的话)取代它的那条事实。

机器人也因此多了一个配套的动作。它不再只能丢弃 [#12],还可以说 “这条不再成立,替换它的是这条”,并且会被明确告知旧的措辞仍然保留着。一个它认为是破坏性的修正,是它会犹豫要不要做的修正。

查看历史

一旦有内容被停用,表格上方就会出现三个标签页:

  • 生效中:机器人实际能看到的内容。这是默认标签页,也是对 “机器人到底知道什么?” 这个问题的真正回答。
  • 已停用:曾经成立的内容。带删除线,附有日期、机器人给出的原因(如果有),以及替换它的那一条。
  • 全部:两者合在一个列表里。

撤销错误的判断

机器人有时会判断错。在已停用的那一行上点 恢复,一次点击就能重新启用它,这正是这一行被保留而不是被删除的全部原因。替换它的那条事实(如果有)会被特意保持原样:两条事实可以同时成立,该留哪一条由你决定,而不是由面板决定。

在已停用的行上,删除 仍然是真的删除,和其他行一样。有人在这个页面上删掉一条事实,就是已经做了决定,没有任何东西会去质疑这个决定。

切换过去,再切换回来

打开日志类型不会移动任何东西。你已有的每条事实都算作仍然成立(它本来就是如此),并保留创建时的日期。

切换回 Classic 时,在此期间被停用的内容会原样留在原处:仍然在这个页面上,机器人仍然看不到。如果你想把它们全部重新放到 AI 面前,记忆页面提供了针对那一个服务器的 恢复全部已停用记忆 选项,并会把这个操作写入你的审计日志。它绝不会替你自动完成:日志停用的内容,停用是有原因的。


🔎 可搜索归档:机器人可以自己查

Classic 记忆有一个真正的限制,但它不在你可以存多少条事实上,而在于超出 每次注入的记忆事实数量上限 的所有内容,无论多么真实,AI 都看不见。调高上限是唯一的办法,而这会让每一条消息都变得更贵。

可搜索归档 给了机器人另一个办法。最近的事实照常递给它,除此之外,它还可以按名称索取某一条,比如 “在记忆里搜索:Paul 的生日”。查到的内容会在它回答之前交给它。

费用是多少

在机器人不去查找的消息上,没有任何额外费用,而这占了大多数。当它确实去查找时,恰好多花一次额外的调用:带着查到的事实把问题再问一遍。绝不会是两次:如果机器人在第二次回答里再次要求搜索,这个要求会被忽略。

搜索本身是由数据库执行的全文搜索。没有嵌入,没有向量,没有对每条消息做任何计算,也不涉及任何第三方服务。

它能查到什么

那个服务器里所有仍在使用的事实,两种范围都包括:关于服务器的事实,以及关于其成员的事实。这是有意为之:“Paul 的生日” 是关于一个并非当前说话者的人的事实,如果搜索只能触及说话者自己的事实,就会漏掉大多数值得问的问题。

它查不到的有:在日志类型下被停用的任何内容(关闭一条事实的有效期,恰恰就是决定不再把它交回去),以及在不允许读取记忆的频道里的一切内容。搜索也是一种读取,遵守同样的 允许[读取]记忆的频道 设置。

机器人通过搜索找到的事实,也可以由它来纠正,条件与递给它的那些事实相同。

切换之前:试运行

选定一个服务器后,记忆页面会用来自你自己数据的数字告诉你归档会带来什么成本:有多少条事实需要建立索引,那是多少文本,以及对它们做一次真实搜索花了多长时间。

打开它不会移动任何东西,也不会改写任何东西。索引建立在已经存储的文本之上,并且无论服务器是否使用搜索,索引都存在,所以不管是切换过去还是切换回来,都是瞬间完成的。


🏅 排序记忆:名额给值得的事实

Classic 记忆会把最近修改的 N 条事实交给模型。换句话说:你的服务器遵守了一年的规则,会输给昨天的闲聊而失去名额,因为闲聊被碰过的时间更近。

排序记忆 会按三个维度给每条候选事实打分,然后把最好的 N 条交出去:

  • 它有多新。
  • 它有多重要:由模型在写入这条事实的那一刻打分,因为只有那一刻,存储它的理由还摆在模型面前。
  • 它与此刻正在说的内容有多相关。

这是一种排序,而不是过滤。没有任何东西被永久搁置,一条在某条消息上没入选的事实,在下一条消息上又会成为候选。

权重由你决定

AI 回复页面上的三项设置(新鲜度、重要性、相关性)决定每个维度的分量,按服务器分别设置。记忆以长期规则为主的服务器,会希望重要性比新鲜度占更大分量;热闹的社交服务器则会想要相反的设置。

每条事实本身已存储的置信度也会被读取。它起乘数的作用,而且只会往下调:机器人不确定的事实,不会排在它确定的事实前面。

切换不需要任何成本

没有迁移,也没有费用。还没有人打过分的事实会排在中间而不是最后,所以排序从第一条消息起就能基于你已有的内容工作,而重要性会随着机器人重写事实自行补全。

试运行会告诉你有多少条事实已经带有分数,并显示哪些会多得一个名额、哪些会失去一个。


🧩 整合记忆:整理在服务器安静时进行

不断增长的记忆,最终会把同一件事用两个名字说两遍:这边是 language,那边是 lang。在这之前,处理这个问题的唯一办法就是手动。

整合记忆 会在服务器安静下来之后,对它的记忆运行一次后台整理。它绝不会在回答进行到一半时运行,而且(这一点很重要)它不会自行应用任何改动。

它提出建议,由你决定

整理任务会写出提案。提案会逐条出现在记忆页面上,保留的事实与它将取代的事实并排显示,每一条都有三个选择:

  • 合并:采纳整理任务的建议。
  • 反向合并:改为保留另一条事实。对于两条互相矛盾的事实,哪一条仍然成立,只有你最清楚。
  • 两条都保留:拒绝。除非这两条事实中有一条之后被改写,否则整理任务不会再问。

在点击其中一项之前,什么都不会改变。

同意不等于抹掉

合并是日志意义上的替换。让位的那条事实会关闭自己的有效期,并指向留下来的那一条,它会带着日期和原因以删除线显示在这个页面上,点 恢复 就能把它找回来。合并的撤销方式与任何其他停用完全一样。

矛盾的内容绝不会被合并。 说法相反的两条事实会被标记出来,交给人去裁决。整理任务无从知道哪一条仍然成立。

摘要会被重写

摘要是机器人每次都会完整读取的唯一一行记忆,所以它也是最先过时的那一行。它是根据当时已知的内容写下一次之后就没再动过的。

整理任务会根据服务器范围的事实,起草它今天会怎么写,页面则把两份并排放在一起:机器人现在读的 和 它将改读的。规则与合并相同:没有你的同意,任何东西都不会取代它,而且之前的措辞是被停用而不是被删除。

它自己的模型

这个整理任务不需要和 Discord 回复赛跑,所以它可以使用比频道里回答问题的模型更强的模型,也可以用更便宜的,并且有它自己的端点和它自己的密钥,和面板里的每一个模型字段一样。

它也可以完全不用模型。没有模型时,整理任务仍然会找出并提出每一对重复项;只是合并时会逐字保留胜出的那条事实,而不是把两条改写成一句话。模型只负责写建议的措辞和摘要草稿。

何时运行

它按自己的计划运行,并且在不划算的时候会自己拒绝运行:记忆太少,不可能有重复;自上次整理以来没有变化;距离上一次不到一天;或者已经有一条提案在等待回复。一个从来不安静的服务器,在一周后也会被整理一次,因为恰恰是这样的服务器,记忆里最容易积满重复内容。

切换之前:试运行

卡片会用你自己的数据告诉你:存储了多少条事实,一次整理会发现多少重复和多少矛盾,并附上五个取自你服务器的真实例子。

打开它不会移动任何东西。第一次整理只会提出建议,由你决定。


🧠 语义记忆:看含义,而不是看字面

在它之前的每一种类型,底层回答的都是同一个问题:这两段文本有没有共同的词? 对于 “他说法语” 和 “服务器语言是法语”,答案是否定的:只有一个共同的词,而且不是有用的那个。

语义记忆 会把每条事实变成一个嵌入:一个方向,而不是一段字符串。意思相同的两条事实会指向同一个方向,不管它们是用什么词写的,它们之间的接近程度是面板可以比较的一个数字。

实际改变了什么

两件事,而第二件是你每天都能感受到的。

搜索不再漏掉东西。 当机器人去查找一条没有递给它的事实时,它不再依赖成员是否使用了与记下这条事实的人相同的词。

排序不再依赖消息里的字眼。 在排序记忆下,一条事实的相关性分数来自它在搜索结果中排在哪里。在语义记忆下,则按它与当前所说内容的实际接近程度打分,这就是 “这条事实被找到了” 与 “这条事实说的就是这件事” 之间的区别。

费用是多少

这是唯一一种会按计划把你的数据发送到别处的类型,所以有必要把成本说清楚:

  • 每写入一条事实,调用一次嵌入,仅此一次。没有被改写的事实绝不会被嵌入两次。
  • 每条长度足以参与排序的消息,调用一次。 少于十二个字符时不会发送任何内容,因为 “lol” 没有什么可匹配的。
  • 比较本身发生在面板里,而不是数据库里,这就是为什么这种类型在一个服务器上处理几千条事实都很轻松,再往上就不太行了。

它需要一个嵌入模型,在与你其他 AI 设置相同的端点和密钥上指定。

它会自动回退

没有指定模型、端点拒绝请求、补全任务还没运行,或者你刚更换了嵌入模型:在所有这些情况下,搜索都会回退为按字词匹配,而不是失败。回答里会说明实际运行的是哪一种,所以静默的回退也是看得见的。

更换嵌入模型会让所有内容重新嵌入,在这个任务完成之前,服务器按字词搜索。这期间不会有任何东西出问题。

切换之前:试运行

卡片会告诉你补全任务将发起多少次调用、涉及多少文本,以及在向量看来,你的哪些事实已经被视为同一件事。

不显示货币价格。 在那里写一个金额,就意味着为你指定的任何端点编造一个价目,而在一个讲钱的页面上,编造的数字比没有数字更糟。


🧹 清空记忆

对于某一条错误的事实,逐条删除是合适的。另外两种情况则有 清空记忆,选定一个服务器后,它就在服务器筛选旁边:

  • 关于这个服务器的一切:当记忆偏离得太远,重新开始比改正二十次更划算时。
  • 关于某一位成员的一切:当某人已经离开,或者要求被遗忘时。输入他们的 Discord 用户 id。

它会立即生效,而且无法撤销,机器人会从下一次对话开始重新学习。每一次清空都会以执行者的名字写入你的审计日志,并记录删除了多少条。


🔑 访问控制

记忆条目对任何有权访问该服务器所属团队的人都是可见的。

更改它们则是另一种权限:添加、编辑、删除和清空都需要配置该服务器的权限,也就是功能设置所需要的同一个权限。没有这个权限,你仍然可以阅读列表,只是看不到“清空记忆”按钮。

不要在 AI 记忆里存放敏感的机密、密码、私密令牌或保密信息。


🧵 子区

记忆的读取和写入遵循 允许[读取]记忆的频道 和 允许[写入]记忆的频道 设置,而子区不属于这些频道之列,即使它所属的频道在其中也是如此。默认情况下,子区里既不读取也不写入记忆。AI 回复的 包含子区 选项(默认关闭)可以让子区跟随它所属的频道,参见 AI 回复。如果子区可能对不应该看到记忆内容的人开放,请保持关闭。


✨ 记忆与回复质量

记忆并不是越多越好。

太多不相关的事实会让 AI 变得不够专注。

好的记忆应该是:

  • 简短
  • 准确
  • 相关
  • 保持最新
  • 容易理解

💡 最佳实践

  • 服务器发生重大变化后,检查一下记忆。
  • 删除过时的事实。
  • 当成员要求被遗忘时,直接清空他的条目,而不是逐行去找。
  • 让重要的规则保持清晰、明确。
  • 除非有充分的理由并获得许可,否则不要存放用户的私人数据。
  • 用记忆来改善上下文,而不是取代审核管理或工作人员的判断。