V

Are you 18 or older?

Velvary contains adult content. You must be 18+ to enter.

Leave
How it works

AI character memory: why it forgets and what to do about it

9 min read · Velvary

A week into the conversation, she asks what your cat is called. You've told her. Twice. It's the most common complaint about AI companions, and it's almost always explained wrong: «the model is dumb», «they're cutting costs». The real reason is architectural — and once you understand it, you can predict fairly accurately what any companion will remember and what it will drop.

Below is how AI character memory actually works, why «just save the whole conversation» is not an option, how to tell real memory from an imitation of it, and what you can do from your side. I'm using a system I built as the example, so expect specific numbers and an honest list of what it forgets.

A language model has no memory at all

This is the part worth internalising. A large language model holds no state between requests: every message you send is processed from scratch. The model doesn't «remember» yesterday's conversation — relevant pieces of the past are fed back to it alongside your new message. Everything that looks like memory is the scaffolding around the model, not the model itself.

Which leads somewhere inconvenient: how much you can feed back is capped by the context window. It's large, but finite — and more to the point, every token in it is paid for on every single message. A service that stuffed the entire history into context would pay tens of times more for reply number one hundred than for reply number one. Nobody does it. The question is always what to select.

The three layers memory is built from

Practically every service solves this the same way — three layers with different lifespans. What differs is the implementation, and how much of it was built at all.

1. Recent messages, verbatim

The last N turns go in as they are. This is what gives you coherence within a conversation: pronouns, callbacks to something said a minute ago, a joke picked up and continued. We pass the last 12 messages verbatim. Why not 50: every extra message costs money and, more importantly, dilutes the model's attention. A long context degrades answer quality — the model starts latching onto random details buried in the middle.

2. A rolling summary

Everything pushed out of the verbatim window isn't discarded — it's compressed into a short recap. That recap is rewritten as new messages accumulate: ours rebuilds every 20 messages, folding the previous summary together with the latest batch.

This layer is where «remembers the gist, fuzzy on specifics» comes from. A summary is lossy compression. «Talked about his job and the move» will survive a hundred messages; «backend engineer at a fintech, moving to Lisbon in March» probably won't. What survives is decided by the model doing the compressing, and it isn't precisely predictable.

3. Facts about you, in a searchable store

The interesting layer, and the one many services simply don't have. After each exchange, a separate model call runs in the background: «extract new meaningful facts about this person». Name, job, interests, significant events, preferences. Each fact is turned into a vector — a numerical representation of its meaning — and stored.

Then comes the part that looks like magic and isn't. When you send a new message, it's vectorised too, and the store is searched for the facts closest in meaning — we pull the five most relevant. Those are what goes into the prompt. So the character doesn't «recall» everything; it recalls what's relevant to what you're talking about now.

The practical consequence is worth knowing. Ask about the cat and the cat fact surfaces, even if it was stored two months ago. But while you're discussing work, that fact won't be in context at all, and she can't bring it up unprompted. The memory is associative, not chronological. That's not a bug — that's exactly how semantic search behaves.

One more detail: deduplication. The same fact resurfaces constantly in conversation, and without a filter the store would fill with a hundred variations of «likes coffee» within a month. We cut on cosine similarity: if a new fact is more than 0.92 similar to an existing one, it isn't saved. The threshold is hand-tuned — too strict and duplicates pile up, too loose and distinct facts get collapsed into one.

What that adds up to in practice

Rather than hand-wave, here are live numbers from our store at the time of writing: 14,372 stored facts across 604 users. That's 17.7 facts on average per user-character pair, with the most active conversation at 157.

Note the order of magnitude. This is not a full transcript archive — it's a distillation: a few dozen statements the system judged worth keeping. If anyone promises you a character that remembers everything you've ever said, word for word, that's either untrue or a service whose economics won't survive the year.

Why memory doesn't carry between characters

In our system facts are bound to a user-and-character pair. Tell one about your divorce and the other has no idea. Merging them would be technically easier, and we get asked why we don't fairly often.

Because shared memory breaks the illusion outright. A character who knows, from the first message, something you never told her doesn't read as «attentive» — she reads as unsettling. You can physically feel the single database behind the curtain. The separation costs us duplication, and that's the price of every conversation starting honestly.

