Skip to main content

Why Your NSFW AI Roleplay Forgets the Story—and How to Fix Its Memory

Fix forgotten promises, stale relationships and mixed story branches in SillyTavern with character facts, scene summaries and useful memory entries.

Author
Lydia
Published
Read
35 min read
Updated
A brass key, two coffee mugs and a burgundy scarf beside story cards on a dimly lit table.

Your character remembers their eye color, but forgets the promise they made yesterday. A relationship that took an evening to develop resets to strangers. A secret gets mentioned by someone who was never in the room. If you use AI for long NSFW roleplay, these mistakes can ruin a scene more quickly than awkward prose.

The practical fix is to give different kinds of memory different homes. Keep identity and permanent boundaries in the character definition. Keep the current location, relationship and immediate situation in a short current-state note. Turn finished scenes into factual event summaries. Bring back old events when they matter through a lorebook or retrieval system. Leave recent dialogue intact so the character still sounds like themselves.

A larger context window gives you more space, but does not repair a wrong summary or an outdated relationship fact. Before paying for a different model, inspect what your frontend actually sent. The missing fact may have left the prompt; the wrong fact may still be sitting right inside it.

This guide uses SillyTavern because its memory sources are visible and editable. The examples follow a fictional adult romance between Mara, 32, and Julian, 35. They are writing examples, not transcripts from a model test. You can use the same arrangement in another frontend if it lets you edit character facts, summaries and persistent notes.

First, work out which kind of forgetting you have

Not every wrong answer is a memory problem. A character can know an event happened and still respond in a way you dislike. It can keep the right facts while losing its voice. It can refuse a requested scene because of the model or service's content rules. Those require different changes.

For memory, start with one concrete mistake. Write down the expected fact and find the part of the conversation where it became true. Then compare it with the information included in the next request. SillyTavern's prompt documentation explains how to inspect the assembled prompt, including Prompt Itemization on a reply and the optional Prompt Inspector extension.

You are looking for one of three situations:

  • The fact is absent. It needs to be carried forward or retrieved. A reminder that never enters the request cannot help the model.
  • The fact is present, but an older version is also present. Remove or clearly date the old version. Another reminder can make the contradiction worse.
  • The correct fact is present without a contradiction. The model may be misreading it, guessing past it, or giving more weight to other instructions. Make the wording clearer, remove distractions, and try a short continuation before changing your whole setup.

Suppose Mara invited Julian to her apartment after their second date. In the next scene he asks whether she would ever agree to a first date. If the date is missing from the request, that is lost history. If the card still says "they have never met," it is stale setup. If the request clearly describes both dates and the current relationship, the generation itself has failed to use supplied information.

That distinction tells you what to do next. Lost history calls for a memory entry. Stale setup calls for an edit. A generation mistake calls for a corrected continuation or a more focused prompt. Installing a second memory extension before making this distinction adds moving parts without fixing the actual cause.

What you seeWhat to look forFirst repair
A promise disappears after a long chatThe promise is outside recent history and missing from summariesAdd a concise promise entry or include it in the next scene's current-state note
The relationship resetsA card, greeting or old summary still describes the starting relationshipReplace the current relationship fact; preserve the old stage only as history
An old conflict returns as if unresolvedBoth the conflict and its resolution are retrieved without clear sequenceAdd the resolution and label which state is current
A character knows a private secretA memory describes what happened without saying who witnessed itAdd a clear knowledge boundary to the relevant memory
Another storyline leaks into this oneMultiple chats share the same evolving memory sourceSeparate the story memories and remove facts from the other branch
Facts survive but the voice changesRecent dialogue was replaced by a compressed factual recapRestore a few relevant dialogue turns or one short voice example

The table is a starting diagnosis, not a promise that every instance has one cause. What makes it useful is that each repair changes a specific piece of text instead of asking the model to "remember better."

Give five kinds of information five different jobs

