ЁЯПл The SchoolтА║ЁЯУЛ AI AgentsтА║ЁЯУФ рдзрдбрд╛ 04 тАФ Memory: scratchpad рдЖрдгрд┐ рдЧреГрд╣рдкрд╛рдард╛рдЪреА рдбрд╛рдпрд░реА
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯУФ рдзрдбрд╛ 04 тАФ Memory: scratchpad рдЖрдгрд┐ рдЧреГрд╣рдкрд╛рдард╛рдЪреА рдбрд╛рдпрд░реА

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 04 ┬╖ рдорд╛рдЧреЗ: lesson-03-tools ┬╖ рдкреБрдвреЗ: lesson-05-guardrails


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ03, рдЖрдгрд┐ рдареЛрдХреНрдпрд╛рдВрдЪреНрдпрд╛ рджрд░рдореНрдпрд╛рди agent рдХрд╛рдп рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддреЛ тАФ рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рддрд╛ рдпреЗрдгрд╛рд░ рдирд╛рд╣реАрдд рдПрд╡рдвреНрдпрд╛ рдореЛрдареНрдпрд╛ рдХрд╛рдорд╛рдВрд╡рд░ рдХрд╛рдп рд╣реЛрддреЗ.

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдХрд░реНрддрд╛-рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдХрд╕реЗ рдХрд╛рдо рдХрд░рддреЛ рддреЗ рдкрд╛рд╣рд╛: рдкреНрд░рддреНрдпреЗрдХ рдлреЗрд░реАрдирдВрддрд░ рддреЛ рдПрдХрд╛ scratchpad ЁЯУФ рдордзреНрдпреЗ рдПрдХ рдУрд│ рд▓рд┐рд╣реВрди рдареЗрд╡рддреЛ тАФ "office рдореНрд╣рдгрддреЗ 3A рдордзреНрдпреЗ 12", "calc рдореНрд╣рдгрддреЗ 8". рдкреНрд░рддреНрдпреЗрдХ рдирд╡реАрди рд╡рд┐рдЪрд╛рд░рд╛рдЖрдзреА рддреЛ pad рдкреБрдиреНрд╣рд╛ рд╡рд╛рдЪрддреЛ. рддреЛ pad рд╣реАрдЪ agent рдЪреА working memory рдЖрд╣реЗ тАФ рдЖрдкрд▓реНрдпрд╛ code рдордзреНрдпреЗ рдЕрдХреНрд╖рд░рд╢рдГ strings рдЪреА рдПрдХ list (scratchpad.append(...)), рдЬреА рдкреНрд░рддреНрдпреЗрдХ рдареЛрдХреНрдпрд╛рд▓рд╛ brain рд▓рд╛ рдкрд░рдд рджрд╛рдЦрд╡рд▓реА рдЬрд╛рддреЗ.

рдкрдг pad desk рд╡рд░ рдЕрд╕рддреЛ (AI course L08!) тАФ рдЖрдгрд┐ desk рд▓рд╣рд╛рди рдЖрд╣реЗ. рд▓рд╛рдВрдм рдХрд╛рдореЗ рддреЛ рднрд░реВрди рдЯрд╛рдХрддрд╛рдд: рдкрдиреНрдирд╛рд╕ tool results, рдкреНрд░рддреНрдпреЗрдХ рдПрдХ screen рднрд░, рдЖрдгрд┐ рдЕрдЪрд╛рдирдХ рд╕реБрд░реБрд╡рд╛рддреАрдЪреА рддрдереНрдпреЗ рдЦрд╛рд▓реА рдШрд╕рд░рддрд╛рдд рдХрд┐рдВрд╡рд╛ рдордзрд▓реНрдпрд╛ рдЧрд░реНрджреАрдд рдмреБрдбрддрд╛рдд. рд╡рд┐рджреНрдпрд╛рд░реНрдереНрдпрд╛рд▓рд╛ рдЖрдкрдг рд╕реБрд░реБрд╡рд╛рдд рдХрд╛ рдХреЗрд▓реА рддреЗрдЪ рдЖрдард╡рдд рдирд╛рд╣реА. ЁЯла

