<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent Memory on FrenchForet</title><link>https://learn.frenchforet.com/agent-memory/</link><description>Recent content in Agent Memory on FrenchForet</description><generator>Hugo</generator><language>en</language><atom:link href="https://learn.frenchforet.com/agent-memory/index.xml" rel="self" type="application/rss+xml"/><item><title>The Memory Problem</title><link>https://learn.frenchforet.com/agent-memory/00-the-memory-problem/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/00-the-memory-problem/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; understand that two different things are both called &amp;ldquo;memory,&amp;rdquo; and that this
course is about the more difficult one. &lt;em&gt;Context management&lt;/em&gt; keeps a single conversation
consistent while staying within the token budget. &lt;em&gt;Memory&lt;/em&gt; is what an agent knows &lt;strong&gt;across&lt;/strong&gt;
sessions, days, and topics — after the conversation that created it has ended. You already
built the first one. The second is a database-and-retrieval problem, and it is large enough
to be its own course.&lt;/p&gt;</description></item><item><title>A Taxonomy of Memory</title><link>https://learn.frenchforet.com/agent-memory/01-a-taxonomy-of-memory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/01-a-taxonomy-of-memory/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; get a vocabulary before you build. &amp;ldquo;Memory&amp;rdquo; is not one thing — an agent has
several &lt;em&gt;kinds&lt;/em&gt;, each with its own content, lifecycle, and storage. This unit describes a
practical taxonomy (working, episodic, semantic, procedural, plus profile and derived). It
helps you answer the one question that matters before you write code: &lt;strong&gt;which of these does
&lt;em&gt;my&lt;/em&gt; agent actually need?&lt;/strong&gt; Build the kinds your problem requires; skip the rest.&lt;/p&gt;</description></item><item><title>The Naive Baseline</title><link>https://learn.frenchforet.com/agent-memory/02-the-naive-baseline/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/02-the-naive-baseline/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; build the simplest memory that could work — persist conversation turns to
&lt;strong&gt;SQLite&lt;/strong&gt; and recall them by &lt;strong&gt;recency&lt;/strong&gt; and &lt;strong&gt;keyword&lt;/strong&gt; — and then watch it fail on
purpose. This is the baseline that every later piece improves on. You cannot see the value of
embeddings (Unit 3) or a graph (Unit 5) until you reach the limit that this baseline reaches.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where this fits:&lt;/strong&gt; Unit 1 named the kinds of memory; this is the first persistent store. It
needs &lt;strong&gt;no endpoint and no Docker&lt;/strong&gt; — only Python&amp;rsquo;s standard-library &lt;code&gt;sqlite3&lt;/code&gt; — so it runs
anywhere. We build &lt;strong&gt;semantic/episodic&lt;/strong&gt; memory in the most basic way on purpose.&lt;/p&gt;</description></item><item><title>Semantic Recall with Embeddings</title><link>https://learn.frenchforet.com/agent-memory/03-semantic-recall-with-embeddings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/03-semantic-recall-with-embeddings/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; fix the biggest problem in the Unit 2 baseline. Embed each remembered fact as a
vector and recall by &lt;strong&gt;meaning&lt;/strong&gt; — using cosine similarity — so a user&amp;rsquo;s question retrieves
the right fact even when the question uses very different words than the stored text. This is
the same method as foundations §19–20, now applied to &lt;em&gt;memory&lt;/em&gt; instead of documents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where this fits:&lt;/strong&gt; Unit 2&amp;rsquo;s keyword recall failed on &amp;ldquo;where do I live?&amp;rdquo; and &amp;ldquo;what seafood am
I allergic to?&amp;rdquo; because it matched strings, not meaning. Embeddings fix exactly that gap. But
they create the &lt;em&gt;next&lt;/em&gt; limitation — each fact is an independent point — which is what leads us
toward a graph in Unit 4. This unit needs &lt;code&gt;EMBED_MODEL&lt;/code&gt;; without it the script skips cleanly
and you can still read along.&lt;/p&gt;</description></item><item><title>Why a Graph</title><link>https://learn.frenchforet.com/agent-memory/04-why-a-graph/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/04-why-a-graph/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; make the central decision of this course &lt;em&gt;honestly&lt;/em&gt;. A graph is more work than a
vector store — Docker, a schema, extraction, traversal. When is that extra complexity &lt;em&gt;worth
it&lt;/em&gt;, and when does it only cost you tokens and latency for no benefit? This unit describes the
three storage models, the real (conditional) evidence, and a clear rule for when to move to a
graph.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where this fits:&lt;/strong&gt; Unit 3 brought you to the limit — semantic recall fixed wording but could
not &lt;strong&gt;correlate&lt;/strong&gt; facts. This unit decides whether to move to a graph. It is a &amp;ldquo;decide&amp;rdquo; unit:
no new code, but the argument that justifies all the building in Units 5–7. Move to a graph on
purpose, or do not move at all.&lt;/p&gt;</description></item><item><title>Modeling Memory as a Graph</title><link>https://learn.frenchforet.com/agent-memory/05-modeling-memory-as-a-graph/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/05-modeling-memory-as-a-graph/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; start a real graph database (Neo4j, via Docker) and model a conversation&amp;rsquo;s memory
in it &lt;strong&gt;by hand&lt;/strong&gt; — sessions, turns, entities, and a small vocabulary of relationships —
writing the nodes and edges yourself in Cypher. By the end you will run a &lt;strong&gt;multi-hop query&lt;/strong&gt;
that answers a question no single stored fact contains, and see why a row in a table or a
chunk in a vector store cannot give you this.&lt;/p&gt;</description></item><item><title>Ingestion: Extracting Structure</title><link>https://learn.frenchforet.com/agent-memory/06-ingestion-extracting-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/06-ingestion-extracting-structure/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; stop writing nodes and edges by hand. Give an LLM a raw conversational turn, have it
produce &lt;strong&gt;(entity, relation, entity) triples&lt;/strong&gt;, validate that output, and &lt;code&gt;MERGE&lt;/code&gt; it into the
&lt;strong&gt;same graph&lt;/strong&gt; you built in Unit 5 — then embed each entity so later units can do &lt;em&gt;hybrid&lt;/em&gt;
(graph + vector) recall. Along the way you will meet the problem that controls every real
memory system: &lt;strong&gt;deduplication&lt;/strong&gt; — deciding when two mentions are the same thing.&lt;/p&gt;</description></item><item><title>Retrieval &amp; Context Assembly</title><link>https://learn.frenchforet.com/agent-memory/07-retrieval-and-context-assembly/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/07-retrieval-and-context-assembly/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; get facts back &lt;em&gt;out&lt;/em&gt; of the memory graph and into a prompt. You will read the graph
two different ways — &lt;strong&gt;entity-match traversal&lt;/strong&gt; when you know the starting node, and &lt;strong&gt;broad
meaning recall&lt;/strong&gt; when you only have a vague question — then combine them, &lt;strong&gt;rerank&lt;/strong&gt; the results
by recency, importance, and relevance, &lt;strong&gt;assemble&lt;/strong&gt; the top facts into the prompt, and wrap the
whole thing as a &lt;code&gt;search_memory&lt;/code&gt; &lt;strong&gt;tool&lt;/strong&gt; the agent can call on its own.&lt;/p&gt;</description></item><item><title>Curation &amp; Lifecycle</title><link>https://learn.frenchforet.com/agent-memory/08-curation-and-lifecycle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/08-curation-and-lifecycle/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; keep the memory graph &lt;em&gt;healthy&lt;/em&gt; over time. So far it only grows: every turn adds
nodes and edges (Unit 6), and retrieval assumes the right facts are in there (Unit 7). But a
memory that only grows becomes noise — old trivia crowds out what matters, and recall gets
worse, not better. This unit adds the &lt;strong&gt;lifecycle&lt;/strong&gt;: a &lt;strong&gt;decay&lt;/strong&gt; score that fades memories
over time but is reinforced by &lt;strong&gt;access&lt;/strong&gt;, a &lt;strong&gt;forgetting&lt;/strong&gt; pass that drops what is both faded
and unimportant, and a &lt;strong&gt;promotion gate&lt;/strong&gt; that decides what is even worth storing — narrating
its decision before it writes.&lt;/p&gt;</description></item><item><title>Measure Before You Optimize</title><link>https://learn.frenchforet.com/agent-memory/09-measure-before-you-optimize/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/09-measure-before-you-optimize/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; put a number on how good your memory recall actually is. Units 7 and 8 added knobs —
decay rate, importance thresholds, top-&lt;em&gt;k&lt;/em&gt;, hybrid weights — and every one changes what gets
retrieved. Without measurement, tuning them is guessing. This unit builds the four standard
retrieval metrics — &lt;strong&gt;recall@k&lt;/strong&gt;, &lt;strong&gt;precision@k&lt;/strong&gt;, &lt;strong&gt;MRR&lt;/strong&gt;, and &lt;strong&gt;nDCG@k&lt;/strong&gt; — over a small
&lt;strong&gt;labeled&lt;/strong&gt; set, so the choices from the last two units become measured, not asserted.&lt;/p&gt;</description></item><item><title>Observability &amp; Privacy</title><link>https://learn.frenchforet.com/agent-memory/10-observability-and-privacy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/10-observability-and-privacy/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; treat memory as what it is — durable, personal data — and build the two operational
habits that follow. &lt;strong&gt;Observability:&lt;/strong&gt; every memory read and write emits a structured log line
that is &lt;em&gt;joinable&lt;/em&gt; to the request that caused it, so you can answer &amp;ldquo;what did the agent remember,
and recall, for this conversation?&amp;rdquo; &lt;strong&gt;Privacy:&lt;/strong&gt; memory is scoped to an owner, recall filters by
who is asking, personal data is redacted before it reaches a log, and every query binds its values
so an attacker cannot rewrite it.&lt;/p&gt;</description></item><item><title>The Opinionated Default</title><link>https://learn.frenchforet.com/agent-memory/11-the-opinionated-default/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://learn.frenchforet.com/agent-memory/11-the-opinionated-default/</guid><description>&lt;p&gt;&lt;strong&gt;Goal:&lt;/strong&gt; put it all together. In one agent loop you will wire ingestion (Unit 6), the graph
(Unit 5), hybrid retrieval (Unit 7), the lifecycle gate (Unit 8), and the controls from Units
9–10 into a single &lt;strong&gt;memory-backed agent&lt;/strong&gt; — then step back and answer the question the whole
course has been building toward: &lt;em&gt;when is this machine worth building, and when should you not
build it at all?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where this fits:&lt;/strong&gt; this is the synthesis. Every prior unit built one piece in isolation so you
could see it clearly. Here the pieces become one system, and the course delivers its opinion — a
defensible default, with the honest boundaries around it.&lt;/p&gt;</description></item></channel></rss>