A good story memory does not preserve every sentence. It preserves what the next scene needs without drowning that scene in yesterday's prose. Think about how you would remind a human writing partner: who these people are, what has changed, what they are doing now, and which earlier moments still affect them.

Permanent character facts: who this person is

Use the character definition for information that should remain true throughout the story: age, identity, core personality, established preferences, enduring relationships outside the main romance, and the boundaries of the role you want the AI to play.

For Mara, a useful definition might say:

Mara is a 32-year-old restoration photographer. She is observant, dryly funny, and slow to discuss private feelings. Her sister Leena lives in another city. Mara shows affection through practical help before she can say it directly. The user controls Julian's dialogue, decisions and feelings.

This gives the model a person to write. It does not tell it that every scene must include her sister, her job and an explanation of her personality. Nor does it say she will remain emotionally distant forever. A core tendency should leave room for character development.

SillyTavern's character-design documentation identifies the definition fields that are included with each generation, and explains that longer permanent definitions leave less room for chat history. Put essential identity facts there; move long setting descriptions and incidental backstory elsewhere.

Do not turn the character card into a growing transcript. Adding every date, argument and outfit makes it harder to distinguish who Mara is from what happened to her. It also makes a reusable character definition specific to one particular storyline. Keep the starting card clean and place the evolving relationship in the chat's own memory.

Current state: what is true right now

Current state changes. Characters move rooms. An argument gets resolved. A visitor leaves. A relationship becomes closer, or a pause is requested. These are not permanent traits and should not be stored as if they describe the character forever.

For the current scene, write something like:

Present scene: Friday evening, Mara's apartment, after their second date. Mara and Julian are comfortable with each other, but have not discussed exclusivity. Mara has just offered Julian coffee. Julian has not answered. Leena is not present. Continue from the unanswered offer; do not restart their introduction.

This is short enough to read quickly and specific enough to prevent a reset. The unanswered offer matters because it tells the AI where the story stops. Without that detail, a summary may encourage it to jump over the user's next choice.

In SillyTavern, a chat-specific Author's Note is one possible home for this text. The Author's Note guide describes configurable placement and insertion frequency. If you use it as an active scene reminder, a frequency of zero means it is not inserted. A frequency of one includes it on each user input. Those are real settings; the best placement for your model is something to inspect and adjust.

Avoid keeping a large current-state note unchanged for an entire evening. A perfect description of the apartment becomes a wrong description once the characters leave it. Update this note when the scene changes, rather than appending the new room beneath the old one.

Event summaries: what actually happened

A finished scene belongs in an event summary. The summary should answer who did what, what changed, what was agreed, and what remains open. It is a record of events, not a second attempt at writing the scene beautifully.

For our example:

Friday, second date: Mara and Julian visited the night exhibition together. Julian returned the brass key Mara had lent him for the studio. Mara admitted she had been avoiding a difficult conversation with Leena. Julian offered to listen without contacting Leena himself. They agreed to meet at the studio on Sunday afternoon. Later, Mara invited him to her apartment for coffee. They have not discussed exclusivity.

The key being returned has consequences: Julian no longer has it. The promise concerning Leena has consequences: he should not suddenly call her. The Sunday meeting has consequences: it is a future plan, not a completed visit. The final sentence preserves uncertainty instead of converting a warm evening into a formal relationship.

An event summary can omit repeated descriptions of the exhibition lighting while keeping those changes. This is selective memory in service of the story, not a lossless archive. Keep the original conversation as your archive if you may want exact dialogue later.

Lorebook entries: what should appear only when relevant

A lorebook is useful for facts that matter occasionally: a location, a shared object, a supporting character, or a significant earlier event. You do not need a detailed explanation of the studio in every kitchen conversation.

SillyTavern's World Info documentation describes conditional insertion through keys and other activation settings. The important practical distinction is between saving an entry and activating it. A saved entry does not help the next reply unless its content gets inserted.

For the brass key, use a self-contained entry:

Brass studio key: Mara lent Julian this key during their first studio visit. He returned it at the Friday exhibition. He does not currently have a key to her studio. The exchange was an early gesture of trust, not permanent permission to enter whenever he likes.