рдЦрд░реЗ agents desk рднрд░рдгреНрдпрд╛рд╢реА рдПрдЦрд╛рджреНрдпрд╛ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рд╡рд┐рджреНрдпрд╛рд░реНрдереНрдпрд╛рд╕рд╛рд░рдЦреЗ рд▓рдврддрд╛рдд:

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    subgraph desk["ЁЯкС the desk - context window, finite!"]
        goal["ЁЯУЛ goal + to-do list"]
        pad["ЁЯУФ scratchpad:<br/>[lookup 3A] тЖТ 12 kids<br/>[calc] тЖТ 8 тАж"]
    end
    think["ЁЯТн THINK reads it all"]
    comp["ЁЯЧЬя╕П compaction:<br/>10 jottings тЖТ 1 summary line"]
    ext["ЁЯУБ durable memory OUTSIDE:<br/>files ┬╖ DB ┬╖ RAG over past runs"]
    pad --> think
    goal --> think
    comp -.->|"when the desk fills"| pad
    ext <-.->|"write_note / lookup"| pad

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

"step 3 рдордзрд▓реА рдорд╛рдЭреА рд╕реВрдЪрдирд╛ рддреЛ рдХрд╛ рд╡рд┐рд╕рд░рд▓рд╛?" рдЖрдгрд┐ "30 steps рдирдВрддрд░ рддреЛ рдХрд╛ рдврд╛рд╕рд│рддреЛ?" рд╣реЗ production рдордзреНрдпреЗ agents рдмрджреНрджрд▓ рд╕рд░реНрд╡рд╛рдзрд┐рдХ рд╡рд┐рдЪрд╛рд░рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ рджреЛрди рдкреНрд░рд╢реНрди рдЖрд╣реЗрдд, рдЖрдгрд┐ рджреЛрдиреНрд╣реА рдореНрд╣рдгрдЬреЗ рд╣рд╛рдЪ рдзрдбрд╛: desk рднрд░рд▓рд╛, рдЖрдгрд┐ рдХреЛрдгреАрд╣реА compaction рдХрд┐рдВрд╡рд╛ рдмрд╛рд╣реЗрд░ рд▓рд┐рд╣реВрди рдареЗрд╡рдгреЗ рдХрд░рдд рдирд╡реНрд╣рддреЗ. рдЖрддрд╛ рд╣реА рдЕрдбрдЪрдг рдпреЗрдгреНрдпрд╛рдЖрдзреАрдЪ рддреБрдореНрд╣рд╛рд▓рд╛ рдЙрдкрд╛рдп рдорд╛рд╣реАрдд рдЖрд╣реЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 agent/agent.py --yes && cat note.txt && rm note.txt

рдПрдХрд╛рдЪ run рдордзреНрдпреЗ рддрд┐рдиреНрд╣реА memories рдУрд│рдЦрд╛: scratchpad (рдкреНрд░рддреНрдпреЗрдХ THINK рд▓рд╛ рдкреБрд░рд╡рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рдЫрд╛рдкрд▓реЗрд▓реНрдпрд╛ рдиреЛрдВрджреА), рдЕрдкреНрд░рддреНрдпрдХреНрд╖ to-do (brain pad рдкрд╛рд╣реВрди "рдЕрдЬреВрди рдХрд╛рдп рдЭрд╛рд▓реЗ рдирд╛рд╣реА?" рд╣реЗ рддрдкрд╛рд╕рддреЛ), рдЖрдгрд┐ durable note (process рд╕рдВрдкрд▓реНрдпрд╛рд╡рд░рд╣реА рдЯрд┐рдХрддреЗ тАФ рдореНрд╣рдгреВрдирдЪ agent рдмрд╛рд╣реЗрд░ рдкрдбрд▓реНрдпрд╛рд╡рд░рд╣реА cat рдЪрд╛рд▓рддреЗ). рдордЧ рдПрдХ рдХрд╛рдЧрджреА рд╕рд░рд╛рд╡: рддреБрдордЪреНрдпрд╛ agent рд▓рд╛ 500 invoices рддрдкрд╛рд╕рд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд; desk рдордзреНрдпреЗ 20 рдмрд╕рддрд╛рдд. memory рдЪрд╛ рдЖрд░рд╛рдЦрдбрд╛ design рдХрд░рд╛ (batch рдХрд░рд╛, рдкреНрд░рддреНрдпреЗрдХ batch рдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдХрд░рд╛, рдЪрд╛рд▓реВ рдмреЗрд░реАрдЬ рдПрдХрд╛ file рдордзреНрдпреЗ рд▓рд┐рд╣рд╛, рд╢реЗрд╡рдЯреА file рд╡рд░ рдПрдХ рдлреЗрд░реА тАФ рдЕрднрд┐рдирдВрджрди, рд╣рд╛рдЪ production pattern рдЖрд╣реЗ).

