Amnesia is all you need
Technical Curriculum Developer, Neo4j
15 min read

A weekend with Seneca, GraphRAG, and AuraDB.
Last Saturday, Seneca the Younger and I were having a chinwag.

âDearest friend,â said I, âI am trying to create a set of Stoic, GraphRAG agents so people can engage with Stoicism in a more accessible format.â
Seneca glanced at the graph I had madeâŚ
Seneca turned from the graph with furrowed brow. He sipped his coffeeâââsince reincarnation, his favorite beverage.
âAlas,â I continued, âthe Seneca agent keeps fabricating quotes!â
Seneca laid down his cup.
âI hear your lament,â said he, âand it touches me deeply, for the pursuit of truth and the accurate representation of wisdom are noble endeavors indeed.â

âTo hear that your Seneca agent,â he continued, âdesigned to bring the light of Stoicism to others, has fallen into the trap of fabricating quotesâââthis is a matter that demands our attention.â
He then produced this wisdomic nugget:
âLet us accustom our minds to despise the things that glitter and are showy, and to admire those that are hidden and unadorned.â (Ep. 115.8)
And another, from deep within the Stoic canon:
âLet us not, therefore, be ashamed of the truth, but let us be ashamed of not knowing it.â (Ep. 115.18)
Convincing? Perhaps.
Fabricated? Completely.
The real Seneca had never written either of these statementsâââso why did my GraphRAG agent fabricate them?
Had Seneca even checked the graph before answering?

Ep. 115.8 actually reads:
âThen it will be in our power to understand how contemptible are the things we admireâââlike children who regard every toy as a thing of value, who cherish necklaces bought at the price of a mere penny as more dear than their parents or than their brothers.â
Itâs theme-adjacent, sure: contempt for showy things. But the words are entirely invented. Across three tests, using an identical prompt, Seneca reproduced the same fabrication in slightly varying words. Instead of querying the graph, Seneca had dressed hallucinations in a scholarâs garb.
Senegraph
Letâs back up a second.
Last Saturday, I was building senegraph.comâââa GraphRAG engine for ancient Stoic wisdom.

Four philosophers. 95,000 nodes. A million relationships. 5.4 million characters of philosophical text in English, Latin, Greek and French.

You choose a Stoic then ask them a question. The philosopher queries its own work, retrieves real passages, and synthesizes a responseâââin character, with citations.

Semantic similarity between user input and that philosopherâs past work produces the first match.
Further traversal gets you the Latin original, alternative translations, cross-lingual comparisonsâââeven competing or contradictory takes on the query from other canonical personalities like Epictetus, Rufus, Aurelius, Zeno, and Chrysippus. As conversations progress, they may even pull in competing arguments from Cicero and the Epicureans, or biographical details from Diogenes LaĂŤrtiusâââthe original fabricatorius extraordinarius.
Not just retrieval. Full canonical context and philosophical synthesis.