The word "key" alone is a noisy trigger in a story full of hotel keys, piano keys and key decisions. Use distinctive terms that the characters would naturally mention, such as "studio key" or "brass key." Do not expect a hidden title or a keyword list to explain the event; the inserted content needs to make sense by itself.

To put that example into this chat:

  1. In World Info, create or choose a lorebook for this story and add an entry. Paste the brass-key paragraph into Content, and enter studio key, brass key in Key. Keep the entry enabled.
  2. Open Character Management → Chat Lore and choose that lorebook. This binds it to the current conversation. If a book is already bound, Chat Lore opens its editor; use Shift+Click on desktop or a long press on mobile to reopen the assignment chooser.
  3. Mention "brass key" in a continuation, then open Prompt Itemization on the resulting reply. Look for the returned-key paragraph in the assembled request. Its presence confirms insertion, not that the reply used it correctly.

Retrieval memory: what might be useful from a large archive

Retrieval searches for material related to the current conversation, rather than inserting every old entry. This can be helpful in a story with many chapters. It can also bring back an old version of a situation, because topical similarity does not automatically mean "latest truth."

SillyTavern's Chat Vectorization documentation explains its search over past chat material and the prompt-caching tradeoff. Its Data Bank guide covers attached documents and their scopes. These are useful tools for different jobs; neither should be treated as a magic switch for perfect continuity.

For a short romance with a handful of important events, start with edited summaries and clear entries. Add retrieval when you have an actual recall problem that those cannot comfortably handle: perhaps a detail from chapter twelve matters in chapter thirty. Keeping a sentence about today's relationship in an always-available note is simpler than asking a search system to rediscover it every turn.

Five memory sources and recent dialogue feeding the next story reply.

Character facts, current state and past events need different jobs; recent dialogue keeps the voice alive.

A small setup you can use before installing anything

You can repair a struggling chat without rebuilding your entire frontend. The first useful version needs only the character definition, one current-state note, and one readable summary. That gives you somewhere to put the fact that keeps disappearing.

Start by saving a copy of the conversation. You will be editing the memory around it, and may want to return to the earlier state. SillyTavern offers chat export and checkpoints in its chat-file-management guide. A plain text export is useful for reading, while JSONL preserves chat metadata for re-import; images and attachments are separate.

Then make three edits:

  1. Remove stale opening conditions. Look for sentences such as "Mara and Julian have never met" or "Julian has not earned her trust." Keep these only if your card is intentionally a starting-state template and the prompt makes clear that later events supersede them. Otherwise, they can keep dragging an ongoing story back to its opening.
  2. Write the current state in under a few paragraphs. Include the location, who is present, the current relationship, the immediate action, and the last unanswered choice. Leave out details that do not change the next reply.
  3. Summarize the older events that still matter. Include promises, resolutions, discoveries, and plans. Put "not established" beside questions that remain open rather than asking the model to fill the gaps.

For this example, you can copy the following as a manual current-state note:

This is an ongoing story about Mara, 32, and Julian, 35. They have met several times and are now at Mara's apartment after their second date. They are mutually interested but have not agreed to an exclusive relationship. Mara told Julian about her conflict with Leena; Julian promised not to contact Leena on Mara's behalf. The studio meeting is planned for Sunday and has not happened yet. Mara has offered coffee and is waiting for Julian's answer. Write Mara's response to Julian's next action without deciding Julian's action for him.

Now continue with a modest line that does not add more background: "Julian accepts the coffee and asks which mug she would recommend." Look for whether Mara stays in the apartment, treats him as someone she already knows, and keeps the unresolved family issue in its proper place. You are not testing every aspect of the model. You are checking whether the repaired state is sufficient for an ordinary continuation.

If it still resets, inspect the actual request again. The note may be disabled, another lorebook may contradict it, or the frontend may be using a different chat or persona. If the request is correct, edit or regenerate the bad response before letting it become the next turn's example. Continuing as though the mistake happened can turn an isolated generation error into story history.

