Pikkade agendikäikude hoidmine kontekstiakna sees
Mudel suudab korraga lugeda piiratud hulga teksti — oma kontekstiakna. Mythexi agent teeb pikki töid: loeb palju faile, käivitab käske ja annab piiritletud ülesandeid alamagendile. Leidsime kolm viisi, kuidas pikk töö katkes: alamagendid kasvasid seni, kuni mudel lükkas iga päringu tagasi; alamagent peatus varakult, sest arvas, et tal ei jää ruumi; ja meie žetoonide arv oli vene, hiina ja jaapani keele puhul väga vale. Siin on, mida muutsime.
Mõned mõisted
- Žetoonid on tükid, mida mudel loeb. Piirangud ja kulud arvestatakse žetoonides, mitte tähemärkides ega sõnades.
- Kontekstiaken on suurim hulk, mida mudel suudab ühe päringuga lugeda. Meil on ka oma madalam eelarve igale päringule, et kulud ja kiirus oleksid mõistlikud.
- Tööriistatulemused on see, mis agent oma tööriistadelt tagasi saab: faili sisu, mille ta luges, või käsu väljund, mille ta käivitas. Pikas töös on need enamik saadetavast.
- Alamagent on abiline, mille peamine agent alustab iseseisva ülesande jaoks, näiteks „kontrolli neid peatükke märkmete vastu“. Ta saab ühe juhise ja töötab siis oma tööriistakutsetega iseseisvalt läbi.
Probleem 1: alamagendid kasvasid, kuni mudel need tagasi lükkas
Iga samm saadab agent mudelile senise vestluse. Kui see muutus liiga suureks, kärpis meie kood seda — aga ainult kasutaja sõnumi alguses, et tööriistakutse ja selle tulemus ei läheks kunagi lahku. See säilitas esimese sõnumi, lisas märkme, et varasem vestlus on lühendatud, ja hoidis uuemad terved käigud, mis mahtusid.
Alamagendil on täpselt üks kasutajasõnum: tema juhis. Kärpimiseks polnud kohta. Seega saatis ta iga sammu puhul kogu oma ajaloo, mis kasvas iga kord, kuni päring oli suurem, kui mudel üldse vastu võtab — umbes miljon žetooni. Testis 8 sellisest alamagendist lükati kõik 8 tagasi.
Parandus: kõigepealt tühjenda vanad tööriistatulemused
Päringud mahuvad nüüd eelarvesse kolme sammuga, ja järgmist proovitakse ainult siis, kui eelmine ei piisanud:
- Tühjenda vanimad tööriistatulemused. Nende sisu asendatakse lühikese märkmega: tulemus tühjendati, et vestlus mahuks mudeli kontekstiakna, ja agent võib tööriista vajadusel uuesti käivitada. Tund tagasi loetud fail on tavaliselt päringu suurim ja kõige vähem kasulik osa, ning faili saab uuesti lugeda. Uuemad tulemused jäävad täisena alles.
- Hoia terveid kasutajakäike. Nagu varem: esimene sõnum, märkus ja uuemad terved käigud, mis mahuvad.
- Hoia terveid tööriistavoore. Pika käigu sees — ainus liik, mis alamagendil on — hoia esimene sõnum, märkus ja uuemad terved voorud „kutsu tööriista, saa tulemus“.
See mõjutab ainult seda, mida saadetakse. Agendi salvestatud ajalugu hoiab kõike. Samas testis lükati 8-st tagasi 0 ja kõik 8 lõpetasid.
Tühjendamine partiidena, et vahemälu töötaks
Mudeli pakkujad saavad korduvalt kasutada päringu algust, kui see on eelmisega identne — see on prefiksi vahemälu. Kui tühjendaksime igal kutsel ühe tulemuse veel, muutuks päringu algus igal kutsel ja vahemälu ei aitaks kunagi.
Seega tühjendatakse vanimaid tulemusi neli korraga, mitte üks. Tühjendatud osa jääb mitme kutse jooksul samaks. Tulemust, mis pole palju suurem kui märkus, ei puututa: selle tühjendamine säästaks peaaegu midagi ja muudaks ikkagi päringu algust. Selle järgi, kui palju jääb täisena, otsustatakse suuruse, mitte arvu järgi: uuemad tulemused, mis mahuvad neljandikku eelarvest, jäävad alles ja alati vähemalt üks. Varasem versioon hoidis kindla kuue tulemuse täisena, mis oli lühikeste käsu väljundite puhul õige, aga pikkade faililugemiste korral jättis suurema osa eelarvest vanadele tulemustele.
Keeldumised ütlevad seda ära
Päringut, mille mudel tagasi lükkab kehtetuna, ei proovita enam uuesti; sama päringu saatmine annab sama vastuse. Kui vestlus on mudeli jaoks liiga pikk, näeb inimene sõnumit: „See vestlus läks mudeli jaoks ühe korraga lugemiseks liiga pikaks. Alusta järgmise sammu jaoks uut vestlust — kõik seni ehitatu jääb alles.“ See on inimese otsustada, mitte katkestus, ja seetõttu ei saada sellest meile hoiatust.
Probleem 2: agent peatus, et „ruumi säästa“
Alamagent, kellel paluti lugeda 40 pikka peatükki, peatus pärast kahte, öeldes, et tahab ruumi säästa. Ta oli kasutanud umbes 100 000 žetooni 400 000-žetoonilisest eelarvest.
Tal ei olnud viisi teada, et vanu tulemusi nüüd tema jaoks tühjendatakse. Seega ütlesime talle. Agendi juhised ütlevad nüüd, et kui vestlus kasvab üle selle, mida mudel vastu võtab, tühjendatakse vanimad tööriistatulemused ja uuemad jäävad täisena — seega ära peata pikka ülesannet ruumi säästmiseks; jätka ja loe fail uuesti, kui vajad tühjendatud sisu.
Parandus, mida mudel ei näe, ei ole mudeli seisukohalt parandus. Mehhanism aitab ainult siis, kui agent sellesse usub.
Probleem 3: žetoonide lugemine nii, nagu kõik oleks inglise keeles
Hindasime žetoone ilma tokeniseerijat käivitamata: tähemärgid jagatud neljaga. See on inglise keele jaoks mõistlik nipp. Teiste kirjade puhul ei ole: vene keeles on umbes 2,2 tähemärki žetooni kohta, hiina või jaapani keeles umbes üks.
Nii saatis vene peatükke lugev alamagent päringu umbes 640 000 žetooniga, samal ajal kui meie hinnang ütles, et see jääb 400 000 žetooni eelarve alla. Hinnang oleks sama hästi võinud lükata päringu üle mudeli kõvast piirist.
Hinnang arvestab nüüd kirjasüsteemi järgi: tavaline ASCII nelja tähemärgi kaupa žetooni kohta, hiina, jaapani ja korea keel ühe kaupa ning kõik muu — kirillitsa, kreeka, araabia, täppidega tähed, emotikonid — kahe kaupa. See on mõeldud kõrgele eksimiseks. Ühe vene peatüki puhul hindab see nüüd 43 423 žetooni, kui mõõdetud on umbes 44 600; varem ütles see 25 023. Kuna sõnum ei muutu kunagi pärast kirjutamist, arvutatakse selle hinnang üks kord ja jäetakse meelde, mitte iga sammu juures uuesti.
Mida sellest õppisime
- Kärbi seal, kus suurus tegelikult on. Agenditöös on see tööriistatulemused, mitte kasutajasõnumid.
- Ütle agendile tema enda turvavõrkudest. Muidu planeerib ta piiride ümber, mis enam ei kehti.
- „Tähemärgid ÷ 4“ on inglise keele eeldus. Iga žetoonide loendus mitmekeelsete kasutajate jaoks peab arvestama kirjasüsteemiga või kasutama päris tokeniseerijat.
- Hoia vahemälu silmas. Päring, mis muutub algusest igal kutsel, maksab rohkem ja töötab aeglasemalt.
Kui ehitad oma rakendusse tehisintellekti funktsioone, katavad meie juhendid mis on LLM ja kuidas LLM API-sid kasutada kontekstiakent ja žetoone algusest peale. Rohkem sellest, kuidas alamagendid Mythexis töötavad, leiad alamagentide dokumentatsioonist.