Vienība 9 / 11

AI aģenti un rīku izmantošana

Ieguvumi:

  • Aģenta definēšana kā "modelis + rīki + cilpa" un izlemšana, kad tas ir nepieciešams
  • Rīka definīcijas rakstīšana ar nosaukumu, aprakstu un ievades_shēmu
  • Ciklu tool_use un tool_result plūsmas un kļūdu apstrādes uzraudzība

Līdz šim modelis vienmēr ir veicis vienu darbu: saņemt teksta ievadi, sagatavot teksta atbildes. Bet reālam darbam bieži vien ir vajadzīgs vairāk nekā teksts; aprēķinu veikšana, datu bāzes vaicājumi, API izsaukšana, aktuālā valūtas kursa noskaidrošana. Modele pati nevar šīs lietas izdarīt, taču viņa var izlemt, kad tās ir jādara, un lūgt kādam tās izdarīt. Tas ir tas, ko rīku izmantošana dod modelim, un tas ir AI aģentu pamats. Šajā nodaļā mēs uzzināsim, kas ir aģents, kā tiek definēts rīks un kā darbojas cilpa tool_use.

Kas ir aģents? Modelis + rīki + cilpa

AI aģents sastāv no trim daļām: modeļa (smadzenes, kas pieņem lēmumu), rīkiem (funkcijām, kuras modelis var izsaukt: laikapstākļi, datu bāzes vaicājums, e-pasta sūtīšana) un cilpas (cilpa; modelis izsauc rīku, iegūst rezultātu, vēlreiz izlemj, ko darīt, un tā tālāk).

Kritiskā atšķirība: viena modeļa izsaukums nav aģents. Aģents ir process, kurā modelis virzās soli pa solim, katrā solī izvēloties nākamo kustību, pamatojoties uz instrumenta rezultātu. "Domājiet kā cilvēks, izmantojiet rokas, paskatieties uz rezultātu, padomājiet vēlreiz."

Svarīgs fakts: pats modelis nedarbina transportlīdzekli. Modelis vienkārši saka: "Es gribu izsaukt šo rīku ar šiem ievadiem". Jūsu lietojumprogramma (saukta par instalāciju) palaiž rīku un atgriež rezultātu modelī. Tas ir ļoti svarīgi drošībai: modelis tieši nepieskaras jūsu sistēmai; Katra darbība ir jūsu kontrolē.

Padoms: nemēģiniet atrisināt visas problēmas ar aģentu. Aģents; palielina kavēšanās, izmaksu un kļūdu risku. Vispirms jautājiet: "Vai tas tiks atrisināts ar vienu zvanu vai fiksētu darbplūsmu?" Ja atbilde ir jā, aģents nav nepieciešams. Aģents ir paredzēts beztermiņa uzdevumiem, kuru darbības nevar iepriekš zināt.

Rīka definīcija: nosaukums, apraksts, ievades_shēma

Lai modelī ieviestu rīku, jums jānorāda trīs lietas:

  • nosaukums: Transportlīdzekļa identitāte, piem. get_weather.
  • apraksts: Ko rīks dara un kad to izsaukt. Šī ir vissvarīgākā joma, kas ļauj modelim izvēlēties pareizo rīku īstajā laikā. Rakstiet ne tikai "ko dara", bet arī "zvaniet, kad".
  • input_schema (ievades shēma): JSON shēma, kas nosaka, kādus parametrus rīks sagaida un kādā veidā.

# Transportlīdzekļa definīcija (konceptuāla — JSON shēma){ "name": "get_order_status", "description": "Izgūst pasūtījuma pašreizējo piegādes statusu. Zvanīt, kad lietotājs jautā, kur atrodas pasūtījuma numurs vai kad tas tiks saņemts.", "input_schema": { "type": "object", "properties": { "order_no": "order:":st piem., SP-1024"} }, "required": ["order_no"] }}