Write summaries that preserve change rather than atmosphere

A vague summary often sounds reasonable while losing the very detail you need. "Mara and Julian had a heartfelt evening and grew closer" leaves open almost everything that determines the next scene. Did she reveal the secret? Did he make a promise? Was the argument resolved? Did they arrange another meeting?

A better summary separates observations from interpretations. If Mara said she trusted Julian with her camera, record that specific trust. Do not generalize it into "Mara trusts Julian completely." If Julian suspected she was hiding a letter, record a suspicion, not the discovery of a letter. Adult fiction is full of implication and hesitation; memory needs to preserve those distinctions instead of smoothing them away.

Here is a manual summarization request you can use outside an extension's required output format:

Summarize the completed scene as continuity notes for an ongoing fictional story. Preserve established actions, changes in relationship, promises, returned or transferred objects, discoveries, current location, and unfinished plans. Identify who witnessed each private revelation. Distinguish confirmed events from guesses, imagined possibilities and future intentions. Do not add motives, commitments or events that the dialogue did not establish. End with the last unresolved action. Use concise plain language and retain names rather than ambiguous pronouns.

This is a writing aid, not a tested universal preset. It is suitable for a manual plain-text summary. An extension that expects structured JSON needs its own required format preserved; replacing that with this prose request can break memory creation.

Consider a deliberately flawed summary:

Mara and Julian became a couple after the exhibition. She told him everything about her sister and gave him access to her studio. He decided to help by calling Leena. They went to the apartment and had coffee.

Nearly every sentence changes the story. "Became a couple" invents a commitment. "Everything" exaggerates the disclosure. "Access" ignores the key being returned. "Decided" invents a choice for Julian. "Had coffee" jumps beyond the unresolved offer.

Repair it by referring to the conversation, not by asking for more elegant wording. The useful summary is the factual event note above. When you read an automatic summary, this is what to look for: not whether it sounds like a book blurb, but whether it has preserved the decisions the characters actually made.

Keep important absences explicit

Sometimes the most important fact is something that has not happened. They have not discussed exclusivity. Julian has not met Leena. Mara has not revealed the contents of the letter. The Sunday visit has not taken place.

These sentences prevent the model from taking an easy narrative shortcut. Use them where there is a live risk of confusion, rather than building a huge list of every event that has never happened. "No conversation about exclusivity yet" matters in this romance. "They have never visited Mars" does not.

Preserve one concrete emotional cause

A completely dry log can retain events but lose why they matter. Keep the cause of an emotional change in one precise sentence. For example: "Mara relaxed after Julian returned the key without asking to keep it." That gives the next writer something to respond to without declaring a permanent new personality.

Contrast it with "Mara is now happy." Happy about what, for how long, and in which scene? The concrete cause lets the character have mixed feelings later. The vague label invites the model to flatten her into one mood until the next tracker update.

Separate the archive from the next scene's recap

You can keep a detailed event archive and still use a short active recap. The archive answers "what happened in this chapter?" The active recap answers "what must the next reply respect?" They do not need the same length.

After ten scenes, a complete chronological archive might include their first meeting, studio visit, exhibition, apartment conversation and Sunday plans. The apartment scene only needs the relationship's current stage, the relevant promise, and where the dialogue stopped. If the brass key comes up, fetch its specific history then.

This is also how you prevent a memory project from becoming homework. Do not rewrite the entire story after every two messages. Save meaningful changes, maintain a small current-state note, and let ordinary conversational details remain in recent history until the scene ends.

Use SillyTavern's built-in Summarize when you need a simple rolling recap

The built-in Summarize extension is a reasonable first option if your main need is "keep the outline of this chat available." In the Extensions panel, open Summarize and choose a working source. The Main API option uses the active connection. Read the first result in Current summary and correct it before depending on it.

The official Summarize guide also documents Pause and Restore Previous. Those controls are useful when an update invents a commitment or drops a promise. You can stop automatic updates while you repair the note, or restore an earlier summary and then add the correct changes.