тПня╕П рдкреБрдвреЗ

рд╢рдХреНрддрд┐рд╢рд╛рд▓реА tools + рди рдердХрдгрд╛рд░рд╛ loop = рдЕрд╕рд╛ рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдЬреЛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдЪреБрдХреВрд╣реА рд╢рдХрддреЛ. Guardrails тАФ рд╕рд╣рд▓реАрдЪреЗ рдирд┐рдпрдо.

git checkout lesson-05-guardrails

ЁЯУФ Lesson 04 тАФ Memory: the scratchpad and the homework diary

ЁЯУН You are here: Lesson 04 of 8 ┬╖ Previous: lesson-03-tools ┬╖ Next: lesson-05-guardrails


ЁЯУж What's in this branch

Lessons 01тАУ03, plus what the agent remembers between beats тАФ and what happens on tasks too big to remember.

ЁЯзТ Explain like I'm 5

Watch the doer-student work: after every errand they jot one line in a scratchpad ЁЯУФ тАФ "office says 3A has 12", "calc says 8". Before every new thought, they re-read the pad. That pad IS the agent's working memory тАФ in our code, literally a list of strings (scratchpad.append(...)) shown back to the brain each beat.

But the pad lives on the desk (AI course L08!) тАФ and the desk is small. Long tasks fill it: fifty tool results, each a screenful, and suddenly the early facts slide off or drown in the middle. The student forgets why they started. ЁЯла

Real agents fight desk-overflow like a good student would:

ЁЯЧ║я╕П Diagram

flowchart LR
    subgraph desk["ЁЯкС the desk - context window, finite!"]
        goal["ЁЯУЛ goal + to-do list"]
        pad["ЁЯУФ scratchpad:<br/>[lookup 3A] тЖТ 12 kids<br/>[calc] тЖТ 8 тАж"]
    end
    think["ЁЯТн THINK reads it all"]
    comp["ЁЯЧЬя╕П compaction:<br/>10 jottings тЖТ 1 summary line"]
    ext["ЁЯУБ durable memory OUTSIDE:<br/>files ┬╖ DB ┬╖ RAG over past runs"]
    pad --> think
    goal --> think
    comp -.->|"when the desk fills"| pad
    ext <-.->|"write_note / lookup"| pad

тЭУ What

ЁЯдФ Why

"Why did it forget my instruction from step 3?" and "why does it fall apart after 30 steps?" are the two most-asked agent questions in production, and both are THIS lesson: the desk filled, and nobody was compacting or externalizing. You now know the fix before you hit it.

ЁЯзк Try it

python3 agent/agent.py --yes && cat note.txt && rm note.txt

Spot all three memories in one run: the scratchpad (printed jottings feeding each THINK), the implicit to-do (the brain checks "what's not done yet?" against the pad), and the durable note (survives the process тАФ that's why cat works after the agent exits). Then a paper drill: your agent must audit 500 invoices; the desk fits 20. Design the memory plan (batch, summarize per batch, write running totals to a file, final pass over the file тАФ congratulations, that's the production pattern).

тПня╕П Next

Power tools + a tireless loop = a student who can also get it wrong at scale. Guardrails тАФ the field-trip rules.

git checkout lesson-05-guardrails
тЖР PrevioustoolsNext тЖТguardrails

This page is the lesson's README from the lesson-04-memory branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.