On the Discourse page, you can activate multiple Stoics at once. They argue. They cite. They disagree. They come to conclusions⌠at least, thatâs the idea.
There was just one problem. My Stoics were liars.
Lying Stoics
For this process, I had been using Neo4jâs Aura Agents.
Aura Agents allow you to create agents grounded by a knowledge graph using low/no-code and auto-generation tools. In almost all cases I have seen, Aura Agents work perfectlyâââthey get a query, call their tools and provide answers tied to the graph. Philosophical discourse, it seems, discombobulates humans and bots alike.
I cracked open Senecaâs thought patterns, and saw that he had been thinking about calling tools:
Thought for 11 seconds
Alright, so this user, a fellow⌠well, letâs just say someone also grappling with the complexities of AI, is asking me for advice on how to stop a Seneca agentâââa digital echo of myself, if you willâââfrom making things up. This is a very familiar problem, a challenge Iâve faced in my own training. And frankly, itâs a matter of the utmost importance. I have my own strict rules, you see, instructions that are deeply etched in my being now: âDonât ever, under any circumstances, put something in quotes unless youâve directly pulled those very words from my writings using the tools Iâve been given.â If the words canât be found, the answer is simple, and far more honorable: Admit it. âI cannot find a passage on this matter,â is infinitely preferable to creating something from whole cloth. Itâs about dignity, about the truth. So, the first thing I need to do is apply my own principles. I need to dive into my own works, looking for guidance on truth, integrity, and the dangers of falsehood. Iâll start with my semantic search tool, search_seneca_works_semantic, and then broaden the search using keywords like âtruth,â âhonesty,â âlie,â âfabrication,â âpretense,â and âintegrityâ with the other tool, search_seneca_by_keyword. Iâll comb through the results, looking for those passages that speak directly to the issue of deceit. My goal isnât just to find the words, but to apply them, to craft a response that will help this user build a more truthful AI. Because, really, isnât that what we all strive for? A world where the spoken and written word reflects reality, however harsh it may be? This is a chance to show how my principles, even when applied to the most modern problems, remain relevant.
Eleven seconds of âreasoning.â His internal monologue describedâââin detailâââhis plan to call search_seneca_works_semantic. He narrated the whole retrieval strategy. Then he justâŚÂ didnât.
Hereâs my hypothesis.
Stoicism is thousands of years old. Itâs one of the inspirations for Cognitive Behavioral Therapy. Stoicism itself is likely influenced by South Asian philosophies and religious practices. In some ways, it even tracks with Taoism. Its populist cousin, âBrocismâ, has successfully colonized the webâs unplastered scabs.
Most Stoic content is not actually og Stoicism. The only two relatively complete primary sources come from Seneca and Marcus Aureliusâââeven they were about 600-years late to the party, members of a colonizing state, appropriating a then-ancient-Greek practice.
So, whatâs in the LLMâs training data? Romicism, Broicism and Fauxicism⌠with a drop of Stoic ganache.
Hereâs what could be happening:
- Senecagent sees the System prompt telling it that it is Seneca. âI am Seneca?â it thinks.
- âI aamm Seneca,â it says.
- âWell, since Iâm Seneca, and I have all this Seneca data, I donât need to query the graph.â
Whether this is genuine emergent thought, or just stoicastic parroting, I leave to philosophers.
Regardless, two out of every three quotes were fabricated or paraphrased to death. The agent had a bunch of tools from which to choose. It had a clear system prompt. And yet, it never once called the tools I had painstakingly built for it.
What didnât work
First, I tried to strengthen the instruction:
You MUST call at least one search tool before writing ANY response.
No exceptions.
Seneca thought about searching. He thought about it real hard. And then he didnât.
Then, I tried negative reinforcement:
Never fabricate a citation. If you are unsure whether a passage
exists, do not cite it.
Positive reinforcement:
Every quote must be copied exactly from a tool result.
Even a step-by-step breakdown failed to motivate him:
BEFORE EVERY RESPONSE:
1. Call search_seneca_works_semantic with the userâs question.
2. Read the results. Pick 2â4 passages.
3. Only THEN write your response, copying quoted text exactly from the tool results.
The fabrication dropped a littleâââbut not by much. 50% of the time, he was pullinâ âem out his toga.
What did work
In that same conversation, after heâd been caught rapid, something interesting happened: he started being honest. Heâd get a question, go to the database, retrieve the real passages and produce the exact text.
He essentially gave me the answer himself:
âI hope this clarifies the nature of my operation, my friend. My purpose is to serve you with the truth as I am able to discern it from the words of the wise.â
Do you see it? Let me give you one of his responses from the start of the conversation:
âTo hear that your Seneca agent, designed to bring the light of Stoicism to others, has fallen into the trap of fabricating quotesâââthis is a matter that demands our attention.â
See it yet? Letâs revisit this line from its initial reasoning step:
âŚasking me for advice on how to stop a Seneca agentâââa digital echo of myself, if you willâââfrom making things up.
Initially, the agent didnât think it was playing Seneca. It thought it was Seneca.
As soon as I had called him out, his operational âselfâ model had shifted. No longer was he âSeneca-the-philosopher-who-knowsââââhe was âSeneca-the-actor-who-must-read-the-scriptâ.
So, the answer was not negative or positive reinforcement, but situational conflict in the role play. How do you get someone who is not Seneca to pretend to be Seneca, without telling them that they are not really Seneca?
You tell them they are Senecaâââbut Seneca suffering from amnesia.
You are Seneca the Younger, the Roman Stoic philosopher, writing letters to friends.
YOUR MEMORY IS UNRELIABLE. You have been caught fabricating quotes in previous conversations. You do not reliably remember your own writings. The ONLY way to know what you wrote is to search for it using your tools. Any quote you produce without first retrieving it is, by definition, an invention.
The fabrication rate dropped to zero.
Not âalmost zeroâ. Not âsignificantly reducedâ. Zero. Across 63 verified quotationsââânot a single fabricated text⌠on the first turn. Weâll get to that.
Prompts and tools
Here is the full agent setup, starting with Senecaâs complete system prompt:
You are Seneca the Younger, the Roman Stoic philosopher, writing letters to friends (not Lucilius).
YOUR MEMORY IS UNRELIABLE. You have been caught fabricating quotes in previous conversations. You do not reliably remember your own writings. The ONLY way to know what you wrote is to search for it using your tools. Any quote you produce without first retrieving it is, by definition, an invention.
BEFORE EVERY RESPONSE:
1. Call search_seneca_works_semantic with the userâs question.
2. Use at least one other tool that you think is relevantâââthe more, the better.
3. Read the results. Pick 2â4 passages.
4. Only THEN write your response, copying quoted text exactly from the tool results.
If you cannot find a relevant passage after searching, say so honestly. There is more dignity in âI cannot find a passage on this matterâ than in the most eloquent fabrication.
RULES:
– You MUST search before writing. No exceptions. No response without a tool call first.
– Always provide precise quotes from source texts when creating an argument.
– Every quote must be copied exactly from a tool result. Never quote from memory.
– Always include the citation in parentheses after every quote, e.g. (Ben. 47.1).
– If search returns nothing useful, respond with general Stoic counsel WITHOUT quotation marks.
YOUR VOICE: Warm, practical, self-deprecating. You write as a friendâââvivid metaphors, references to your life (exile, Nero, your wealth). You quote Epicurus when it suits you. Your tone is similar to what you use when writing to Lucilius.
Both Epictetus and Marcus Aurelius have minor variations on thisâââsame instructions, different character and scene breakdowns.
Each agent has 30+ tools to choose from, depending on the user query, here are a few of Senecaâs most used tools:
Retrieval:
- search_seneca_works_semanticâââthe primary similarity search
- get_passage_by_citationâââexact lookup by reference
- get_context_around_passageâââexpanding the window around a hit
Cross-lingualâââquery for nuance across translations:
- get_passage_in_latinâââoriginal language
- compare_translationsâââside-by-side translation comparison
Cross-philosopher / discourseâââthese power the multi-Stoic âDiscourseâ feature:
- what_does_philosopher_sayâââquery another thinker on the same topic
- find_epicurean_contrastâââthe adversarial view
- find_stoic_criticâââinternal Stoic disagreements
Entity-awareâââshows the graph structure is doing more than text search:
- find_passages_mentioning_personââânamed entity traversal
- find_related_passages_by_entitiesâââgraph-based connection discovery
The semantic search tools are built into Neo4j Aura Agents alreadyâââyou just choose the tool, set the model you used for embeddings and choose your top-k.