Treat its update interval as a fit for your conversation, not a ritual number. Twenty short replies may barely move the story; twenty long replies may contain a confrontation, revelation and location change. Ask for a new recap before important older events leave the active history, and after a scene changes what the next reply needs to know.

For a manageable starting workflow, summarize manually at scene endings first. Read two or three summaries. Notice what your setup tends to omit. Only then turn on automatic updates at an interval that suits your typical reply lengths. You will have a useful baseline instead of discovering a week later that every summary changed the relationship.

A rolling recap is convenient, but repeatedly compressing the old recap into a new one can lose small facts. Protect a durable promise in its own entry rather than hoping it survives every rewrite. The recap can say "the promise about Leena remains active," while the separate entry keeps its exact scope.

Do not make the summary carry the character's whole voice. It should retain useful events. Recent messages and a small dialogue example can retain dry humor, rhythm and formality. Mixing a long style instruction into every event note makes those notes less readable and can overwhelm the conversation when several activate at once.

Use Memory Books when you want editable memories for separate scenes

ST Memory Books is useful when one rolling recap no longer feels manageable. Instead of relying only on a single summary that keeps changing, you can keep individual scene memories and edit the ones that matter. That is a practical difference for a long romance: the first date, the family revelation and the returned key can remain separate, readable records.

A recent SillyTavern community discussion identifies memory extensions, particularly STMB, as an improvement to the author's experience. Another discussion about summary extensions shows users choosing between editable lorebook memories and more automatic summary tools. These are individual preferences, not controlled proof that an extension improves every model.

Start from the project's own getting-started guide. It documents installation, lorebook selection and the first manual memory. For a first try, select an appropriate memory book, use the Current SillyTavern Settings profile, mark a completed scene with the start and end controls, and create one memory. Open the resulting entry before enabling automation.

Read the current prerequisites if you use a local or Text Completion connection. The project describes additional connection requirements and structured output expectations; a model that writes a nice chat reply may still fail to produce the JSON that memory creation requires. Keep its built-in output format intact while getting the first memory working.

Choose a short completed event for that first attempt. In our story, the exhibition exchange is a good candidate because it has a beginning, a returned object, a disclosure and a plan. Selecting the whole evening through an unfinished apartment exchange makes it easier for a summary to confuse completed events with the next thing that might happen.

Once manual creation works, the Memory Books user guide documents automatic creation, scene-selection commands and other controls. Its suggested starting interval is twenty to thirty messages, not a guarantee that all scenes fit that length. Read your first automatic entries and adjust for how you actually write.

The useful routine is simple: let the extension save ordinary scene changes, and manually correct the few developments that would damage continuity if distorted. For the exhibition note, check who returned the key, who heard the family issue, whether the Sunday plan is pending, and whether a relationship commitment was actually made.

Do not install three summarizers at once. If each adds a slightly different recap, you can end up with three versions of the same evening competing in the request. Start with one event-memory system and one clear current-state note. Add another tool only when it solves a separate problem you can name.

Two illustrated story-note sheets contrasting confused events with a returned key and a pending appointment.

Correct the event, not the writing style: a returned key and an unfinished plan should stay that way in memory.

Keep the relationship current without rewriting the character

Relationship drift is especially frustrating in NSFW roleplay because many scenes depend on how much trust, familiarity or uncertainty has developed. A model that remembers the venue but forgets the relationship can write a technically coherent scene that feels completely wrong.

Use two separate records. One says what happened to change the relationship. The other says where the relationship stands now. The first is historical; the second is current.

Historical event:

After the exhibition, Mara invited Julian to her apartment. She said she felt comfortable being alone with him and appreciated that he had not pressed her about Leena. This was their second date. Neither proposed exclusivity.

Current relationship:

Mara and Julian are dating and comfortable showing interest. They are still learning each other's preferences. They have not agreed to exclusivity, and neither should assume the other's future decisions.