How to tell real memory from an imitation

There's a simple test. It takes about ten minutes and works on any service.

  1. Drop a specific fact in passing. Not «remember that…», but casually, mid-sentence: a pet's name, the town you grew up in, a band. Services faking memory respond to the explicit «remember this» command and fail on the passing mention.
  2. Talk about something else for twenty messages. You need to push the fact out of the verbatim window — otherwise you're testing the recent message buffer, not memory.
  3. Come back to it indirectly. Not «what's my cat's name», but «my cat's been impossible today». A direct question is easy to deflect with a polite non-answer; an indirect mention tests whether the fact was actually retrieved.
  4. Check again the next day. Plenty of services keep «memory» in the session, and it dies with it. A gap of a day separates real storage from a buffer.

And an honest caveat about this test: no service passes it completely. Ours doesn't either. If a fact was mentioned once, vaguely, the extractor may not have judged it meaningful — and then there's nothing to retrieve, because it was never stored. The reasonable expectation is «remembers what matters», not «remembers everything».

What you can do from your side

Since memory is selected automatically, you can influence the selection.

State facts as statements. «I work night shifts in an ICU, one on three off» extracts reliably. «You wouldn't believe what goes on at my place» extracts nothing, because there's no fact in the sentence.

Repeat what matters, a while later. Not back to back — dedup will catch that. But something mentioned across two separate conversations has a noticeably better chance of sticking than something said once.

Return to topics in your own words. Retrieval is by meaning, not word match, so rephrasing works — and it doubles as a check on whether the fact is really stored.

Don't fight the small stuff. The colour of her dress from two days ago won't persist, and that's fine: this layer is about you, not about the scenery.

What not to expect

Memory is the most oversold part of these services, and sobriety here serves you better than marketing.

A character will not assemble a coherent picture of your year. She operates on a few dozen disconnected statements that don't always relate to each other. She won't notice you contradicting yourself — both statements just go into the store. And she doesn't «miss you» between sessions: nothing happens in the gaps, there is no inner life running in the background.

What does work is the sense of continuity. A conversation that resumes rather than restarts; a callback to something you said two weeks ago; a question about how that situation turned out. For most people that's enough to stop the whole thing feeling disposable. If you want to see how it holds up in practice, you can pick a character from the catalogue — the first messages work without signing up — or build your own companion in the studio if you'd rather set the personality yourself.

And if you're choosing a service and want the criteria beyond memory, there's a separate guide to AI girlfriend chat.

Frequently asked questions

Why does my AI character forget what I told it? +

A language model keeps no state between messages — every reply is built from scratch. «Memory» is assembled by the scaffolding around it: recent messages verbatim, a compressed summary, and a store of facts about you. What gets forgotten is whatever fell through all three layers: detail lost in the summary, and facts the extractor didn't judge meaningful.

How long does AI companion memory last? +

Facts about you are kept indefinitely while the account exists — they aren't expired on a timer. The limit isn't time, it's selection: what's stored is a distillation, not the full transcript. In our case that averages 17.7 facts per user-character pair.

Does the character remember the whole conversation word for word? +

No, and no service does — every character of context is paid for on every reply, which makes a full archive economically impossible. Only the last 12 messages go in verbatim; everything older lives in compressed form.

How can I test whether a service has real memory? +

Mention a specific fact in passing (not as a «remember this» command), talk about something else for twenty messages, then return to it indirectly — and repeat the check the next day. Imitated memory fails on the passing mention and on the overnight gap.

Why doesn't a character remember what I told a different character? +

Memory is bound to the user-and-character pair and deliberately doesn't transfer. A character who knows something you never told her breaks the sense of a separate person — it makes the single shared database behind the curtain obvious.

Can I make an AI character remember something important? +

Not directly — selection is automatic. But you can influence it: state facts as complete sentences rather than hints, and mention the important ones across two separate conversations. Facts like that are markedly more likely to stick.

Read next

Try it instead of reading about it

Pick a companion and send the first message — free, no sign-up needed.

Choose a companion →

Continue in Telegram

Chat right inside Telegram with @Velvarybot

Email

Enter your email and we'll send you a reset link.

💎

Need 💎 · you have 💎

Get a subscription

We use cookies to keep you logged in and improve the site.

V