Dobici:
- Definiranje agenta kao 'model + alati + petlja' i odlučivanje kada je potreban
- Pisanje definicije alata s nazivom, opisom i input_schema
- Praćenje toka i rukovanje pogreškama petlje tool_use i tool_result
Do sada je model uvijek radio jedan posao: primao unos teksta, proizvodio tekstualne odgovore. Ali pravi posao često zahtijeva više od teksta; izvođenje izračuna, postavljanje upita bazi podataka, pozivanje API-ja, pronalaženje trenutnog tečaja. Manekenka te stvari ne može učiniti sama — ali može odlučiti kada ih treba učiniti i zamoliti nekoga da to učini. To je ono što korištenje alata daje modelu, a to je osnova AI agenata. U ovoj jedinici naučit ćemo što je agent, kako je definiran alat i kako radi petlja tool_use.
Što je agent? Model + Alati + Petlja
AI agent sastoji se od tri dijela: modela (mozak koji donosi odluku), alata (funkcije koje model može pozvati: vremenska prognoza, upit u bazi podataka, slanje e-pošte) i petlje (petlja; model poziva alat, dobiva rezultat, ponovno odlučuje što učiniti i tako dalje).
Kritična razlika: poziv s jednim uzorkom nije agent. Agent je proces u kojem model ide korak po korak, pri svakom koraku birajući sljedeći potez na temelju rezultata alata. "Razmišljaj kao čovjek, koristi ruke, pogledaj rezultat, razmisli ponovo."
Važna činjenica: sam model ne upravlja vozilom. Model samo kaže "Želim pozvati ovaj alat s ovim ulazima". Vaša aplikacija (koja se zove pojas) pokreće alat i vraća rezultat modelu. Ovo je ključno za sigurnost: model ne dodiruje izravno vaš sustav; Svaka akcija je pod vašom kontrolom.
Savjet: Ne pokušavajte svaki problem riješiti s agentom. Agent; povećava rizik od kašnjenja, troškova i pogrešaka. Prvo pitajte: "Hoće li se ovo riješiti jednim pozivom ili fiksnim tijek rada?" Ako je odgovor potvrdan, nema potrebe za agentom. Agent je za zadatke otvorenog tipa gdje se koraci ne mogu unaprijed znati.
Definicija alata: naziv, opis, input_schema
Za uvođenje alata u model morate dati tri stvari:
- naziv: Identitet vozila, npr. get_weather.
- opis: Što alat radi i kada ga pozvati. Ovo je najvažnije područje koje omogućuje modelu odabir pravog alata u pravo vrijeme. Napišite ne samo "što radi" nego i "nazovi kada".
- input_schema (ulazna shema): JSON shema koja definira koje parametre alat očekuje, u kojoj vrsti.
# Definicija vozila (konceptualno — JSON shema){ "name": "get_order_status", "description": "Dohvaća trenutni status otpreme narudžbe. Pozovi kada korisnik pita gdje je broj narudžbe ili kada će stići.", "input_schema": { "type": "object", "properties": { "order_no": {"type": "string", "description": "Broj narudžbe, npr. SP-1024"} }, "obavezno": ["broj_narudžbe"] }}
Pravila za dobar opis alata: jasan i koncizan naziv, opis s "kada koristiti", opis za svaki parametar, stavljanje stvarno obveznih u obavezne. Držite fokus na broju vozila; Deseci sličnih modela vozila su iznenađujući.
područje
Što radi?
dobar primjer
loš primjer
ime
ID vozila
status_narudžbe_getir
donijeti
opis
Što radi + kada nazvati
"Vraća status tereta; nazovite kada korisnik pita gdje je narudžba"
"dohvaća podatke"
ulazna_shema
Vrsta parametra i zahtjev
{order_no: niz, označeno}
nema dijagrama / nema opisa
tool_use → tool_result Loop
Ciklus radi ovako, korak po korak:
- Modelu šaljete pitanje korisnika + opis alata.
- Model ili odgovara izravno ili generira tool_use blok: "pozovi order_durumu_getir s order_no=SP-1024."
- Vaša aplikacija zapravo pokreće alat (upituje bazu podataka).
- Rezultat šaljete natrag u model kao tool_result.
- S ovim rezultatom model ili proizvodi konačni odgovor ili poziva drugi alat. Ciklus se nastavlja sve dok model ne kaže "Gotov sam".
# Agent loop (conceptual)messages = [user_question]while True: response = model.uret(messages, tools=tool_definitions) if response.tur == "tool_use": result = harness.run(response.tool_name, response.entries) # APLIKACIJA pokreće poruke += [response, tool_result(result)] # vraća rezultat else: break # konačni odgovor; završeci petlje
Moderni SDK-ovi nude pokretače alata koji pokreću ovu petlju umjesto vas; samo napišite funkcije alata. Ali upravo se to događa iza kulisa.
Upravljanje pogreškama
Alati možda neće uspjeti: narudžba nije pronađena, API je istekao, unos je nevažeći. Ako ne možete pokrenuti alat, vratite pogrešku modelu kao opisni tool_result ("pogreška: Broj narudžbe SP-9999 nije pronađen") i oznaku pogreške. Model to može vidjeti i nježno objasniti korisniku ili pokušati na drugačiji način. Nemojte progutati pogrešku i vratiti prazne rezultate; Model mora znati što je pošlo po zlu.
Slabo/jako Opis vozila
Slab (neodređena imenica, bez "kada"):
ime: "podaci", opis: "dohvaća podatke"# Model ne zna kada i kako pozvati; Ili uopće ne zove ili neispravno zove.
Snažno (ime mreže + kada + opis parametra):
name: "musteri_bakiyesi_getir"description: "Vraća trenutno stanje na računu kupca. Pozovite kada korisnik traži zaduženje, kredit ili stanje. NE vrši plaćanje."input_schema: {custeri_id: string ("ID kupca")}# Model poziva u pravo vrijeme, s pravim parametrima, znajući svoj limit.
Tri mini kućišta
Slučaj 1 — Nepotreban agent. Jedan tim izgradio je posao "sažimanja teksta" s agentom s više alata; Svako ponavljanje traje 4 poziva modela i 9 sekundi. Posao je zapravo bio posao na jedan poziv. Kada smo uklonili agenta i sveli ga na jedan poziv, vrijeme se smanjilo na 1,5 sekundu, a trošak na jednu četvrtinu. Pouka: koristite agenta kada je stvarno potrebno.
Slučaj 2 — Slabo objašnjenje, pogrešan poziv. U agentu za podršku, model je nasumično pozvao opskurni alat koji se zove dohvaćanje iu pitanju stanja i u pitanju otpreme. Kada su vozila podijeljena na balance_getir i cargo_durumu_getir i dodana objašnjenja "nazovi kada", pogrešan odabir vozila smanjio se sa 18 na 1 u 50 primjera.
Slučaj 3 — Pogreška progutana. Agent je vraćao prazne rezultate kada narudžba nije pronađena; Manekenka je to protumačila kao "narudžba je isporučena" i dovela kupca u zabludu. Kada se poruka o pogrešci izričito napiše u tool_result ("narudžba nije pronađena"), model ispravno kaže "Nisam mogao pronaći ovaj broj, možete li ga provjeriti?" počeo je govoriti.
Uobičajene greške
- Prebacivanje svega na agenta: Dok je jedan poziv dovoljan, agent dodaje troškove i kašnjenje.
- Nejasan opis vozila: Model ne zna kada treba nazvati; bira pogrešno.
- Misleći da model pokreće vozilo: Uprtač pokreće vozilo; model samo želi.
- Gutanje pogreške: Model mora znati što je pošlo po zlu; Daj pogrešku kao open tool_result.
- Previše sličnih vozila: Model se zbuni; Neka skup alata bude fokusiran i minimalan.
Pažnja: samo zato što model kaže "pozovi to vozilo" ne znači da treba nešto poduzeti. Na destruktivnim alatima (brisanje, odjava, e-pošta) vaša aplikacija ne bi trebala slijepo izvršavati poziv — to je srž sigurnosne teme u sljedećoj jedinici.
Ukratko
- Agent = model (odluka) + alati (funkcije) + petlja (pozovi alat, dobij rezultat, ponovno odluči).
- Jedan poziv uzorka nije agent; agent je proces korak po korak.
- Model ne pokreće vozilo; Vaša aplikacija se pokreće (upregnuti) i vraća rezultat kao tool_result.
- Alat je identificiran imenom, opisom (točnije "call when") i input_schema.
- Petlja se nastavlja dok tool_use → harness radi → tool_result → model se nastavlja dok model ne kaže "gotovo"; greške se eksplicitno prijavljuju modelu.
Zadatak aplikacije
Dizajnirajte 3 alata iz vlastitog posla koji se mogu dati agentu. (1) Napišite ime, opis s "call when", i input_schemu za svaki; Neka barem jedan bude alat za nedestruktivno čitanje, a jedan izračun. (2) Odaberite realno korisničko pitanje i ručno napišite korak po korak (u petlji) koji će od ovih alata model pozvati s kojim ulazima i što će učiniti nakon što stigne tool_result. (3) Postavite scenarij u kojem jedan od alata ne radi i pokažite kako će se poruka o pogrešci vratiti modelu.
popis za provjeru
- [ ] Mogu definirati agenta kao "model + alati + petlja" i odlučiti kada je potreban.
- [ ] Znam da pojas pokreće vozilo, model to samo želi.
- Mogu napisati solidan opis vozila s [ ] imenom, opisom ("call when") i input_schema.
- Mogu slijediti ciklus [ ] tool_use → tool_result korak po korak.
- [ ] Pogreške alata prijavljujem modelu kao otvoreni tool_result.