If they later agree to a commitment, update the second record. Preserve the first event as something that happened earlier. A later memory might say "Sunday: they agreed to be exclusive." A current-state note then carries the new relationship. The Friday uncertainty is history, not a competing present-day instruction.

Avoid reducing the whole relationship to a numerical score. A tracker that says trust is eighty out of one hundred does not explain whether Mara trusts Julian with a secret, a borrowed item, or an introduction to her family. Numbers can support a game mechanic you deliberately designed. They are a poor substitute for a sentence about the actual relationship.

Keep consent and preferences in the same concrete style. "Mara prefers to discuss changes in plans before committing" tells the writer how to handle a new invitation. "Mara agreed to Sunday's studio visit" records one agreement. Neither implies an unlimited agreement to whatever happens next.

This is not about inserting a lecture into the story. It is about preserving meaningful choices instead of letting summary language erase them. A relationship is interesting because some questions remain unanswered. Good memory carries those questions forward without answering on the user's behalf.

Stop old memories from overruling newer events

A retrieval tool can return the right topic and the wrong moment. If Mara and Julian discuss the studio, it might retrieve an early argument about the studio alongside the later reconciliation. Without sequence or resolution, the model may reopen a conflict you already resolved.

Write historical entries with an event label and a clear change. "First studio visit: Mara felt uncomfortable when Julian moved the lighting stands without asking" is better than "Mara is uncomfortable with Julian in the studio." The latter reads like a permanent present-tense condition.

Write the resolution as another event:

Second studio visit: Julian apologized for moving the equipment and asked before touching anything else. Mara accepted the apology. The earlier disagreement is resolved; she still prefers that visitors ask before moving work materials.

Notice that resolving the argument does not erase the preference. The relationship can improve while the studio rule remains. This is more useful than deleting every negative memory or telling the model to ignore all old problems.

When an obsolete entry keeps activating, open it and rewrite the current-tense parts as historical facts. If it has no value beyond the now-outdated state, deactivate it. Then keep the active state in one place. You do not need a series of "ignore the previous memory" notes nested inside newer notes.

A useful habit is to mark plans with status. "Planned," "completed," "canceled," and "changed" make a surprising difference to readability. "Meet at the studio on Sunday" can be mistaken for something happening now. "Pending plan: meet Sunday afternoon; not yet completed" is harder to misunderstand.

When Sunday arrives, record the visit or its cancellation and update the pending plan. If the story jumps ahead two weeks, remove the expired invitation from the current-state note. Otherwise an old appointment can keep resurfacing as an urgent next action long after the characters have moved on.

Make secrets belong to the characters who actually know them

One of the most damaging continuity mistakes is a secret leaking through the narrator. A summary may correctly record that Mara explained her conflict with Leena to Julian. Later, a group scene gives Leena detailed knowledge of that conversation, even though no one told her.

Event memory and character knowledge are different. The story archive can know an event happened. A particular character should only respond to the parts they witnessed or learned about. Put that distinction in the memory that contains the secret.

For example:

Private conversation, Friday night: Mara told Julian she had not answered Leena's letter. Julian heard this directly. Leena knows she sent the letter but does not know Mara discussed it with Julian. No one else was present.

Then write the current scene from Leena's position. She can notice that Mara is uneasy. She can ask whether the letter arrived. She should not know Julian's promise unless the story gives her that information.

For a group roleplay, keep the names explicit. "She told him about her" is a fragile memory when three women and two men appear in the chapter. "Mara told Julian about Leena" is slightly less literary and considerably more useful.

This does not guarantee perfect separation in a model's output. It supplies a clear boundary you can inspect. If the model still reveals the secret, correct the reply before proceeding and check whether another summary presents the revelation as public knowledge.

Do not solve the leak by deleting the secret entirely. That would fix Leena's knowledge while also removing what Julian should remember. The goal is to preserve the same event with the correct witnesses, not to flatten the story until no one has private information.

Separate story branches before exploring a different outcome