Noteikumi laba rīka aprakstam: skaidrs un kodolīgs nosaukums, apraksts ar "kad lietot", apraksts katram parametram, obligāti liekot patiesi obligātos. Koncentrējieties uz transportlīdzekļu skaitu; Pārsteidz desmitiem līdzīgu transportlīdzekļu modeļu.

apgabalā

Ko tas dara?

labs piemērs

slikts piemērs

nosaukums

Transportlīdzekļa ID

order_status_getir

atnest

apraksts

Ko tas dara + kad zvanīt

"Atgriež kravas statusu; zvaniet, kad lietotājs jautā, kur atrodas pasūtījums"

"iegūst datus"

ievades_shēma

Parametru veids un prasība

{order_no: virkne, anotēts}

nav diagrammas / nav apraksta

tool_use → tool_result Cikls

Cikls darbojas šādi, soli pa solim:

  1. Jūs nosūtāt modelim lietotāja jautājumu + rīku aprakstus.
  2. Modelis atbild tieši vai ģenerē bloku tool_use: "call order_durumu_getir ar order_no=SP-1024."
  3. Jūsu lietojumprogramma faktiski palaiž rīku (pieprasa datu bāzi).
  4. Jūs nosūtāt rezultātu atpakaļ modelim kā tool_result.
  5. Ar šo rezultātu modelis vai nu rada galīgo atbildi, vai izsauc citu rīku. Cikls turpinās, līdz modelis saka "Es esmu pabeidzis".

# Aģenta cilpa (konceptuālie) ziņojumi = [lietotāja_jautājums], kamēr True: atbilde = model.uret(ziņojumi, instrumenti=rīka_definīcijas) if response.tur == "rīka_izmantošana": rezultāts = harness.run(response.tool_name, response.entries) # APPLICATION izpilda ziņojumus # APPLICATION izpilda ziņojumus pārtraukums # gala atbilde; cilpas gali

Mūsdienu SDK piedāvā rīku palaidējus, kas izpilda šo cilpu jūsu vietā; jūs vienkārši ierakstiet rīka funkcijas. Bet tieši tas notiek aizkulisēs.

Kļūdu pārvaldība

Rīki var neizdoties: pasūtījums nav atrasts, API noildze, ievade nav derīga. Ja nevarat palaist rīku, atgrieziet modelim kļūdu kā aprakstošu rīku tool_result ("kļūda: pasūtījuma numurs SP-9999 nav atrasts") un kļūdas karogu. Modelis to var redzēt un maigi izskaidrot to lietotājam vai izmēģināt citu veidu. Nenorīt kļūdu un atgriezt tukšus rezultātus; Modelim ir jāzina, kas nogāja greizi.

Vāja/spēcīga transportlīdzekļa apraksts

Vājš (nenoteikts lietvārds, bez "kad"):

name: "data", description: "fetches data"# Modelis nezina, kad un kā zvanīt; Tas vai nu nezvana vispār, vai zvana nepareizi.

Spēcīgs (neto nosaukums + kad + parametra apraksts):

name: "musteri_bakiyesi_getir"description: "Atgriež klienta tekošā konta atlikumu. Zvanīt, kad lietotājs pieprasa debetu, kredītu vai atlikumu. NEVEIC maksājumu."input_schema: {custeri_id: string ("Klienta ID")}# Modelis zvana īstajā laikā, ar pareiziem parametriem, zinot tā limitu.

Trīs mini futrāļi

1. gadījums — nevajadzīgs aģents. Viena komanda izveidoja “teksta kopsavilkuma” biznesu, izmantojot vairāku rīku aģentu; Katrs kopsavilkums aizņem 4 modeļa zvanus un 9 sekundes. Darbs faktiski bija viena zvana darbs. Kad mēs noņēmām aģentu un samazinājām to līdz vienam zvanam, laiks samazinājās līdz 1,5 sekundēm un izmaksas samazinājās līdz vienai ceturtdaļai. Nodarbība: izmantojiet aģentu, kad tas patiešām ir nepieciešams.

