Lesson 79 — Intermediate
Tool Context Management
Har tool call do tarah se context khata hai — definitions (schemas) har call par, results har turn par. Is lesson mein dono kharche control karte hain: dynamic exposure, output filtering aur observation decay.
Tools ka apna budget
WHAT
Tool definitions aur results ko context budget ke andar rakhna — relevant tools hi expose, bade outputs slim, purane observations hatao.
WHEN
Agent ke paas dher tools ya bade API/search/DB results aate hain — tool loops mein sabse tez bloat yahin hota hai.
WHERE
Tool registry (tags/subsets), result preprocessor (slim/dedupe/paginate) aur observation cleanup har N steps par.
Yeh level ki sabse common mistake: "tools toh free hain." Nahi — schema har call jaata hai aur har result turn mein baithta hai. Dono ka audit karo (L6.1 wala budget yahin lagta hai).
Dynamic tool exposure
Model ko saare tools dene ka matlab har call par poora schema bhejna. Relevant subset hi expose karo:
- Tools ko tags se group karo (research, data, comms) — task se matching subset.
- Task badal toh tool set bhi badal — definitions turn ke saath chalein.
- Discovery ke liye ek chhota list_tools meta-tool — poora registry hamesha loaded nahi.
- Tool use ho chuka toh definition hata do; summary mein naam + usage rehne do.
REGISTRY = {
"search": Tool(tags={"research"}),
"sql": Tool(tags={"data"}),
"email": Tool(tags={"comms"}),
}
def tools_for(task):
need = set(task.tags) # sirf is step ke tools
return [t for t in REGISTRY.values() if t.tags & need]
Bade outputs filter karo
- Top-k + fields: sirf relevant rows, sirf maangi columns.
- Dedupe: repeat entries hatao; sort by relevance/date.
- Caps: max items/lines per result — cap ke baad cursor.
- Errors: status + short message; stack trace sirf log mein.
- Full result external store: model ko path/pointer + slim view.
def handle(result):
full = store.put(result) # bahar, pura saved
return {"path": full, "view": result.items[:5],
"total": len(result.items), "next": result.cursor}
Observation build-up rokna
Lambe loop mein har step ka observation window mein rehta jaata hai — purane stale ho jaate hain, naye kabhi chadh nahi paate. Yeh silent bloat hai.
- Har N steps par raw observations summarize karke facts bana do.
- Facts nikal chuke raw outputs hata do (source pointer rakho).
- Per-tool observation cap — ek hi tool ka repeat dump baar baar nahi.
- Long-term notes mein move karo (L6.4) — window mein sirf active rehne do.
Exercise
Question: Tool definitions ke schemas bhi tokens kharche karte hain — haan ya nahi?
Question: Task ke hisaab se tool definitions ka subset dikhana — verb, ek shabd, English?
Question: Bade results ko page-wise rakhna, cursor se agli page — ek shabd, English?
Common mistakes
- Sab tools hamesha on: 50 schemas har call = poora ek budget section khali. Dynamic exposure se turant bachat hota hai.
- Raw dump wapas bhejna: Ek hi API call ne window aadha khaya — slim preprocessor har tool result par mandatory hai.
- Observations kabhi hataana nahi: Loop chal chal ke junk pile hota hai. Periodic summarize + caps ke bina agent puraane notes mein dub jaata hai.
Kaam ke hisaab se screwdriver nikalo, poora toolbox nahi. Aur jo nut-bolt bahar nikale, woh wapas dabbe mein — table par nahi chhodte. Agent ka context bhi aisa hi hai:
active = tools_for(step) # sirf zaroori tools exposed
ctx.add(slim(run(step), cap=50)) # result cap ke saath
if step_no % 5 == 0:
ctx.summarize_observations() # hafta waali safai- Q: Dynamic tool exposure kaise design karoge? (registry + tags, task se subset, list_tools discovery, use ke baad hataana)
- Q: Tool results kaise slim karoge? (field slice, top-k, cursor/pagination, external full result, short errors)
- Q: Observation build-up kaise rokoge? (periodic summarize, per-tool caps, notes offload, raw drop)
- Q: Tool schema cost kaise measure? (per-section token audit — L6.1 ka audit yahin apply hota hai)
Tool budget ab control mein. Agli lesson: jo static context hai usse provider cache se kaise sasta banayein — context caching.