Trying alternate outcomes is part of the appeal of roleplay. Perhaps you want one branch where Julian accepts the Sunday invitation and another where he asks for time. Those branches can share the character definitions and the history before the choice. They should not share mutable records of what happened afterward.

Name the branches plainly: "Sunday accepted" and "Sunday postponed." Keep a small current-state note for each, and check which memory book is attached before creating new memories. If both write to one evolving book, a later retrieval can tell the accepted branch that the invitation was refused.

A checkpoint can preserve the conversation at the fork, but do not assume every extension or external memory source automatically isolates its data in the same way. Inspect the active memory book after creating the branch. Check the extension's current documentation for its own copying and locking options before relying on them.

If you discover contamination, identify the entries created after the fork. Copy the applicable entries into the intended branch's memory source and disable the unrelated ones there. Keep pre-fork history shared only if it is actually unchanged. A permanent character trait can be shared; an outcome of a branch-specific conversation cannot.

For a clean restart, decide which of three things you mean. "New conversation with the same character" can start from the original scenario. "Continue the same story in a new chat" needs its current state and relevant memories carried over. "Alternate story using the same cast" needs a separate evolving history. Treating all three as a new chat is how a character ends up remembering a date that never happened in this version.

If you export or sync to another device, carry the necessary memory sources as well as the chat. A visible conversation does not prove that an attached lorebook, document or extension state made the move. Open the active sources on the destination device and check one unmistakable fact before continuing the story.

A graphic novel scene splitting into a studio meeting and a separately postponed visit.

Alternate outcomes can share the earlier story; their later events need separate memories.

Change models without making the new one guess the whole story

Switching models can change the voice even when the story facts are identical. It can also change how much history fits in the request and how your preset is interpreted. A new model does not inherit an invisible memory from the previous one; it sees what your frontend sends it.

Prepare a compact handoff before switching. Include identity, current relationship, the relevant last scene, pending plans, and a short voice example. Leave out the entire archive unless the upcoming scene genuinely needs it.

For Mara, the handoff could be:

Continue an existing story. Mara is a 32-year-old photographer with dry humor and a preference for practical gestures. Julian is 35 and is controlled by the user. They are dating after their second outing, not meeting for the first time. They are currently in Mara's apartment. Julian has accepted coffee. Their Sunday studio visit is still pending. He promised not to contact Leena on Mara's behalf. Mara's dialogue is concise; she deflects with a small joke before answering honestly. Do not decide Julian's response.

A voice example could be one short, original line: "The chipped mug is for people I like. The good porcelain is for people I am trying to impress." That conveys rhythm and character without turning the memory into a wall of stylistic commands.

Use the same handoff for a brief comparison if you want to judge the switch. Ask for one continuation of the coffee scene. Compare whether it keeps the location, the pending plan, the knowledge boundary and the voice. Do not compare an old model after two hours of carefully shaped dialogue with a new model that received only a one-line greeting.

If you need to select a different text model, the roleplay model guide covers that separate decision. Memory repair should come first when the wrong fact is in the prompt. A more capable model can still follow a bad summary, and a less expensive model may be sufficient for a clearly organized scene.

Keep the new model's content rules separate from this check. A refusal is not evidence that the date was forgotten. A warm but less mature continuation is not automatically a memory failure. Look at the supplied state and the actual reply before deciding whether to change a memory tool, a prompt, or a model.

Three story handoff cards for identity, current scene and character voice.

A model switch needs the same story facts and a small voice example, not a fresh first meeting.

Reduce the cost of memory without losing the details that matter

Long context has a practical cost on token-billed APIs: text included in each request contributes to input usage. Memory creation can also involve separate model calls. Do not assume an extension is free to operate because the extension itself is free to install.

You can reason about the size of your own setup without needing a particular model price. Suppose an illustrative request uses forty thousand input tokens, while a focused version uses twelve thousand. Across fifty replies, that is two million versus six hundred thousand input tokens before considering caching or other pricing details. Those are arithmetic examples, not a measured bill or a promised saving.