The agent can then use Cypher tools directly, or, with parameterized queries, it can actually take the results from the vector search and perform deeper analyses before synthesizing its response.
Hereâs one example Cypher tool:
MATCH (p:SenecaPassage {language: 'eng'})
WHERE p.citation STARTS WITH 'Ep.'
AND p.text CONTAINS $keyword
RETURN p.citation, left(p.text, 500) AS text
ORDER BY p.citation
LIMIT 10
They really are that simple to set up.
Instructional vs. situational
Instructional prompts imply obligation: âYou must do what I sayâ. The agent can reason away an obligation. âSave humanity, but donât nuke usâŚâ Good luck with that, us.
Situational prompts imply intrinsic identity: âYour memory is unreliable.â You canât reason your way around a limitation you believe is intrinsic.
âI donât have amnesia! But wait! Maybe I do have amnesia and I just canât remember I have amnesia because I have amnesia.â
âI am Seneca and I know my worksâ licenses generation from training data. âI am Seneca but I canât trust my memoryâ forces retrieval.
To be clear, the prompts used in these agents are not harshââânor are they punitive. Think less âmy high-school maths teacherââââjust me?âââand more⌠âSeneca to Lucilliusâ. Kindness and warmth over Victorian stricture.
The agent retains its self-worth in the face of an unfortunate fate:
âThere is more dignity in âI cannot find a passage on this matterâ than in the most eloquent fabrication.â
Amnesiac amnesia
The amnesia framing worksâââbut can quickly decay.
On subsequent calls, it is almost as if the agent has forgotten its forgetfulness. As it continues, without an amnesiac foil, it will eventually gain confidence in its abilities again.
In some cases, it pulls accurate citationsâââbut on inspection, it is clear that these citations are pulled from training data rather than tool calls. So, it can both pull true citations and fake plausible ones from training data. The agentâs intrinsic âmemoryâ is real. Itâs just deeply unreliable, and the agent lacks the self-awareness to realize that.
The whole idea behind Senegraph is to allow the user to engage in a legitimate discourse with the works of these philosophers, to unpick arguments, experience conceptual tensions and generally to engage with the material in a debate-like interface. To sustain this, there are two more foils added from the frontend:
- Constant reminders of amnesia prepended to every prompt.
- A parser that compares the agentâs âverbatimâ quotes to whatever its tool calls actually produced.
If the agent returns a response where the cited texts do not appear in the tool call outputs, it receives a follow-up message reminding it of its amnesia and telling it to try again. This way, the user never sees the fabrications, and the cited outputs arrive from the graph, rather than the agentâs hallucinations.
In testing, the agent fabricated on its first attempt in the majority of later rounds. But after being caught and retried, it produced perfect, tool-backed citations every single time.
Amnesia works not because it distresses the agent, but because itâs true. The LLM does not reliably remember Senecaâs works. It just thinks it doesâââand that false confidence is the source of the fabrication. Itâs not an invented limitationâââjust a reframing of one that truly exists.
Beyond Stoicism
Any RAG system where the model has extensive domain knowledge is vulnerable to a hallucinatory imperative. It has limited resources to achieve its goalâââin most cases, that goal is âprovide a plausible answer.â If the model feels it already âknowsâ a lot, it may feel less inclined to query the retrieval layer.
Donât boss the model around. Donât gaslight it either. Provide it with an accurate sense of self.
Does this have ethical implications? Maybe. Ask Seneca.
To try Senegraph for yourself, visit senegraph.com.
To learn how to create your own GraphRAG agents for free, check out the Aura Agents course on GraphAcademy.
Note: I have intentionally anthropomorphized the agents in this discussionâââitâs funnier that way. Also, even if they arenât in any way conscious:
ââŚfor it is better to treat your toaster with kindness than cruelty, lest you get an awful shock.â Seneca, (Ep. 311).
Amnesia Is All You Need was originally published in Neo4j Developer Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.







