ЁЯз░ рдзрдбрд╛ 03 тАФ Tools: agent рдЪреЗ рд╣рд╛рдд
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 8 рдкреИрдХреА рдзрдбрд╛ 03 ┬╖ рдорд╛рдЧреЗ: lesson-02-the-loop ┬╖ рдкреБрдвреЗ: lesson-04-memory
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ02, рдЖрдгрд┐ ACT рдареЛрдХрд╛ рддрдкрд╢реАрд▓рд╛рдд: tool рдореНрд╣рдгрдЬреЗ рдиреЗрдордХреЗ рдХрд╛рдп, model рддреЗ рдХрд╕реЗ рдирд┐рд╡рдбрддреЗ, рдЖрдгрд┐ рддреБрдордЪрд╛ agent рдЪрд╛рд▓реЗрд▓ рдХреА рдирд╛рд╣реА рд╣реЗ рдард░рд╡рдгрд╛рд░реЗ design рдЪреЗ рдирд┐рдпрдо.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдХрд░реНрддрд╛-рд╡рд┐рджреНрдпрд╛рд░реНрдереА рдПрдХ рдЫреЛрдЯрд╛ toolbelt ЁЯз░ рдмрд╛рд│рдЧрддреЛ, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ tool рд╡рд░ рд╡рд┐рджреНрдпрд╛рд░реНрдереНрдпрд╛рд╕рд╛рдареАрдЪ рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рддреЗ:
lookup {"topic": тАж}тАФ рд╢рд╛рд│реЗрдЪреНрдпрд╛ office рд▓рд╛ рд╡рд┐рдЪрд╛рд░рд╛calc {"expression": тАж}тАФ calculatorwrite_note {"text": тАж}тАФ рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдбрд╛рдпрд░реАрдд рд▓рд┐рд╣рд╛ (рдЧреЛрд╖реНрдЯреА рдмрджрд▓рддреЗ!)
рдкрдЯреНрдЯреНрдпрд╛рдмрджреНрджрд▓ рддреАрди рддрдереНрдпреЗ:
- рд▓реЗрдмрд▓реЗ рдореНрд╣рдгрдЬреЗ рдЕрд░реНрдзреА рдмреБрджреНрдзрд┐рдорддреНрддрд╛. model tools рдЪреА рдирд╛рд╡реЗ, рд╡рд░реНрдгрдиреЗ рдЖрдгрд┐ argument рдЪреЗ рд╕реНрд╡рд░реВрдк рд╡рд╛рдЪреВрдирдЪ tools рдирд┐рд╡рдбрддреЗ. рдЕрд╕реНрдкрд╖реНрдЯ рд▓реЗрдмрд▓ тЖТ рдЪреБрдХреАрдЪреЗ tool, рдЪреБрдХреАрдЪреЗ arguments, рдХрд┐рдВрд╡рд╛ call рдЪ рдирд╛рд╣реА. tool рдЪреА рд╡рд░реНрдгрдиреЗ рд▓рд┐рд╣рд┐рдгреЗ рдореНрд╣рдгрдЬреЗ screwdriver рдШреЗрдКрди рдХреЗрд▓реЗрд▓реЗ prompt engineering.
- model рдХрдзреАрдЪ tool рд▓рд╛ рд╣рд╛рдд рд▓рд╛рд╡рдд рдирд╛рд╣реА. рддреЗ рдПрдХ request рд▓рд┐рд╣рд┐рддреЗ ("calc: ceil(23/3)"); harness рддреЗ рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ рдкрд░рдд рджреЗрддреЛ тАФ MCP рд╢рд╛рд│рд╛ L02 рдордзрд▓реАрдЪ model-proposes/harness-disposes рд╡рд┐рднрд╛рдЧрдгреА. рдореНрд╣рдгреВрдирдЪтАж
- tools рдЪреЗ reads рдЖрдгрд┐ writes рдЕрд╕реЗ рджреЛрди рднрд╛рдЧ рдкрдбрддрд╛рдд.
lookupрдХреБрдгрд╛рд▓рд╛рд╣реА рдЗрдЬрд╛ рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА тАФ рддреНрдпрд╛рд▓рд╛ рдореЛрдХрд│реЗ рдЪрд╛рд▓реВ рджреНрдпрд╛.write_noteрдЬрдЧ рдмрджрд▓рддреЗ тАФ рдЖрдкрд▓реНрдпрд╛ code рдордзреНрдпреЗ рддреНрдпрд╛рд╡рд░"writes": TrueрдЕрд╕реЗ рд▓реЗрдмрд▓ рдЖрд╣реЗ рдЖрдгрд┐ harness рддреНрдпрд╛рд▓рд╛ GATE рдХрд░рддреЛ (рдзрдбрд╛ 05). рдЖрдкрд▓реНрдпрд╛ tools рдЪреА рдпрд╛ рджреЛрди рдЧрдЯрд╛рдВрдд рд╡рд┐рднрд╛рдЧрдгреА рдХрд░рдгреЗ рд╣рд╛рдЪ рдкрд╣рд┐рд▓рд╛ security review рдЖрд╣реЗ, рдПрдХрд╛ рдорд┐рдирд┐рдЯрд╛рдд рдЭрд╛рд▓реЗрд▓рд╛.
рдЖрдгрд┐ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдкрдЯреНрдЯреЗ рдпреЗрддрд╛рдд рдХреБрдареВрди? MCP тАФ standard socket (рдкреВрд░реНрдгрдкрдгреЗ рд╡реЗрдЧрд│реА рд╢рд╛рд│рд╛): servers рдЬреЛрдбрд╛, рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА tools рдЖрдкреЛрдЖрдк рдкрдЯреНрдЯреНрдпрд╛рд╡рд░ рджрд┐рд╕рддрд╛рдд.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
subgraph belt["ЁЯз░ the toolbelt (agent.py TOOLS)"]
r1["lookup - READ<br/>'ask the school office'"]
r2["calc - READ<br/>'safe math, ceil() allowed'"]
w1["write_note - WRITE ЁЯЪз<br/>'changes the diary!'"]
end
m["ЁЯза model - picks by<br/>READING the labels"]
h["ЁЯПл harness - executes<br/>(gates the writes)"]
world["ЁЯМН the world"]
m -->|"1 writes a request"| h -->|"2 runs the tool"| world
world -->|"3 observation тЖТ desk"| m
belt -.->|"labels shown to the model"| m
тЭУ рдХрд╛рдп
- Tool = name + description + argument schema + implementation.
рдЖрдкрд▓реНрдпрд╛
TOOLSdict рдордзреНрдпреЗ рдиреЗрдордХреЗ рд╣реЗрдЪ рдЖрд╣реЗ (рдЖрдгрд┐writesflag тАФ рд╣рд╛ pattern рдЙрдЪрд▓рд╛рдЪ). - рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ design рдирд┐рдпрдо: рдПрдХрд╛ tool рд▓рд╛ рдПрдХрдЪ рдХрд╛рдо; рд╕реНрдкрд╖реНрдЯ, рдорд░реНрдпрд╛рджрд┐рдд arguments (рдореЛрдХрд│реНрдпрд╛ strings рдкреЗрдХреНрд╖рд╛ enums рдЪрд╛рдВрдЧрд▓реЗ); model рд╡рд╛рдкрд░реВ рд╢рдХреЗрд▓ рдЕрд╕рд╛ рдереЛрдбрдХреНрдпрд╛рдд text рдкрд░рдд рдХрд░рд╛ (рдПрдХ screen рднрд░, database рдЪрд╛ рдвреАрдЧ рдирд╛рд╣реА тАФ desk рд▓рд╣рд╛рди рдЖрд╣реЗ, AI L08); errors рд╡рд╛рдЪрддрд╛ рдпреЗрддреАрд▓ рдЕрд╢рд╛ strings рдореНрд╣рдгреВрди ("errors are data").
calcрдмрдЪрд╛рд╡рд╛рддреНрдордХ implementation рджрд╛рдЦрд╡рддреЗ: AST рд╡рд░реВрди рдЪрд╛рд▓рдгрд╛рд░рд╛ evaluator рдЬреЛ рдлрдХреНрдд numbers рдЖрдгрд┐ceil()рд▓рд╛ рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдмрд╛рдХреА рдХрд╛рд╣реАрдЪ рдирд╛рд╣реА тАФ рдХрд╛рд░рдг tool рдЪрд╛ INPUT рдЕрд╢рд╛ model рдХрдбреВрди рдпреЗрддреЛ рдЬреЗ рдЧреЛрдВрдзрд│реВ рд╢рдХрддреЗ рдХрд┐рдВрд╡рд╛ рдЬреНрдпрд╛рд╡рд░ injection рд╣реЛрдК рд╢рдХрддреЗ (рдзрдбрд╛ 06). model рдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ рдЧреЛрд╖реНрдЯреАрд╡рд░ рдХрдзреАрд╣реАeval()рдХрд░реВ рдирдХрд╛. рдХрдзреАрдЪ рдирд╛рд╣реА.donepseudo-tool: рдерд╛рдВрдмрдгреЗ рд╣реАрд╕реБрджреНрдзрд╛ рдлрдХреНрдд рдЖрдгрдЦреА рдПрдХ рд▓реЗрдмрд▓ рдЕрд╕рд▓реЗрд▓реА рдирд┐рд╡рдб.
ЁЯдФ рдХрд╛
agent рдЪреА рдЧреБрдгрд╡рддреНрддрд╛ model рдЪреНрдпрд╛ рдЧреБрдгрд╡рддреНрддреЗрдкреЗрдХреНрд╖рд╛ tools рдЪреНрдпрд╛ рдЧреБрдгрд╡рддреНрддреЗрд╡рд░ рдЬрд╛рд╕реНрдд
рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕рддреЗ. рдкрд╛рдЪ рдиреЗрдЯрдХреНрдпрд╛, рдЪрд╛рдВрдЧрд▓реА рд▓реЗрдмрд▓реЗ рдЕрд╕рд▓реЗрд▓реНрдпрд╛, рдорд░реНрдпрд╛рджрд┐рдд рд╡реНрдпрд╛рдкреНрддреАрдЪреНрдпрд╛ tools рд╕рд╣
рд╕рд╛рдзрд╛рд░рдг model, do_stuff(anything) рдЕрд╕рд▓реЗрд▓реНрдпрд╛ frontier model рд▓рд╛ рдорд╛рдЧреЗ рдЯрд╛рдХрддреЗ.
рддреБрдордЪрд╛ agent рдзрдбрдкрдбрдд рдЕрд╕реЗрд▓, рддрд░ рддреНрдпрд╛рдЪреНрдпрд╛ tool labels рдореЛрдареНрдпрд╛рдиреЗ рд╡рд╛рдЪрд╛ тАФ рдХреЛрдгрддреЗ рдирд┐рд╡рдбрд╛рдпрдЪреЗ
рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛рдЪ рдХрд│рдд рдирд╕реЗрд▓, рддрд░ model рд▓рд╛рд╣реА рдХрд│рдгрд╛рд░ рдирд╛рд╣реА.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 agent/agent.py --drive
# your move> calc {"expression": "ceil((12+11)/3)"}
# your move> calc {"expression": "__import__('os')"} тЖР try to break it ЁЯШИ
рджреБрд╕рд░рд╛ call рд╕реБрд░рдХреНрд╖рд┐рддрдкрдгреЗ рдЕрдпрд╢рд╕реНрд╡реА рд╣реЛрддреЛ тАФ рдХрд╛ рддреЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА
agent.py рдордзрд▓реЗ _safe_eval рд╡рд╛рдЪрд╛. рдордЧ рдХрд╛рдЧрджрд╛рд╡рд░
рддреБрдордЪреНрдпрд╛ рдХрд╛рдорд╛рд╕рд╛рдареА toolbelt design рдХрд░рд╛: рдкрд╛рдЪ tools, рдкреНрд░рддреНрдпреЗрдХреА рдПрдХ рдУрд│, READ рдХрд┐рдВрд╡рд╛
WRITE рдЕрд╢реА рдЦреВрдг рдХреЗрд▓реЗрд▓реА. рддреЛ рджрд╕реНрддрдРрд╡рдЬ рдореНрд╣рдгрдЬреЗ agent spec рдЪрд╛ 80% рднрд╛рдЧ.
тПня╕П рдкреБрдвреЗ
рдареЛрдХреНрдпрд╛рдВрдордзрд▓реЗ desk: memory тАФ scratchpads, context рдЪреНрдпрд╛ рдорд░реНрдпрд╛рджрд╛, рдЖрдгрд┐ рд▓рд╛рдВрдм рдХрд╛рдорд╛рдВрдирд╛ рдбрд╛рдпрд░реА рдХрд╛ рд▓рд╛рдЧрддреЗ.
git checkout lesson-04-memory