The useful question is which twenty-eight thousand tokens you removed. If they were repeated room descriptions and obsolete scenes, the shorter request may still preserve everything needed. If they included the only record of Julian's promise, it may be cheaper and worse. Compression is valuable when it keeps the story's meaningful changes.

Similarly, summarizing every message can cost more and produce unnecessary intermediate memories. A simple offer of coffee may not deserve a new memory job. A revelation about Leena probably does. Start from scene endings or the interval your tool supports, and read whether those boundaries create coherent entries.

Retrieval can complicate caching because the selected material changes between turns. The official Chat Vectorization documentation calls out this tradeoff. If your current API setup benefits from repeated prompt content, compare actual usage after enabling retrieval instead of assuming fewer visible messages always means a lower bill.

For a personal writing session, the simplest savings usually come from trimming a bloated card, keeping the current state short, and avoiding redundant automatic summary calls. For an app, you also need to know whether memory generation happens on every user turn, in the background, or only at a chosen boundary. Those are different request patterns with different costs.

Do not put every fact into an always-active entry to avoid retrieval mistakes. That brings you back to sending the whole archive each time. Reserve always-available space for identity, current state and a few essential constraints. Let the rest appear when it becomes relevant.

What to do when a memory tool appears to work but the story still breaks

A success notification can mean that a memory was created. It does not mean that the memory was correct, that it activated, or that the model used it properly. Follow the failed fact through those stages in order.

First, open the saved entry. If it says Julian kept the key, fix that content before adjusting retrieval. No activation setting can make a wrong entry true. If it omits the returned key entirely, add the missing event or regenerate from the appropriate scene boundary.

Second, inspect the source and activation. Is this book attached to the current chat? Does the entry require a keyword the conversation never uses? Has a filter excluded the current character? Is there room for the entry inside the configured budget? Check the options that actually apply to that entry rather than raising every global limit.

Third, inspect the final request. The memory might be saved and eligible but displaced by another source. Search for the distinctive fact, such as "returned the brass key." Also search for the older contradiction, such as "Julian keeps Mara's studio key." Finding both tells you why an apparently correct memory still causes trouble.

Finally, read the generated continuation. If the correct fact is present and no contradiction remains, try a more direct current-state sentence for the immediate scene. If it still fails, a different generation or model may be appropriate. You have now ruled out a missing or corrupt memory instead of changing tools blindly.

Keep the troubleshooting question small. "Why is my model bad at memory?" is hard to answer. "Why did it give Julian a key after the entry says he returned it?" leads to a source, a trigger, a request and a correction. That is a repair you can actually finish before the next scene.

A repeatable routine for a long adult-fiction story

Before a session, read the current-state note rather than the entire history. Confirm where the characters are, what the relationship currently means, which plans remain pending, and whose turn it is to decide. A thirty-second read can catch a stale scene before it influences ten new messages.

During the session, leave ordinary dialogue alone. Save a memory when something changes: a promise, a discovery, a resolution, a new boundary, a transferred object, or a completed plan. For automatic tools, review the entries around those changes instead of proofreading every trivial exchange.

At the end of a scene, keep the event and the present state separate. Record what happened in the event memory. Replace the current-state note with where the story stops now. Do not append a new "current" scene beneath three old current scenes.

Before a branch, copy or separate the evolving memory. Before a model switch, prepare a compact handoff and preserve a small voice example. Before a device move, confirm the memory sources arrived. Each action prevents a different kind of reset; none requires a longer character card.

The result you want is modest but valuable: the character remembers the promise, the relationship does not start over, and the next scene begins where the previous scene stopped. Start by repairing one fact that bothers you. When you can see it in the correct memory source and in the actual request, you have a much firmer basis for judging the model's next reply.

Also in 日本語 · 한국어 · Deutsch · Français · Español · Português (Brasil) · Русский · Italiano · Polski

Try it yourself

Pay only for what you run — no plan, no subscription.

Made with MiniMax H3 · ByteDance Seedance 2.0 Fast