ЁЯФм рдзрдбрд╛ 07 тАФ agent рдмрдирд╡рд╛: 130 рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдУрд│реА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 07 ┬╖ рдорд╛рдЧреЗ: lesson-06-failures ┬╖ рдкреБрдвреЗ: lesson-08-patterns
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ06, рдЖрдгрд┐ agent/agent.py рдЪреЗ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдд рд╡рд╛рдЪрди тАФ рдпрд╛ course рдордзрд▓реА рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдХрд▓реНрдкрдирд╛, рдПрдХрд╛ рдУрд│ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░ рд╕рд╛рдкрдбрдгрд╛рд░реА.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
file рдЙрдШрдбрд╛. рддреАрди рдХреНрд░рдорд╛рдВрдХрд┐рдд рд╡рд┐рднрд╛рдЧ, course рд╢реА рддрдВрддреЛрддрдВрдд рдЬреБрд│рдгрд╛рд░реЗ:
- ЁЯз░ THE TOOLS тАФ рдкрдЯреНрдЯрд╛ (L03):
SCHOOL_DB(рдЬрдЧ),_safe_eval(рдЕрд╡рдШрдб input рд╡рд┐рд░реБрджреНрдз рдХрдареЛрд░ рдХреЗрд▓реЗрд▓реЗ tool тАФ L05 рдирд┐рдпрдо 3), рддреАрди tool functions, рдЖрдгрд┐TOOLSregistry рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ entry рд╕реЛрдмрддhelp(model рд╕рд╛рдареАрдЪреЗ рд▓реЗрдмрд▓) рдЖрдгрд┐writes(gate рдЪрд╛ flag) рдЕрд╕рддреЛ. рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛,doneрд╣реА рдлрдХреНрдд рдЖрдгрдЦреА рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдирд┐рд╡рдб рдЖрд╣реЗ. - ЁЯза THE BRAINS тАФ THINK рдареЛрдХрд╛, рдмрджрд▓рддрд╛ рдпреЗрдгрд╛рд░рд╛:
ScriptedBrainтАФ рдПрдХ рдЦреЗрд│рдгреНрдпрд╛рддрд▓рд╛ planner (scratchpad рд╡рд░рдЪреА if-рдЪреА рд╢рд┐рдбреА) рдЬреНрдпрд╛рдореБрд│реЗ demo API key рд╢рд┐рд╡рд╛рдп рдЪрд╛рд▓рддреЛ. рддреНрдпрд╛рдЪреА docstring рд╣реЗ course рдЪреЗ рд╕рд░реНрд╡рд╛рдд рдореЛрдареЗ рдЧреБрдкрд┐рдд рдЖрд╣реЗ: рдпрд╛ class рдЪреНрдпрд╛ рдЬрд╛рдЧреА рдПрдХ LLM call рдареЗрд╡рд╛ тАФ "рд╣реЗ goal + pad + tool labels, рдкреБрдвреЗ рдХрд╛рдп?" тАФ рдЖрдгрд┐ рдмрд╛рдХреА рд╕рдЧрд│реЗ рддрд╕реЗрдЪ рд░рд╛рд╣рддреЗ. loop рд╣рд╛рдЪ agent рдЖрд╣реЗ; model рд╣рд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ.HumanBrainтАФ--drivemode: рддреБрдореНрд╣реА, type рдХрд░рдд. LLM рдЪреНрдпрд╛ рдЬрд╛рдЧреА рдорд╛рдгреВрд╕ рдмрд╕реВ рд╢рдХрддреЛ рдпрд╛рд╡рд░реВрдирдЪ рдХрд│рддреЗ рдХреА LLM рдиреЗрдордХреЗ рдХрд╛рдп рджреЗрддреЗ: рдирд┐рд░реНрдгрдп, рдмрд╛рдХреА рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА.
- ЁЯФБ THE LOOP + GUARDRAILS тАФ
run():for step in range(MAX_STEPS)curfew (L05 рдирд┐рдпрдо 1), рдЫрд╛рдкрд▓реЗрд▓реЗ THINK/ACT,doneрдордзреВрди рдмрд╛рд╣реЗрд░ рдкрдбрдгреЗ, рдЕрдиреЛрд│рдЦреА tool рдЖрдгрд┐ errors рдирд╛ observations рдореНрд╣рдгреВрди рд╣рд╛рддрд╛рд│рдгреЗ ("errors are data"), write gateif TOOLS[name]["writes"] and not auto_approve(L05 рдирд┐рдпрдо 2 тАФ file рдордзрд▓реЗ рд╕рд░реНрд╡рд╛рдд рдореМрд▓реНрдпрд╡рд╛рдиif), рдЖрдгрд┐scratchpad.append(...)тАФ рдПрдХрд╛ рдУрд│реАрдд memory (L04).
~130 рдУрд│реА. framework рдирд╛рд╣реА. рддреБрдореНрд╣рд╛рд▓рд╛ рднреЗрдЯрдгрд╛рд░рд╛ рдкреНрд░рддреНрдпреЗрдХ agent framework рдореНрд╣рдгрдЬреЗ рд╣реАрдЪ file, рдЬрд╛рд╕реНрдд рд╡рд┐рд╢реЗрд╖рдгрд╛рдВрд╕рд╣.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
subgraph file["agent/agent.py тАФ the map"]
t["1 ЁЯз░ TOOLS<br/>belt + labels + writes-flags<br/>+ a hardened calc"]
b["2 ЁЯза BRAINS (swappable!)<br/>ScriptedBrain: toy planner<br/>HumanBrain: --drive<br/>тЖР an LLM call slots HERE"]
l["3 ЁЯФБ run() loop<br/>MAX_STEPS curfew ┬╖ write gate ЁЯЪз<br/>errors-as-observations ┬╖<br/>scratchpad.append = memory"]
end
t --> l
b --> l
l --> out["тЬЕ outcome + full printed log ЁЯз╛"]
тЭУ рдХрд╛рдп (рдЙрдЪрд▓рдгреНрдпрд╛рдЬреЛрдЧреЗ рддрдкрд╢реАрд▓)
- рдкреНрд░рддреНрдпреЗрдХ tool рд╡рд░рдЪрд╛
writesflag тАФ рдПрдХрд╛ field рдЪреЗ permission model, рдЬреЗ рдЦрд░реА policy рд▓рд╛рдЧрдгреНрдпрд╛рдЖрдзреА рдЖрд╢реНрдЪрд░реНрдпрдХрд╛рд░рдХрд░реАрддреНрдпрд╛ рдЦреВрдк рджреВрд░рдкрд░реНрдпрдВрдд рдкреБрд░рддреЗ. - interface рдореНрд╣рдгреВрди Brain (
decide(goal, scratchpad) тЖТ (name, args, thought)) тАФ рдпрд╛рдореБрд│реЗ agent test рдХрд░рддрд╛ рдпреЗрддреЛ (brain script рдХрд░рд╛!) рдЖрдгрд┐ upgrade рдХрд░рддрд╛ рдпреЗрддреЛ (loop рд▓рд╛ рд╣рд╛рдд рди рд▓рд╛рд╡рддрд╛ models рдмрджрд▓рд╛). - evals рд╕рд╛рдареА рдирд┐рд╢реНрдЪрд┐рдд рдЬрдЧ тАФ
SCHOOL_DBрдард░рд▓реЗрд▓реЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдкрд░рд┐рдгрд╛рдо assert рдХрд░рддрд╛ рдпреЗрддрд╛рдд (рдзрдбрд╛ 06 рдЪреЗ eval рддреНрдпрд╛рд╡рд┐рд░реБрджреНрдзрдЪ рдЪрд╛рд▓рд▓реЗ). - MCP рдХреБрдареЗ рдмрд╕рддреЗ:
TOOLSdict рдЪреНрдпрд╛ рдЬрд╛рдЧреА "рдЬреЛрдбрд▓реЗрд▓реНрдпрд╛ MCP servers рдХрдбреВрди tools рдЪреА рдпрд╛рджреА" рдареЗрд╡рд╛ (MCP рд╢рд╛рд│рд╛ L07 рдЪрд╛ client!) рдЖрдгрд┐ рдкрдЯреНрдЯрд╛ plug-and-play рд╣реЛрддреЛ. рдпрд╛ рджреЛрди рд╢рд╛рд│рд╛ рдореНрд╣рдгрдЬреЗ рдПрдХрд╛рдЪ рдпрдВрддреНрд░рд╛рдЪреЗ рджреЛрди рдЕрд░реНрдзреЗ рднрд╛рдЧ.
ЁЯдФ рдХрд╛
Frameworks рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗрдд тАФ рдкрдг рд╣реЗ mental model рдирд╕рддрд╛рдирд╛ рддреНрдпрд╛рдВрдирд╛ debug рдХрд░рдгреЗ рдореНрд╣рдгрдЬреЗ рдкреБрд░рд╛рддрддреНрддреНрд╡ рд╕рдВрд╢реЛрдзрди. 130 рдУрд│реА рд╡рд╛рдЪрд▓реНрдпрд╛рд╡рд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд│рддреЗ рдХреА LangGraph/CrewAI/рдХрд╛рд╣реАрд╣реА рдпрд╛рдВрдЪрд╛ рдкреНрд░рддреНрдпреЗрдХ рдерд░ рдХрд╢рд╛рд╕рд╛рдареА рдЖрд╣реЗ, рдХреЛрдгрддрд╛ knob рдХреЛрдгрддреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрд╢реА рдЬреБрд│рддреЛ, рдЖрдгрд┐ тАФ рд╕рд░реНрд╡рд╛рдд рдореМрд▓реНрдпрд╡рд╛рди тАФ рдПрдЦрд╛рджреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рд▓рд╛рдЧрдд рдирд╛рд╣реА. рдЪрд╛рдВрдЧрд▓реА tools рдЖрдгрд┐ gates рдЕрд╕рд▓реЗрд▓реЗ рд╕рд╛рдзреЗ loops ship рд╣реЛрддрд╛рдд.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ тАФ рддреАрди upgrades, рдкреНрд░рддреНрдпреЗрдХреА ~5 рдУрд│реА
# A) new tool: add "list_notes" (READ) that returns note.txt contents.
# тЖТ belt entry + function. Rerun --drive and call it.
# B) loop detection (L06 #2): in run(), before acting тАФ
# if scratchpad and f"[{name} {json.dumps(args)}]" in scratchpad[-1]:
# observation = "you just did exactly that тАФ try something else"
# C) real brain: replace ScriptedBrain.decide with an API call that
# sends goal + scratchpad + tool helps and parses "name {json}".
# (~15 lines with any LLM SDK тАФ the harness doesn't change at all.)
python3 agent/agent.py --drive
рдХрд┐рдорд╛рди upgrade A ship рдХрд░рд╛. рдЖрддрд╛ рддреБрдореНрд╣реА "agent framework рд╡рд╛рдкрд░рд▓реЗрд▓реА" рд╡реНрдпрдХреНрддреА рдирд╛рд╣реА тАФ рддреБрдореНрд╣реА рдЕрд╕рд╛ framework рд▓рд┐рд╣реВ рд╢рдХрдгрд╛рд░реА рд╡реНрдпрдХреНрддреА рдЖрд╣рд╛рдд. ЁЯФм
тПня╕П рдкреБрдвреЗ
рд╢реЗрд╡рдЯрдЪрд╛ рднрд╛рдЧ: рдПрдХреЗрдХрдЯреЗ loops рдПрдХрддреНрд░ рдпреЗрдКрди patterns рдХрд╕реЗ рдмрдирддрд╛рдд тАФ planners, critics, teams, human-in-the-loop тАФ рдЖрдгрд┐ agent рдЕрдЬрд┐рдмрд╛рдд рдХрдзреА рд╡рд╛рдкрд░реВ рдирдпреЗ.
git checkout lesson-08-patterns