2. gadījums — vājš skaidrojums, nepareizs izsaukums. Atbalsta aģentā gan bilances, gan piegādes jautājumā modelis nejauši izsauca neskaidru rīku, ko sauc par ienesi. Sadalot transportlīdzekļus balansa_getir un cargo_durumu_getir un pievienojot paskaidrojumus "zvanīt kad", nepareizā transportlīdzekļa izvēle samazinājās no 18 līdz 1 no 50 piemēriem.

3. gadījums — norīta kļūda. Aģents atgrieza tukšus rezultātus, kad pasūtījums netika atrasts; Modelis to interpretēja kā "pasūtījums tika piegādāts" un maldināja klientu. Kad kļūdas ziņojums ir tieši rakstīts uz tool_result ("pasūtījums nav atrasts"), modelis pareizi saka "Es nevarēju atrast šo numuru, vai varat to pārbaudīt?" viņš sāka teikt.

Biežas kļūdas

  • Visu pārvēršot aģentam: lai gan pietiek ar vienu zvanu, aģents palielina izmaksas un kavēšanos.
  • Neskaidrs transportlīdzekļa apraksts: Modelis nezina, kad zvanīt; izvēlas nepareizi.
  • Domājot, ka modelis vada transportlīdzekli: Siksnas vada transportlīdzekli; modele vienkārši vēlas.
  • Kļūdas norīšana: modelim ir jāzina, kas nogāja greizi; Norādiet kļūdu kā open tool_result.
  • Pārāk daudz līdzīgu transportlīdzekļu: modelis apjūk; Saglabājiet rīku komplektu koncentrētu un minimālu.
Uzmanību: tas, ka modelī ir rakstīts "izsaukt šo transportlīdzekli", nenozīmē, ka ir jārīkojas. Iznīcinošiem rīkiem (dzēšana, izrakstīšanās, e-pasts) jūsu lietojumprogrammai nevajadzētu akli izpildīt zvanu — tas ir drošības tēmas pamatā nākamajā sadaļā.

Rezumējot

  • Aģents = modelis (lēmums) + rīki (funkcijas) + cilpa (izsaukt rīku, iegūt rezultātu, izlemt vēlreiz).
  • Viena modeļa izsaukums nav aģents; aģents ir soli pa solim process.
  • Modelis nedarbina transportlīdzekli; Lietojumprogramma tiek palaista (harness) un atgriež rezultātu kā tool_result.
  • Rīks tiek identificēts pēc nosaukuma, apraksta (konkrēti "zvanīt, kad") un ievades_shēmas.
  • Cilpa turpinās kā tool_use → harness darbojas → tool_result → modelis turpinās, līdz modelis saka "pabeigts"; par kļūdām ir skaidri ziņots modelim.

Lietojumprogrammas uzdevums

Izstrādājiet 3 sava uzņēmuma rīkus, kurus varat nodot aģentam. (1) Katram ierakstiet nosaukumu, aprakstu ar "zvanīt kad" un ievades_shēmu; Lai vismaz viens ir nesagraujošs lasīšanas rīks un viens aprēķins. (2) Izvēlieties reālistisku lietotāja jautājumu un manuāli soli pa solim (cilpā) ierakstiet, kuru no šiem rīkiem modelis izsauks ar kādām ievadēm un ko tas darīs pēc instrumenta_rezultāta saņemšanas. (3) Iestatiet scenāriju, kurā kāds no rīkiem neizdodas, un parādiet, kā kļūdas ziņojums atgriezīsies modelī.

kontrolsaraksts

  • [ ] Es varu definēt aģentu kā "modelis + rīki + cilpa" un izlemt, kad tas ir nepieciešams.
  • [ ] Es zinu, ka siksna darbina transportlīdzekli, modelis vienkārši to vēlas.
  • Es varu uzrakstīt stabilu transportlīdzekļa aprakstu ar [ ] nosaukumu, aprakstu ("zvanīt, kad") un ievades_shēmu.
  • Es varu soli pa solim sekot ciklam [ ] tool_use → tool_result.
  • [ ] Es ziņoju par rīka kļūdām modelim kā open tool_result.