记忆功能与聊天摘要
每个 AI 模型一次能读的文字量都有上限,这个上限叫上下文窗口。聊天一长,最早的消息就会掉出窗口,AI 也就忘了它们。Marinara Engine(下文简称 Marinara) 有好几种办法把这段历史找回来。本指南介绍如何开启每一种功能,以及它不起作用时怎么处理。
我该用哪种记忆功能?
先从 Memory Recall(记忆功能) 开始。它不需要额外设置,因为 Marinara 可以使用你电脑上的内置嵌入模型。聊天变得很长时,再加上摘要。
| 功能 | 作用 | 适用模式 |
| Memory Recall | 在较早的消息里找出和你刚说的话相关的部分,补进提示词。 | 所有模式 |
| Chat Summary(聊天摘要) | 用简短的回顾取代旧消息。 | Roleplay(角色扮演) |
| Automatic Summarization(自动摘要) | 每天做一份摘要,再按周汇总。始终开启。 | Conversation(对话模式) |
| Advanced Memory Recall(高级记忆功能) | 统一管理当前历史、场景摘要和召回的片段。可选。 | Roleplay 和 Game Mode(游戏模式) |
Memory Recall 和摘要各管各的,可以同时运行。Game Mode 有 Memory Recall,也可以选择开启 Advanced Memory Recall,见在 Game Mode 中。它没有自己的摘要功能。
Memory Recall
Memory Recall 依靠嵌入。嵌入就是把一条消息的含义变成一串数字指纹。Marinara 把过去的消息分成一小组一小组存起来,每组叫一个记忆块。它拿你新消息的指纹去和已存的指纹比对,再把最接近的几个记忆块补进提示词。
开启 Memory Recall
- 打开一个聊天,点击 Chat Settings(聊天设置)。
- 找到 Memory Recall 一节。
- 开启 Enable Memory Recall。
这个设置按聊天分别保存。在 Conversation 聊天里,以及已经有活动场景的 Roleplay 或 Game 聊天里,它默认开启;其他聊天默认关闭。关闭它会停止回忆,但不会删除已存的记忆。
如果没有成功:Memory Recall 需要一个嵌入来源(见下一节)。如果你什么都没设,Marinara 会使用它的内置模型,所以多数人可以跳过那一节。另外确认 Memory Recall 一节确实出现了。有些容器构建版本叫 Marinara Lite,它们把这个功能完全关闭了。
设置嵌入来源(可选)
Memory Recall 需要一个生成指纹的模型。如果你什么都不设,Marinara 会使用内置嵌入模型(见下文),对多数人来说这是最简单的办法。想改用某个服务,就在账号上设置,而不是在聊天设置里。
开始之前:你需要一个提供嵌入的账号。见连接 AI 服务商。
- 打开 Connections(连接),编辑这个账号。
- 找到 Semantic search (embeddings)(语义搜索与嵌入) 一节。
- 填入嵌入模型名称,例如
text-embedding-3-small。 - 可选:设置 Embedding endpoint URL(嵌入端点 URL),更改地址。
- 可选:用 Embedding provider(嵌入服务商) 借用另一个账号的密钥和地址。Same as this provider(与此服务商相同) 则使用这个账号自己的密钥和地址。
有些服务不提供嵌入。这时 Marinara 会请你另选一个专门的嵌入账号,比如 OpenAI 兼容账号、Google 或内置模型。
想在所有地方都用同一个来源,就在 Connections → Defaults(连接 → 默认值) 的 Embeddings(嵌入) 里选它。没有自己的嵌入模型的账号会使用它。账号自己的设置仍然优先。
既没有嵌入账号、也没有 Embeddings 默认值时,Marinara 会退回内置嵌入模型。它只下载一次,在你的电脑上运行,不需要 API 密钥。见内置模型设置。
同一处设置也驱动世界书的语义搜索,所以设置一次就两边都能用。
查看和管理已存的记忆
- 打开 Chat Settings → Memory Recall。
- 点击 Access memories for this chat。Memories for This Chat 窗口会打开。开启 Advanced Memory 时,查看器会留在 Roleplay 抽屉里。
窗口里显示已存记忆块的数量和大致的 Token(模型切分文本的最小单位) 数。每张记忆块卡片显示它的日期范围、消息条数、创建时间和状态。
| 状态 | 含义 |
| Vectorized | 指纹已经生成,可以参与搜索。 |
| Waiting for vector | 指纹还在生成中。 |
| Embedding unavailable | 没有可用的嵌入来源,指纹生成不了。 |
工具栏上有导出、导入、重建和清空记忆的图标。
- 记忆块的垃圾桶图标会打开 Forget Memory,点击 Forget 确认。
- 清空全部的图标会打开 Clear Memories,点击 Clear 确认。这只会清掉回忆用的记忆,不会删除聊天消息。
- 刷新图标会用当前的消息重建全部记忆块。换过嵌入模型之后就用它。
- 导出会保存一个
.marinara.json文件。导入接受.json或.marinara文件,并把内容合并进来。
Memory Recall 的行为细节
- 只要有嵌入来源,Marinara 就会在后台存记忆块,Enable Memory Recall 关着也照存。这个开关只决定记忆要不要加进提示词。
- 至少要有 5 条新消息,才会生成一个记忆块。
- 关系不够近的匹配会被跳过,所以哪怕已经存了记忆,回忆也可能什么都找不到。提示词里只有一小部分留给回忆到的记忆。
- 换过嵌入模型之后,旧记忆块就对不上了,重建它们。
- 删掉一个聊天的消息,它的记忆块也会一起删除。
Chat Summary (Roleplay)
Chat Summary 把较早的消息压缩成简短的回顾,也就是摘要条目。每个条目既可以让 AI 写,也可以自己写,还能单独开关。它只用于 Roleplay 聊天。
打开 Chat Settings,展开 Lorebooks(世界书) 下方的 Chat Summary。在电脑上可以把它弹出为独立窗口,见聊天设置总览。
新建摘要条目
- 在 Summary Scope 下选 Last 摘要最近的消息,或者选 Range 指定一段消息范围。
- 点击 Generate 让 AI 写一条条目,或者点击 Write 自己写。
每个条目显示标题、来源范围或消息条数,以及预估的 Token 数。条目可以启用或禁用、展开,也可以点 Edit 修改或点 Delete 删除。Show Inactive 和 Hide Inactive 决定列表显示哪些条目。Activate All 和 Deactivate All 一次切换所有条目。
要一次更改多个条目,就勾选它们(在电脑上,按住 Shift 点击可以选中一段范围),然后用 Enable selected(启用所选) 或 Disable selected(禁用所选)。
如果开启了 Review Agent Outputs(审核智能体输出),AI 写的摘要要等你批准。见智能体审批与 Agent Suite。
Automatic Summaries
Automatic Summaries 面板会在你聊天时让摘要保持最新。
- 开启 Enabled。
- 用 Every 设置两次摘要之间间隔多少条用户消息。默认 5,范围 1 到 200。
- 可选:点击 Backfill Summary,给从来没做过摘要的旧聊天补上摘要。运行时会显示进度条。想提前停下就点 Stop。
摘要提示词、服务商与输出长度
- Summary Prompt:点击 Edit 修改 AI 使用的指示。点击 Templates 管理已保存的提示词,里面有 New template、Duplicate、Edit 和 Delete。模板是全局的:在某个 Roleplay 聊天里选用一个模板,所有 Roleplay 聊天的提示词都会跟着变。
- Summary Provider(摘要服务商):写摘要的账号。它优先使用你的默认智能体账号,其次是聊天自己的账号。
- Maximum output size:一条摘要最长多少。默认 4096 个 Token,范围 1 到 32768。
显示选项
- Hide summarised messages:一旦有摘要覆盖了原始消息,就把它们隐藏。默认关闭。
- Recent message tail:即使开启了隐藏,也保留这么多条最新消息可见。默认 10。从 0 起的任何整数都可以。设成 0 会隐藏整批被摘要的消息。数值越大,提示词越长,费用也越高。
- Collapse hidden messages:改变被隐藏的消息在聊天记录里的样子。
最新消息尾部会限制已被摘要的消息。已被摘要、且比尾部更早的消息会立刻从提示词中去掉,哪怕下一次摘要还没有把它隐藏。还没有任何摘要覆盖的较早消息仍会发送,因为去掉它就会丢失这部分内容。出现这类消息时,Chat Summary 会在 Recent message tail 下显示有多少条。点击 Backfill Summary,为它们生成摘要。
合并回复的群聊
在合并回复的群聊里,一条回复替所有角色发言。条目中为特定角色撰写的部分,例如 {{#if char == "Kaito"}}…{{/if}},会为它适用的每个角色保留,并标明哪些角色知道,例如“known only to Kaito”。只有 Advanced Memory 的 Narrator(旁白) 才能看到的部分仍会排除在外。在角色逐个回复的群聊和单角色聊天里,每个角色照常读取这些条目,旁白则读取每个部分。
Automatic Summarization (Conversation)
Conversation 聊天会给每个自然日做一份摘要,再把已经结束的整周合并成一份周摘要。之后提示词里只有各周的周摘要、本周的日摘要和今天的消息。这个功能自动运行,无法关闭。
编辑摘要
- 打开一个 Conversation 聊天,点击 Chat Settings。
- 找到 Automatic Summarization。
- 点击 Edit Summaries。
窗口里先列出各周,再列出还没并入某一周的日期。展开一个条目,就能编辑它的 Summary 文本和 Key Details 各行。
设置一天何时结束
- Day Rollover Hour:对摘要来说新的一天从几点开始。默认 4 AM,可以选 12 AM 到 11 AM 之间的任意整点。在这个时刻之前的消息算作前一天。挑一个你不在聊天的时间。如果已经有摘要之后再改它,Marinara 会提醒你较早的摘要用的是之前的时刻。
- Recent Message Tail:今天最新的多少条消息在被摘要后仍逐字保留。默认 10。数值越大,提示词越长,费用也越高。
补上缺失的日期
有时某一天会缺少摘要,比如导入一个旧聊天之后。窗口里的 Missing Summaries 面板有一个 Backfill 按钮,一次最多重试最近 14 天。换掉摘要模型不会重写已有的日条目或周条目。
Advanced Memory Recall(Roleplay 和 Game Mode)
Advanced Memory Recall 是一个可选模式,会一起管理当前历史窗口、连续性摘要和旧片段。它把聊天分成一个个场景,为每个结束的场景写摘要,并在每次回复时召回相关的场景和原文消息。它不依赖 Agents 总开关,也不需要下载任何智能体。
开启它
- 打开 Chat Settings → Memory Recall。
- 开启 Advanced Memory Recall。也可以在 Roleplay 设置向导的 Agents 下方开启 Automatic context and memory handling(自动管理上下文和记忆)。
- 把 Maximum allowed context before compression (tokens)(压缩前允许的最大上下文) 设在模型的上下文窗口以内。
- 在这个上限以内设置 Summary and recall budget (tokens)(摘要与召回预算)。
- 可选:选择一个 Helper model(辅助模型)。
已经有历史的聊天,先点击 Prepare existing history(准备现有历史)(见下文)。桌面端和移动端都可以在向导和 Chat Settings 抽屉里查看设置与进度。档案查看器仍位于抽屉内。
设置
| 设置 | 默认值 | 作用 |
| Maximum allowed context before compression (tokens) | 65,000 | 发出的提示词达到这个大小时,较早的上下文会被截断并生成摘要,供以后召回。 |
| Summary and recall budget (tokens) | 6,500 | 上下文中有多少用于记忆。建议至少设为最大值的 10%。 |
| Helper model | 智能体账号,其次是聊天账号 | 负责场景判断、摘要和连续性。 |
| Maximum recalled scenes(最多召回场景数) | 3 | 每次回复最多召回的场景数。设为 0 会关闭可选的场景召回。 |
| Moving context(移动上下文) | 3 到 5 条消息 | 每个召回片段里的消息数。两项都设为 0,就只用摘要、不带片段。 |
| Standalone scene check interval (messages)(独立场景检查间隔) | 5 | 两次场景检查之间间隔多少条新消息。 |
| Use Decision model(使用决策模型) | 关闭 | 让 Decision 模型找出场景结束点并选择记忆。 |
| Decide who sees new messages(决定谁能看到新消息) | 关闭 | 仅限角色逐个回复的群聊。 |
| Character recollections(角色回想) | 关闭 | 让每个角色对场景留下自己的记忆。 |
默认预算是默认最大值的 10%。之后再改最大值不会改变它。这个上限计算预计发出的整个提示词:指令、消息、召回的上下文、工具和附件。回复 Token 和安全余量另算。它是估算值,不是精确的分词器计数或计费上限。
所有记忆摘要调用都使用 Chat Summary → Maximum output size,并至少预留 8,196 个输出 Token,为推理留出空间。
准备现有历史
- 点击 Prepare existing history。开始前会显示实际选用的模型。
- 等待。它会分批处理较早的历史,并显示当前阶段。
- 用 Cancel(取消) 停止,已完成的工作会保留。用 Resume(继续) 接着处理,即使你关闭了抽屉、重启了服务器或更新了应用也可以。
模型调用失败时,此前有效的记忆会保留,并显示一个可以重试的错误。失败后不要重置记忆:Resume 会复用已完成的摘要。最后一个进行中的场景保持开放,结束后才生成摘要。
如果恢复的历史改变了某个有手动修正的场景,就停用那条记忆以保留其文本供参考,或者删除它,然后重新准备。Fix(修复) 会跳过这个场景并把它列出来,而不会因此中止。
从已准备好的聊天创建的分支,例如用 Branch from here(从这里分支) 创建的分支,会保留它的 Advanced Memory。在某个场景中间创建的分支会重新打开这个场景:原来的摘要会被丢弃,场景结束时再写一份新的。作为新分支导入的聊天照常准备。
修复记忆问题
聊天记忆出了问题时,Chat Settings 按钮上会出现一个强调色的常亮圆点,同时弹出通知,说明有多少个场景存在问题。每组问题只通知一次;圆点会一直保留,直到这些问题解决。在 Chat Settings → Memory Recall 中,问题会列在设置上方。Access memories for this chat 中也会显示同样的圆点。
在通知或列表中点击 Fix,即可一次修复所有被标记的场景。它使用 Helper model。Pause processing(暂停处理) 会让它停下,Resume processing(继续处理) 会接着处理。Fix 会:
- 对标记为 Check who was there(核对谁在场) 的场景,再问一次辅助模型谁在场。如果它仍然判断不出,不会有人获得访问权限,该场景会列出来交给你处理;
- 核对参与者检查功能出现之前保存的旧场景里有谁在场;
- 为消息、隐藏消息、角色名称或所依据的摘要发生变化的场景,以及还没有摘要的已结束场景,生成新摘要。你删除的摘要保持删除;
- 继续因出错而中断的记忆处理。
Fix 绝不会重写你手动编辑过的摘要。它会把这类摘要列在 need your review(需要你检查) 下,然后继续。它无法替你更改设置,例如角色的知识范围或可用的 Decision 连接。
Fix 完成后,会显示“Advanced Memory fixed N scenes”,以及需要检查的场景编号。选择一个编号,即可在 Access memories for this chat 中打开该场景。如果当时 Chat Settings 已关闭,一条带 Show(显示) 的通知会带你过去。Fix 无法判断的场景,下次 Fix 时不会再询问,所以请自己保存它的角色访问权限。
重新扫描场景
如果漏掉了场景变化,比如某个场景一直没有结束,就使用 Chat Settings → Memory Recall 中的 Re-scan scenes(重新扫描场景)。
- 输入要检查的起始和结束消息编号。初始范围是当前正在进行的场景。
- 点击 Re-scan(重新扫描)。
Advanced Memory 会在这些消息里重新查找场景变化,并为发生变化的场景生成摘要。开启 Use Decision model 时使用 Decision 模型,否则使用辅助模型。范围之外的场景保留原有的边界和摘要。如果某个你编辑过的摘要会因此改变,重新扫描会停下来并指出是哪个场景。
可选的 Decision 模型
Decision 模型是一种回答是非题的小模型。它默认关闭,按 Roleplay 聊天保存。
- 在 Advanced Memory 中开启 Use Decision model。
- 在 Memory Decision connection(记忆决策连接) 中选择一个模型。Built-in model(内置模型) 下列出的模型与全局 Decision model(判定模型) 中的相同。暂时无法回答的模型会以灰色显示并说明原因;已停止的模型会在被询问时启动。Connections 下列出你已保存的 Decision 账号。见 Decision 模型。
这里的选择独立于全局 Decision 默认值。
这个模型在准备历史和检查进行中的场景时识别场景边界。新回复之前,它分两轮挑选记忆。详情见决策回忆的工作方式。
托管账号会收到最近的对话文本,以及候选名单中待评分的场景回顾或消息,一次回复可能产生多次收费请求。回忆功能在发送候选内容前,会先按角色访问权限筛选。
决定谁能看到新消息
在角色逐个回复的 Roleplay 群聊里,Advanced Memory 可以决定每条新消息由哪些角色看到,这样就不必为离开场景的角色一条条隐藏消息。合并回复的群聊和单角色聊天没有这个选项。
- 在 Advanced Memory 中开启 Decide who sees new messages。
每条新消息,无论是你的还是角色的,都会对不在该场景中的角色隐藏。它使用的是和消息自身按钮相同的按角色 Hide from AI(对 AI 隐藏),所以划掉的眼睛标记会显示谁看不到这条消息。你的消息一发出就会立即决定。前面的消息会在下一个角色回复之前决定好。
- 这里选定的 Narrator,以及在 Roleplay 命令设置中选定的 Narrator character(旁白角色),都能看到每条消息。消息的作者始终能看到自己的消息。不在场景中的耳语收件人仍会收到耳语。
- 开启 Use Decision model 时,会针对每个角色询问 Decision 模型,该角色是否明显看不到也听不到这条消息。故事从未让其出现在场景中的角色,算作身在别处。否则由 Helper model 决定。只有模型确定时才会隐藏消息。
- 模型会读取当前场景到目前为止的消息,并且至少会读到这条消息之前的最后几条。它还会收到一份场景开始以来发过言的角色名单。这份名单只是提示:默默旁听的角色仍算在场。
- 如果你亲自更改某条消息的 Hide from AI,或使用
/hide或/unhide,就以你的选择为准,Advanced Memory 不会再改动这条消息。 - 每条消息只决定一次。如果模型出错或超时,这条消息不会被隐藏,错误会记录在服务器日志里。
开启 Advanced Memory 后,新的角色回复可以用 **、--- 或 这样的分隔行切换场景或视角。这时回复会被保存为同一个角色的多条独立消息,每部分一条。
- 每部分都有自己的受众。Decide who sees new messages、Hide from AI 和耳语都分别作用于每一部分。
- 作者仍能看到每一部分。如果作者不该看到某一部分,就自己对其隐藏。
- 分隔行留在其后那一部分的顶部。代码块或 HTML 块(例如
<details>)里的分隔行不算数。 - 回复的思考内容显示在第一部分上。即使关闭了 Exclude Past Reasoning(排除历史推理),它也不会被发回给模型。
- 消息信息、追踪器和智能体结果归入最后一部分。
- Prose Guardian 等重写类智能体会分别重写每一部分。开启 Hold Message Until Rewrite(改写完成前不显示消息) 时,每一部分都会等待自己的重写。如果某一部分重写失败,这一部分保持原样。
- 语音自动朗读会按顺序读出每一部分。
- 为某一部分生成备选回复或重新生成它,只会得到这一条消息的新版本。对于较早的部分,新版本保留第一个分隔行之前的文本。
- Continue(继续) 和 Impersonate(代写) 从不拆分。
角色回想
开启 Character recollections,每个角色就会对场景留下自己的记忆。它默认关闭。
- 每个在已结束场景中出现过的角色,都会得到一段简短的记忆,约 50 到 100 个词,以第一人称、用角色自己的口吻写成。角色卡决定角色会注意到什么。Narrator、你的用户角色以及身在别处的角色都不会得到回想。
- 模型只能使用每个角色可能知道的内容。如果某段回想连续照抄了四个词,而这些词来自该角色不可能知道的内容,这段回想就会被舍弃。换一种说法转述的事实只能靠指令来防范。
回想如何保持准确:
- 只有当角色能读到的内容与写下回想时完全相同,这段回想才有效。如果之后场景中的某条消息改为对该角色隐藏或显示,生成的回想会重新撰写。你编辑过的回想则不会放进提示词,直到你检查并重新保存。
- 新场景的回想与其摘要出自同一个请求。如果某张角色卡太大、放不进这个请求,回想会随后另发请求生成。如果某个角色的角色卡占去了辅助模型处理该场景时一半以上的空间,该角色就不会得到回想。
- 在场景已有摘要的聊天中开启此设置,会逐个场景补上回想,进度显示为 Writing character recollections(正在撰写角色回想)。场景摘要始终不变。Resume 会重试失败的场景。
- 如果模型没能写出可用的内容,该场景会保留一段空白回想,直到场景摘要或可读的内容发生变化。你可以在 Access memories for this chat 中自己写一段。
回想出现在哪里,开销如何:
- 回想只随召回的场景出现,位于该场景摘要之下、摘录之前,每个角色一行。在角色逐个回复的群聊里,每个角色只能看到自己的回想。在合并回复中,每个记得该场景的在场角色的回想都会连同名字一起显示。
- 回想计入 Summary and recall budget。摘要优先,其次是回想,最后是摘录。先缩短摘录,再整段舍弃回想。回想绝不会被截短。
- 回想绝不会进入 Chat Summaries,也不会用来决定召回哪些场景。
- 场景摘要发生变化后,每次回复后最多为三个场景重新撰写其生成的回想,最新的场景优先。Prepare existing history、Re-scan scenes 和 Resume 会全部重写。
编辑与关闭:
- 在 Access memories for this chat 中打开一个场景,即可阅读和编辑每段回想。编辑过的回想会标记为 Manually edited(已手动编辑),且绝不会被替换。Delete 会把它永久移出提示词,但你可以自己写一段新的。
- 关闭此设置会保留已保存的回想,但不再放进提示词。导出、导入和分支都包含回想。
在 Game Mode 中
Game Mode 聊天同样在 Chat Settings → Memory Recall 中开启 Advanced Memory Recall。不开启时,Game 会话每回合都会发送完整历史,直到上下文上限,因此长会话每回合消耗的输入 Token 会多得多。开启后,提示词会保持在 Maximum allowed context before compression 以内。当前场景以原文消息发送,较早的场景则以回顾加上召回选中的片段发送。
- 游戏主持人(GM)读取所有记忆。 没有 Narrator 选择、知识范围、自动消息可见性,也没有角色回想。
- 位置。 回顾和召回的场景放在历史之后、GM 回合指令之前。前面的指令和历史在各回合之间保持不变,所以支持提示词缓存的连接可以复用它们。场景结束时,会有一次请求无法命中缓存。
- 来源。 回顾根据你看到的故事撰写:你对段落的编辑会生效,GM 的命令标签则会省略。
- 会话。 新会话保留你的设置,但会建立自己的记忆档案。GM 仍会收到较早会话的回顾。
- Decision 模型。 可选,默认关闭。见可选的 Decision 模型。它会为每个回合增加一些小请求。
- 费用。 辅助模型每个场景写一份回顾,每隔几个回合检查一次场景变化。相比重新发送一整个长会话,这些请求很小。
- Game 聊天的提示词预览目前还不显示 Advanced Memory。请使用最终提示词检查器。
故障排查
| 问题 | 解决办法 |
| Memory Recall 什么都回忆不出来 | 确认嵌入来源已经配好。如果记忆块显示 Embedding unavailable,就设置一个 Semantic search (embeddings) 模型,或者使用内置模型。见内置模型设置。 |
| 记忆块显示 Waiting for vector | 稍等一会儿。指纹是在回复之后生成的。 |
| 好像没有相关内容 | 回忆只会补进密切相关的记忆。什么都不加是正常的。 |
| 换了嵌入模型后回忆变差了 | 在 Memories for This Chat 中使用重建图标。 |
| 摘要生成不出来 | 聊天需要一个可用的文本账号。Chat Summary 使用 Summary Provider。一个都不可用时,生成会被跳过。 |
| AI 摘要一直不出现 | Review Agent Outputs 可能在等你批准。 |
| 某条摘要卡住了 | 失败的摘要会在延迟后重试。运行 Backfill Summary(Roleplay) 或 Backfill(Conversation)。 |
| 某个场景被标记为 Check who was there | 点击 Fix,或在 Access memories for this chat 中打开它,然后使用 Edit character access(编辑角色访问权限)。 |
其他问题见 Marinara Engine 故障排查。
Advanced Memory 参考
这里是多数读者用不到的细节。不读这部分,上面的设置也能正常使用。
如何检测场景并生成摘要
- 场景检测在 Roleplay 主回复保存后运行。新消息累计到间隔规定的数量后,检查模型会收到上次检查以来的每一条消息(最多为间隔的两倍)、上次检查停在的那条消息、场景指令和输出格式。它返回每个场景结束的准确消息;如果场景仍在继续,就不返回结束点。用户角色和角色的消息都计数。
- 关闭决策模式时,到期的检查会在可见性和上下文预算允许时,共用一次符合条件的生成后追踪器调用;否则辅助模型会单独调用。不明确的转场会让场景保持开放。
- 只有检测到结束点,才会在后台准备该场景的摘要和消息索引。Chat Settings → Agent activity(聊天设置 → 智能体活动) 会以 Advanced Recall 显示进度,即使普通智能体已关闭也一样。
- 每个场景摘要请求包含摘要指令、该场景符合条件的消息、适用的范围修正和 JSON 输出格式。一个请求放不下的场景会分批处理并保存,然后合并。场景回顾要求 2 到 3 段。默认提示词只写历史回顾,没有当前局势一节。在 Summaries 中选择的自定义提示词仍然生效。
- 首次历史检测可以使用主模型或辅助模型。摘要始终使用辅助模型。
- 每份摘要还会记录参与者。参与者名字与角色卡不同时,例如用“Kaito”指 Kaito Nakamura,只要它恰好对应一个角色、且不是你的用户角色的名字,就仍然算数。共用的名字、“Kaito's sister”这样的描述,以及带“(mentioned)”之类备注的名字,都不会给出访问权限。如果辅助模型没有说明谁参与了场景,该场景会分配给所有角色;在群聊里,它会被标记为 Check who was there。只列出你一人的场景仍仅限旁白访问。参与者检查功能出现之前保存的场景,在 Fix 或 Prepare existing history 检查之前仍仅限旁白访问。每条结束场景的回复也会顺带检查至多三个这类场景。
- 对于较早的角色逐个回复的群聊,请一次性确认缺失的知识范围。角色第一次发言,并不能证明其知道此前的所有内容。只有当某个实际角色应绕过参与范围限制时,才将其选为 Narrator。全局 Hide from AI 只会把回合从当前对话记录中移除,Advanced Memory 仍会扫描它、为它生成摘要并建立索引。起点标记会裁剪当前对话记录。
当前窗口与预算
- 提示词的优先顺序是:常驻摘要(始终启用的摘要)、所选场景摘要、角色回想、消息摘录。常驻摘要以不超过预算的 70% 为目标。需要时,记忆总量可以多用至多 2,000 个 Token,但不能超过上下文上限。当前消息不计入常驻摘要份额。
- 发出的提示词达到上限时,所有角色的当前窗口都会重置到最新场景的开头,然后再次增长。函数调用和掷骰的后续请求不计入。截断点显示在 Mark as new start(标记为新起点) 中,且 All 已选中;取消勾选 All 即可撤销。个人起点标记仍然生效。如果未结束的场景或过大的常驻摘要放不下,请求会使用标注过的来源摘录,并保留最新消息。已保存的摘要和消息绝不会被覆盖。
- 主生成立即读取已保存的记忆,从不等待连续性任务。
- 主回复结束后,Advanced Memory 会为还没有任何摘要覆盖的已归档消息添加 Chat Summaries。在角色逐个回复的群聊里,读过某个场景的所有角色共用该场景的同一份摘要。
- 当某个角色读取的启用摘要超过预算的 70% 时,Updating continuity 会在回复后使用辅助模型,把这些摘要合并成一份篇幅约为原来一半的摘要。回复从不等待这一步。如果某份摘要覆盖的消息仍在当前窗口里,它会一直等到这些消息离开当前窗口。如果合并后的摘要仍超出份额,下一次更新会再把它减半。
- 每个请求只包含你的 Combine prompt(合并提示词)、一行要求把篇幅缩到约一半的指示,以及摘要文本。如果文本里有
{{user}}这样的宏,这一行还会要求原样保留它们。一个请求放不下的文本会分段发送,每段各自减半。辅助模型的回复最长可以是文本长度再加 1,024 个 Token,但不超过 8,196 个 Token;如果 Chat Summary → Maximum output size 更大,就以它为上限。 - 不同角色读取的摘要会合并成一份,包括你写的摘要。私密部分保留在各自的
{{#if char == "Name"}}…{{/if}}段落中,只属于当初知道它们的那些角色。每组角色读取的文本会各自用一个单独的请求缩短,请求里不带它的条件,缩短后再放回同一个条件里。各组按各自第一次出现的先后顺序排列。不足 64 个 Token 的部分保持原样,不发请求。使用其他宏的摘要保持原样。如果仅这些摘要就占满了某个角色的份额,请手动缩短它们,或者提高预算。被替换的条目会变为停用,因此你可以重新启用它们。 - 如果辅助模型的回复达到上限被截断、为空、没有变短或添加了宏,或者结果会改变谁能读到某个部分,这些摘要就保持原样,这次更新仍会完成。在其中某份摘要发生变化,或者你更换了辅助模型或修改了 Combine prompt 之前,同样的摘要不会再次发送。Resume processing 会重试因出错而停下的更新。
- 角色的提示词里,摘要的消息范围和日期只根据该角色能看到的消息得出。旁白单独回复时,会把每个部分各读一遍。
召回返回什么
- 一个 Recalled Scenes 部分会放置每份摘要及其后的摘录(如果有),每段只用一个范围标题。这个部分注明当前历史范围和最后一条用户消息的编号,以免把过去的事件误当成当前回合。
- 只有场景的全部来源消息都在发送的当前历史之外,才会召回该场景。按范围划分的 Chat Summaries 只要还有任一覆盖消息位于当前历史中,就会暂时省略。它们仍然保存并启用。符合条件的常驻摘要优先于可选召回。所有选中的摘要都会先预留空间,再添加任何摘录。
- 召回的文本和新摘要的输入会省略插图附件和图片说明。可读的文本附件会保留。
- 关闭决策模式时,回忆读取已准备好的记忆。查询嵌入的时间限制很短,超时会回退到文本匹配。文本匹配会提高正在回复的角色上次发言以来你各条消息中特征词的权重。这些消息里提到的名字权重最高。正在回复的角色和你的用户角色的名字不加权,出现在大多数记忆里的名字也不加权。它不会增加模型调用。
- 召回只用于 Roleplay 主生成。智能体调用、手动重跑智能体和试运行既不会触发它,也不会接收它。
- 备选回复会复用该回复最早保存的兼容记忆。自该回复以来,如果其角色可召回的某个较早场景被保存、编辑、启用或停用,备选回复会再次召回。续写保留回复最初使用的记忆。修改历史、访问设置、摘要或记忆会使已保存的快照失效。
- 编辑、生成备选回复、隐藏或删除来源消息后,受影响的记忆会在使用前重新检查。历史重新生成只使用目标之前的来源。
- 记忆回执显示估算的上下文大小、所选边界和召回来源。没有召回任何内容时,回执会说明原因:没有较早的场景、已没有剩余空间,或者没有相关内容。提示词预览使用已准备的记忆,不启动任何模型调用。最终提示词检查器显示实际发给模型的内容。
- 召回的场景没有摘录时,回执会说明原因:放入摘要后已没有剩余空间,或者它的消息都无法引用。
Access memories for this chat
打开它,可以搜索编了号的场景摘要,查看它们的时间范围和受众,编辑 Summary text(摘要正文),或者用 Inspect source messages(查看源消息) 阅读原始消息。你可以停用记录、Reindex(重建索引)、导出和导入,也可以用 Delete all memories(删除所有记忆) 在保留聊天和设置的同时重新准备。对手动摘要的修正会保留,并使依赖它的连续性摘要失效。摘要底部的 Delete summary(删除摘要) 会在你确认摘要及受众后将其删除。它也适用于旧版 Continuity(连续性) 和 Ongoing scene(进行中场景) 条目。常规准备不会重新生成已删除的场景回顾。
要让某个场景不被召回,就停用它的记忆记录。按角色隐藏仍然控制谁能访问它。全局隐藏不会把它从档案中移除。
谁能读到一个场景
- 只参加了部分场景的角色也共享该场景的记忆访问权限,即使其中有些消息对该角色隐藏。没有任何可访问来源消息的场景不可用。提到不在场的角色不会使其成为参与者。
- 新的场景回顾会标明消息可见性,用普通文字描述共同经历,私密部分则使用
{{#if character == "Name"}}…{{/if}}。如果可见性或某份回顾所针对的角色发生变化,旧回顾会对仅有部分访问权限的读者隐藏,直到你重新准备该场景(Fix 会对所有这类场景执行这一步),或检查并保存其私密条件。之后才加入的角色不算作变化,除非该场景只有一部分对其可见。有角色加入后,较早的回顾需要执行一次 Fix。能访问全部来源消息的读者仍可召回它。手动修正的文本绝不会被悄悄重写。 - 场景日期由所有已分配的参与者共享。原文摘录绝不包含对角色隐藏的消息或耳语。含有仅写给部分角色的内容的摘要,仍会附上摘录,摘录只引用该角色看到过的消息。要让某条消息不进入某个角色的记忆,就对该角色隐藏这条消息。
- 在合并回复的群聊里,召回内容包括至少一个角色记得的事。并非每个角色都知道的场景或私密部分会被标明,例如“known only to Kaito”。摘录只引用每个记得该场景的角色都看到过的消息。没有任何角色记得的记忆,例如仅限旁白的场景,仍会排除在外。在角色逐个回复的群聊里,每个角色只召回自己的记忆。
决策回忆的工作方式
- 普通回忆先筛选出最多 24 个场景回顾;如果 Maximum recalled scenes 更高,就以它为上限。候选名单结合了文本匹配和嵌入。嵌入会把每个场景与正在回复的角色上次发言以来你的消息(最多六条)逐一比较。角色第一次回复时,使用你的最新一条消息。在几乎所有场景都有嵌入之前,候选名单改用普通回忆的排序。排名前三的每个场景,其后紧接的那个场景也会得到一个名额。
- 模型判断的每份回顾都以一行开头:消息范围、故事日期和发言者。模型挑出相关场景,再从每个选中场景的原始消息里取匹配度最高的至多 12 条逐一判断,以选定该场景的摘录。评价最高的那条作为中心,其余被选中的消息会把摘录加长,最多到 Maximum messages per excerpt(每段摘录最多消息数) 为止。
- 对于每条新消息,模型还会检查故事是否转到了另一个地点或时间、是否切换到身在别处的角色,或者是否跟在一条场景分隔行之后。它能看到此前的三条消息,以及每条消息的作者。边界不确定时,场景保持开放。有效的决策也可以不选择任何内容。
- 时间限制:每一轮大致得到模型回答每个问题所需的时间乘以问题数,再加一半,至少 10 秒、最多 25 秒。一次回复的两轮合计最多 40 秒。模型答不完所有问题时,会少判断一些,匹配度最高的优先。请求很短,所以按时到达的答案仍然算数。在此期间,回复会显示平常的 Thinking…(正在思考…) 占位提示。
- 某个请求失败、超时或太大时,只有这些记忆会回退到普通回忆,排在模型选中的场景之后,回执也会注明这一点。连接缺失,或某一轮一个答案都没收到时,则完全回退到候选名单的排序和文本匹配。场景决策不可用时,回退到标准的场景检查。
- 这个模式下也会生成嵌入。新生成摘要的场景会立即得到嵌入。较早的场景,以及用别的嵌入模型生成过嵌入的场景,会在之后的回复中陆续补上,每次几个。Reindex 会一次全部生成。
- Peek Prompt → Decision diagnostics → Advanced Memory activity(查看提示词 → 决策诊断 → Advanced Memory 活动) 会显示最近一次召回和场景检查的已保存结果:模型、用时、分数、选中的记忆或场景起点、回退状态,以及场景为何没有摘录。它最多保留 128 个结果。这些是过去的活动,不是预测。打开它不会重新执行决策。兼容的备选回复会复用已保存的选择。续写会重新选择记忆。
- 托管的 Decision 账号会在其上下文预算内收到有限的批次。受管理的 Open-Jev 模型使用实测的单题用时;Decision 账号会在一个请求里一并回答该请求的所有问题,所以每个请求只算一次。
预设中的位置
预设作者可以用常规的区块顺序、名称、角色和分组控件放置以下内容标记:
| 标记 | 内容 |
chat_summary | Chat Summaries 中符合条件的常驻条目。 |
current_scene_summary | 进行中场景较早部分的来源摘录。 |
recalled_scenes | 所有选中的场景摘要,每条后面紧跟其摘录。 |
每个组件遵循预设的 XML、Markdown 或 None 格式。空组件不输出任何内容。第一个启用的标记决定位置。没有启用标记的组件会在历史之前补入一次,因此旧预设也能用。预设选择器只提供 Recalled Scenes。旧的 recalled_messages 标记是别名,启用的 recalled_scenes 标记优先。关闭 Advanced Memory 时,这些标记为空。
限制
召回是有选择的,摘要可能遗漏细节。重要修正应保存在来源聊天记录或摘要编辑器中。嵌入失败时,仍有有限的文本召回和有效的连续性内容。档案绝不会整个插入。指令或附件放不进上限时,缩减它们或提高上限。回复预留放不进模型的总上下文时,减小输出大小或改用上下文更大的模型。Advanced Memory 会停止,而不是悄悄删除指令。
Advanced 模式开启期间会接管检索,因此 Standard Recall 不会再插入一份相同内容。它还会替代该聊天通常的 Roleplay 自动摘要计划。关闭它后,常规设置恢复生效。现有世界书和可下载的智能体仍遵循各自的范围规则。
相关指南
- 内置模型设置
- 连接 AI 服务商
- Conversation 模式:入门
- Roleplay 模式:入门
- Marinara Engine 故障排查