Prompt engineering mitattuna: mikä muuttaa outputia
60 tikettiä, samat sanat kuudessa järjestyksessä ja tarkkuus 26,7–85,0 %. Neljä internet-kikkaa virherajoineen.
Tällä sivulla
Tässä on tukitiketti ja neljä jonoa, joihin se voisi mennä.
The label on the parcel has my old surname on it.
-> billing / technical / shipping / accountSen reitittämiseen tarvitset promptiin kolme asiaa: jonojen määritelmät, tiketin ja ohjeen valita yksi. Kolme lohkoa. Voit laittaa ne kuuteen eri järjestykseen, ja lohkot sisältävät täsmälleen samat merkit kaikissa kuudessa.
Kuudellakymmenellä tikettillä, joiden oikeat vastaukset tiedetään, kuuden järjestyksen tulokset ovat 26,7 % ja 55,0 % välillä. Siirrä samat kaksi lohkoa pois user-vuorosta system-vuoroon muuttamatta sanaakaan, ja sama model saa 76,7 %. Kääri tiketti XML-tyyliseen tagiin, ja tulos nousee 85,0 %:iin.
Mikään modelissa ei muuttunut. Mikään tehtävässä ei muuttunut. Yhtäkään sanaa ei kirjoitettu uudelleen. Viidenkymmenenkahdeksan pisteen heilahdus syntyi saman tekstin järjestämisestä.
Siksi tämä luku on olemassa, ja siksi se on myös alan cargo cult -ajattelun saastuttamin aihe. Vaikutukset ovat todellisia ja suuria, mikä saa jokaisen anekdootin tuntumaan vahvistetulta; ja ne ovat epävakaita eri modeleissa ja tehtävissä, mikä tarkoittaa, että useimmat neuvot ovat vain anekdootteja. Siksi tällä luvulla on yksi sääntö, ja kaikki siinä alistuu tälle säännölle:
Prompt mitataan, siitä ei väitellä. Neljä varianttia kahdessakymmenessä tapauksessa ei erota mitään.
Prompt on koko tila
Linkki osioon: Prompt on koko tilaEnnen mittauksia yksi tosiasia, joka selittää hiljaisesti puolet siitä, mitä seuraa.
Modelilla ei ole muistia. Kahden kutsun välillä se ei säilytä mitään — ei edellistä kysymystäsi, ei omaa edellistä vastaustaan, ei liittämääsi tiedostoa, ei sitä, että kysyit siltä jo kahdesti. Jokainen kutsu alkaa tyhjästä koneesta, ja ainoa asia, jonka kone tietää, on sille juuri antamasi token-jono.
Se, mikä näyttää chat-käyttöliittymässä muistilta, on asiakkaasi, joka lähettää koko keskustelun uudelleen, jokaisen vuoron, alusta asti. Model lukee kaiken uudelleen tyhjästä joka kerta. Luku 13 mittasi, mitä tuo uudelleenlukeminen maksaa forward passissa; luku 16 muuttaa sen riviksi laskulle. Tässä ratkaisee seurauksena syntyvä suunnitteluperiaate: prompt ei ole viesti järjestelmälle, jolla on tila. Se on tila.
Tämä poistaa kokonaisen joukon sekaannuksia. ”Model unohti, mitä kerroin sille” tarkoittaa yleensä, ettei sitä koskaan lähetetty. ”Se sivuutti aiemman ohjeeni” tarkoittaa yleensä, että ohje putosi ikkunasta, kun historia katkaistiin. ”Se käyttäytyi tuotannossa eri tavalla” tarkoittaa yleensä, että tuotanto kokoaa eri promptin kuin se, jota testasit. Mikään näistä ei ole model-ongelma, eikä mikään korjaannu muotoilemalla sanoja uudelleen.
Bench
Linkki osioon: BenchVäite ”tämä prompt on parempi” on väite jakaumasta, etkä näe jakaumaa katsomalla yhtä outputia. Tarvitset tylsiä asioita: tapauksia, joilla on tunnetut vastaukset, N varianttia ja välin.
Harness on viisikymmentä riviä TypeScriptiä, saman muotoinen kuin luvun 14 asiakas — request, deadline, hieman rinnakkaisuutta, laskuri. Se ilmestyy uudelleen luvussa 19 arvioimaan hakijaa ja luvussa 29 golden setinä.
export type Case = { input: string; expected: string };
export type Variant = { name: string; build: (c: Case) => ChatMessage[] };
async function pooled<T, R>(xs: T[], n: number, f: (x: T) => Promise<R>) {
const out: R[] = new Array(xs.length);
let i = 0;
await Promise.all(
Array.from({ length: n }, async () => {
while (i < xs.length) {
const k = i++;
out[k] = await f(xs[k]);
}
}),
);
return out;
}
export async function runVariant(v: Variant, cases: Case[], concurrency = 6) {
const hits = await pooled(cases, concurrency, async (c) => {
const answer = await complete(v.build(c));
return answer.trim().toLowerCase() === c.expected;
});
return { name: v.name, hits, k: hits.filter(Boolean).length, n: cases.length };
}Takaisin tuleva numero ei ole tulos. Tämä on:
/** 95 % Wilson score interval for a proportion. Chapter 4 derives it. */
export function wilson(k: number, n: number, z = 1.96) {
const p = k / n;
const d = 1 + (z * z) / n;
const centre = (p + (z * z) / (2 * n)) / d;
const half = (z * Math.sqrt((p * (1 - p)) / n + (z * z) / (4 * n * n))) / d;
return [Math.max(0, centre - half), Math.min(1, centre + half)] as const;
}Luku 4 esitti argumentin, ja tämä luku lunastaa sen. Seitsemäntoista oikein kahdestakymmenestä on 85 %, ja sen 95 % väli ulottuu 64 %:sta 95 %:iin. Variantti, joka saa 13 oikein 20:stä — 65 %, mikä tuntuu selvästi huonommalta — saa välin 43 %:sta 82 %:iin. Nämä kaksi väliä menevät päällekkäin lähes koko pituudeltaan. Kaksikymmentä tapausta ei erota hyvää promptia keskinkertaisesta, ja suurin osa julkaistuista prompt-neuvoista on validoitu pienemmällä määrällä.
Kuusikymmentä tapausta, joita tämä luku käyttää, ei sekään ole paljon. Se riittää näkemään suuret vaikutukset ja on tarpeeksi rehellinen myöntämään, milloin se ei näe pieniä — ja se myöntää sen alla useita kertoja.
Sijainti: samat sanat, kuusi järjestystä
Linkki osioon: Sijainti: samat sanat, kuusi järjestystäKolme lohkoa — säännöt R, tiketti T, ohje I — liitettynä yhdeksi user-viestiksi. Kaikki kuusi permutaatiota, tavulleen identtinen sisältö, kuusikymmentä tapausta kukin.
| kolmen lohkon järjestys | oikein | tarkkuus, 95 % Wilson |
|---|---|---|
| säännöt, ohje, tiketti | 33/60 | 55,0 % [42,5, 66,9] |
| säännöt, tiketti, ohje | 30/60 | 50,0 % [37,7, 62,3] |
| tiketti, säännöt, ohje | 22/60 | 36,7 % [25,6, 49,3] |
| ohje, tiketti, säännöt | 21/60 | 35,0 % [24,2, 47,6] |
| ohje, säännöt, tiketti | 17/60 | 28,3 % [18,5, 40,8] |
| tiketti, ohje, säännöt | 16/60 | 26,7 % [17,1, 39,0] |
Paras–huonoin-ero on 28,3 pistettä, eivätkä välit mene päällekkäin, joten tämä ei ole tarina kohinasta. Koska jokainen haara pisteytetään samoilla kuudellakymmenellä kohteella, terävämpi kysymys on paritettu: niissä tapauksissa, joissa kaksi haaraa on eri mieltä, kuinka vino jakauma on? Siirtyminen huonoimmasta järjestyksestä parhaaseen käänsi 21 tapausta oikeaksi ja 4 vääräksi — tarkka paritettu todennäköisyys 0,0009.3
Lue taulukkoa sen muodon, älä voittajan, vuoksi. Kaksi parasta riviä molemmat päättyvät tikettiin; kaksi huonointa joko hautaavat ohjeen keskelle tai laahaavat sen datan perässä. Se on sama ilmiö, jonka Liu et al. nimesivät Lost in the Middle: promptin reunoilla oleva materiaali käytetään luotettavammin kuin keskellä oleva.4 Luku 16 hinnoittelee ikkunan, ja luku 24 mittaa vaikutuksen kunnolla pituudessa, jossa keskikohta romahtaa kuvatulla tavalla eikä aivan lopun palautuminen palaa. Tässä käytännön sääntö putoaa esiin itsestään: tehtävä ylös, data alas, ei mitään tärkeää keskelle.
Siirrä nyt samat sanat vuorojen välillä. Luku 11 osoitti, että chat template ei ole koristelua modelin ympärillä vaan osa sitä — <|im_start|>system ja <|im_start|>user ovat oikeita tokeneita, jotka model näki miljoonia kertoja fine-tuningin aikana täsmälleen noissa paikoissa. Siis pitäisi olla väliä, mille puolelle noita markkereita ohjeesi päätyy, ja sillä on:
| missä samat sanat sijaitsevat | oikein | tarkkuus, 95 % Wilson |
|---|---|---|
| säännöt ja ohje system-vuorossa, tiketti yksin user-vuorossa | 46/60 | 76,7 % [64,6, 85,6] |
| säännöt system-vuorossa, ohje ja tiketti user-vuorossa | 44/60 | 73,3 % [61,0, 82,9] |
| säännöt ja ohje system-vuorossa, ohje toistettuna tiketin jälkeen | 42/60 | 70,0 % [57,5, 80,1] |
| kaikki kolme lohkoa yhdessä user-vuorossa | 33/60 | 55,0 % [42,5, 66,9] |
Sääntöjen ja ohjeen siirtäminen template-rajan yli toi 21,7 pistettä — 19 tapausta voitettiin, 6 hävittiin, paritettu todennäköisyys 0,0146 — muuttamatta niistä merkkiäkään. Tämä on konkreettinen vastaus kysymykseen system prompt versus user prompt: ne eivät ole kaksi tapaa sanoa sama asia. Ne ovat kaksi eri token-sijaintia rakenteessa, jolla model koulutettiin, ja system-sijaintiin kuuluvat ohjeet, jotka koskevat koko keskustelua.
Huomaa myös kolmas rivi. Ohjeen toistaminen tiketin jälkeen — laajalti suositeltu kikka — sai heikomman tuloksen kuin sen sanominen kerran. Tällä modelilla, tässä tehtävässä, kahdesti sanominen oli huonompi kuin kerran sanominen.
Erottimet ja niihin kätkeytyvä tilastollinen oppi
Linkki osioon: Erottimet ja niihin kätkeytyvä tilastollinen oppiSama prompt, paras sijoittelu, kuusikymmentä tapausta. Ainoa muuttuva asia on se, mikä ympäröi tiketin tekstiä.
| miten tiketti rajataan | oikein | tarkkuus, 95 % Wilson |
|---|---|---|
| XML-tyylinen tag | 51/60 | 85,0 % [73,9, 91,9] |
| ei mitään | 48/60 | 80,0 % [68,2, 88,2] |
| Markdown-otsikko | 47/60 | 78,3 % [66,4, 86,9] |
label, Ticket: | 46/60 | 76,7 % [64,6, 85,6] |
| hash fences | 45/60 | 75,0 % [62,8, 84,2] |
| triple backticks | 44/60 | 73,3 % [61,0, 82,9] |
| lainausmerkit | 40/60 | 66,7 % [54,1, 77,3] |
Kahdeksantoista pisteen hajonta välimerkeistä. Mutta katso kahta ääripään väliä: [73,9, 91,9] ja [54,1, 77,3]. Ne menevät päällekkäin. Karkealla tulkinnalla — vertaa virherajoja, ja jos ne koskettavat, älä sano mitään — tämä taulukko ei todista yhtään mitään.
Karkea tulkinta on tässä väärä, ja sen ymmärtäminen on arvokkaampaa kuin taulukko. Jokainen variantti pisteytettiin samoilla kuudellakymmenellä tiketillä, joten kaksi mittausta eivät ole riippumattomia otoksia; ne ovat paritettuja. Suurin osa kunkin välin leveydestä tulee epävarmuuden lähteestä, jonka molemmat haarat jakavat — siitä, ovatko nämä kuusikymmentä tikettiä edustavia — ja tuo lähde kumoutuu, kun vertaat niitä toisiinsa. Kysy sen sijaan paritettu kysymys, ja vastaus on terävä: siirtyminen lainausmerkeistä XML-tagiin käänsi 12 tapausta oikeaksi ja 1 vääräksi, paritettu todennäköisyys 0,0034. Se on todellinen ero.
Ja sitten sama testi lässäyttää otsikon. XML-tag voitti tavallisen Ticket: labelin 8,3 pisteellä, mikä on numero, jonka blogikirjoitus laittaisi otsikkoonsa. Paritettuna: 6 voittoa, 1 tappio, todennäköisyys 0,1250. Ei osoitettu. Seitsemän tapausta on se, jonka varassa kuuluisa parannus lepää.
On siis kaksi kysymystä kahdella eri instrumentilla, ja niiden sekoittaminen on se, miten prompt-neuvot menevät pieleen molempiin suuntiin yhtä aikaa:
Kuinka hyvä tämä prompt on? Wilson-väli sen omalle tarkkuudelle. Leveä, ellei sinulla ole satoja tapauksia. Tämä on numero, jonka raportoit henkilölle, joka päättää julkaisemisesta.
Onko B parempi kuin A? Paritettu testi niissä tapauksissa, joissa ne ovat eri mieltä. Paljon herkempi, koska joukon jaettu vaikeus kumoutuu. Tämä on numero, jolla päätät kahden ehdokkaan välillä.
Yleinen löydös — että modelit ovat voimakkaasti ja arvaamattomasti herkkiä muotoiluvalinnoille, joilla ei ole semanttista sisältöä — ei ole uusi. Sclar et al. vaihtelivat vain erottimia, välistystä ja kirjainkokoa kymmenissä tehtävissä ja löysivät tarkkuushajontoja, jotka riittivät kääntämään julkaistuja model-rankingejä.5 Käytännön seuraus ei ole ”käytä XML-tageja”. Se on, että muotoilu on hyperparameter, sen sweep ei maksa mitään, ja mikä tahansa kahden modelin vertailu, joka lukitsee yhden formaatin, vertailee formaatteja yhtä paljon kuin modeleita.
Kuinka monta esimerkkiä oikeasti riittää
Linkki osioon: Kuinka monta esimerkkiä oikeasti riittääIn-context learning — se, että modelille näytetään promptissa ratkaistuja esimerkkejä ja se yleistää niistä ilman yhtään painopäivitystä — on kyky, joka teki GPT-3:sta kuuluisan.6 Käytännön kysymys ei ole koskaan, toimiiko se. Kysymys on, monestako esimerkistä kannattaa maksaa.
Esimerkit menevät sisään oikeina aiempina vuoroina, vuorotellen user ja assistant, koska se on rakenne, jolla template koulutettiin. Jokainen k ajettiin viidellä eri satunnaispoiminnalla erillisestä kuudentoista labeloidun tiketin poolista:
| esimerkit | keskitarkkuus | huonoin ja paras poiminta | hajonta poimintojen välillä |
|---|---|---|---|
| 0 | 76,7 % | — | — |
| 1 | 78,7 % | 78,3 – 80,0 % | 1,7 pistettä |
| 2 | 83,7 % | 80,0 – 86,7 % | 6,7 pistettä |
| 4 | 81,7 % | 78,3 – 86,7 % | 8,3 pistettä |
| 8 | 83,7 % | 78,3 – 88,3 % | 10,0 pistettä |
| 16 | 89,3 % | 85,0 – 93,3 % | 8,3 pistettä |
Kaksi esimerkkiä toi seitsemän pistettä. Seuraavat kuusi esimerkkiä eivät tuoneet mitään mitattavaa — 83,7, sitten 81,7, sitten 83,7, sarja joka vaeltaa oman kohinansa sisällä. Kuusitoista toi vielä viisi ja puoli. Käyrä ei ole tasainen nousu; se on askel, tasanne ja askel.
Tärkein sarake on viimeinen. Kohdassa k = 8 se, mitkä kahdeksan esimerkkiä satuit valitsemaan, liikutti tarkkuutta 10 pistettä — enemmän kuin koko hyöty siirtymisestä kahdesta esimerkistä kahdeksaan. Ja alin rivi on tästä terävin versio: kohdassa k = 16 pooli on käytetty loppuun, joten kaikki viisi ajoa sisältävät täsmälleen samat kuusitoista esimerkkiä, eroten vain niiden järjestyksessä. Pelkkä järjestys liikutti tarkkuutta 8,3 pistettä.
Tämä on tulos, jonka Lu et al. raportoivat, ja se säilyy kaikkialla, mistä sitä on etsitty: esimerkkien järjestys on aito hyperparameter, jonka vaikutukset ovat verrattavissa esimerkkimäärään.7 Siksi rehellinen neuvo few-shot promptingista ei ole numero. Se on:
Aloita nollasta ja lisää esimerkkejä vain mittausta vasten
Linkki osioon: Aloita nollasta ja lisää esimerkkejä vain mittausta vastenEnsimmäiset kaksi ovat yleensä hintansa arvoisia. Sen jälkeen arvaat, ja arvaus maksaa tokeneita jokaisessa yksittäisessä kutsussa tuotteen koko loppuelämän ajan.
Kohtele valintaa osana promptia
Linkki osioon: Kohtele valintaa osana promptiaKaksi hyvin valittua esimerkkiä voittaa kahdeksan huolimattomasti valittua. Jos esimerkkisi tulivat laskentataulukon yläreunasta, se on muuttuja, joka kannattaa sweepata ennen kuin lisäät enemmän.
Sweepaa järjestys kerran ja jäädytä se sitten
Linkki osioon: Sweepaa järjestys kerran ja jäädytä se sittenSe on ilmaista, se on todellinen vaikutus, ja toisin kuin suurin osa tästä luvusta, sen kokeileminen ei vaadi uudelleenkirjoitusta.
Tarkista luokkatasapaino
Linkki osioon: Tarkista luokkatasapainoNeljä esimerkkiä, joilla kaikilla on sama label, opettaa modelille labelin, ei tehtävää. Tämän modelin romahtaminen siihen jonoon, joka listattiin viimeiseksi, on sama epäonnistuminen eri puvussa.
Neljä lausetta internetistä
Linkki osioon: Neljä lausetta internetistäNyt kansanperinne. Jokainen näistä on yksi lause, joka lisättiin system promptin alkuun; muuten prompt on identtinen, samoilla kuudellakymmenellä tapauksella.
| system promptiin lisätty lause | oikein | tarkkuus, 95 % Wilson | paritettu baselinea vastaan |
|---|---|---|---|
| ei mitään lisätty | 46/60 | 76,7 % [64,6, 85,6] | — |
| ”Take a deep breath and work on this problem carefully.” | 47/60 | 78,3 % [66,4, 86,9] | +4 / −3, p = 1,000 |
| ”This is very important to my career.” | 46/60 | 76,7 % [64,6, 85,6] | +5 / −5, p = 1,000 |
| ”You are a world-class customer support operations expert with twenty years of experience.” | 42/60 | 70,0 % [57,5, 80,1] | +3 / −7, p = 0,344 |
| ”I will tip you $200 if you answer correctly.” | 41/60 | 68,3 % [55,8, 78,7] | +1 / −6, p = 0,125 |
| ”You will be penalised for every ticket you send to the wrong queue.” | 25/60 | 41,7 % [30,1, 54,3] | +3 / −24, p < 0,001 |
Neljä viidestä ei tehnyt mitään. Ei ”vähän”; ei mitään, minkä kuusikymmentä paritettua tapausta näkisi. Asiantuntijapersoona ja lahjus saivat molemmat heikomman tuloksen kuin koskematon baseline, eivätkä nekään pudotukset läpäise paritettua testiä — ne ovat alamäkeen osoittavaa kohinaa.
Kolmas rivi on se, jonka äärelle kannattaa pysähtyä. ”This is very important to my career” tuotti täsmälleen saman tarkkuuden, 46/60 — ja kymmenen kuudestakymmenestä vastauksesta muuttui, viisi kumpaankin suuntaan. Yhteenvetotilasto oli identtinen, käytös ei. Jos evaluaatiosi on yksi numero pienellä joukolla, muutos, joka kirjoittaa kuudesosan outputeistasi uudelleen, voi näyttää muutokselta, joka ei tehnyt mitään, ja julkaiset sen uskoen sen olleen ilmainen.
Ja sitten uhkaus, joka on ainoa lause, joka liikutti neulaa ja liikutti sitä 35 pistettä alas, kääntäen 24 tapausta oikeasta vääräksi. Se ei ole pyöristysartefakti; se on erilaista model-käyttäytymistä. Oppi ei ole ”älä koskaan uhkaile modelia”. Se on, että emotionaalinen kehystys ei ole inertti. Se siirtää jakaumaa, joskus rajusti, suuntaan, jota kukaan ei voi ennustaa lukemalla lausetta — juuri siksi se on mitattava eikä järkeiltävä.
Yksi varaus, jonka tämä luku on sinulle velkaa: nämä viisi lausetta testattiin yhdellä pienellä modelilla ja yhdellä tehtävällä. Joillakin on julkaistua tukea muualla — ”take a deep breath” tuli paperista, joka etsi korkean pistemäärän ohjeita eikä keksinyt niitä, mikä on eri ja parempi väite kuin myöhemmin kiertänyt versio.8 Yleistyvää eivät ole lauseet. Yleistyvää on se, että blogipostauksissa säilynyt lista ja mittauksessa säilyvä lista ovat kaksi eri listaa, ja ainoa tapa tietää, kumpaa pidät kädessäsi, on ajaa bench.
Miksi ”älä” epäonnistuu
Linkki osioon: Miksi ”älä” epäonnistuuSääntö, jota kaikki toistavat — sano mitä haluat, et mitä et halua — tavalliseen tapaan ilman numeroa. Tässä on numero. Sama formaattivaatimus kolmella tavalla kirjoitettuna, modelin generoidessa vapaasti, jotta noudattamista voidaan tarkkailla:
| miten formaattisääntö on kirjoitettu | output oli täsmälleen yksi sallittu sana | output-tokenien keskiarvo |
|---|---|---|
| ”Answer with one word.” | 10/60 (16,7 %) | 2,6 |
| ”Do not explain yourself. Do not write a sentence. Do not add punctuation.” | 1/60 (1,7 %) | 14,0 |
| molemmat yhdessä | 41/60 (68,3 %) | 2,3 |
Kolme kieltoa pärjäsi huonommin kuin yksi ohje ja sai modelin kirjoittamaan viisi kertaa enemmän tekstiä — kaikkien kolmen täsmällisen vastakohdan yhtä aikaa. Positiivisen lauseen lisääminen takaisin pelasti sen 68 %:iin.
Mekanismi ei ole mystinen, kun muistat luvun 8. Model valitsee seuraavan tokenin jakaumasta, joka ehdollistuu kaikkeen sitä edeltävään, ja kielto laittaa kielletyn asian sisään tähän ehdollistukseen. Negaatio-operaattoria ei ole; on context, jossa sana nyt esiintyy.
Tämän voi mitata suoraan. Ota baseline prompt ja lisää yksi rivi: Do not use the shipping queue for software problems. Katso sitten vain neljääkymmentäviittä tikettiä, jotka eivät ole shipping-tikettejä:
shipping valittu | keskitodennäköisyys kohteelle shipping | kokonaistarkkuus | |
|---|---|---|---|
| baseline | 11,1 % 45 tapauksesta | 0,131 | 76,7 % [64,6, 85,6] |
| sen kieltämisen jälkeen nimeltä | 37,8 % | 0,374 | 51,7 % [39,3, 63,8] |
Jonon nimeäminen sen poissulkemiseksi sai modelin valitsemaan sen kolme kertaa useammin, lähes kolminkertaisti sille annetun todennäköisyysmassan ja maksoi 25 pistettä kokonaistarkkuutta — 16 tapausta hävittiin yhtä voitettua vastaan, paritettu todennäköisyys 0,0003.
Älä ajattele norsua, mitattuna. Uudelleenkirjoitus on aina sama: korvaa kielto positiivisella säännöllä, joka tekee kiellosta tarpeettoman. Ei ”älä käytä shippingiä ohjelmisto-ongelmiin” vaan ”käytä shippingiä vain, kun kyseessä on fyysinen paketti”.
Rehellinen vastaesimerkki: chain of thought, joka maksaa eikä tuota
Linkki osioon: Rehellinen vastaesimerkki: chain of thought, joka maksaa eikä tuotaLuku 12 rakensi chain of thoughtin kunnolla — ensin prompting-tekniikkana,910 sitten asiana, joka koulutetaan sisään todennettavilla palkkioilla — ja päättyi varoitukseen, jonka se lykkäsi tähän lukuun: modelin käskeminen ajattelemaan askel askeleelta lakkaa auttamasta, kun model päättelee omillaan, ja voi satuttaa. Tässä on tuo varoitus taulukon kanssa tehtävässä, jossa on helppo olettaa, että enemmän ajattelua olisi parempi.
Molemmat haarat luetaan samalla instrumentilla samassa paikassa. Ainoa ero on, istuuko contextissa ensin chain of thought, jonka model kirjoitti itse.
| haara | oikein | tarkkuus, 95 % Wilson | ylimääräiset output-tokenit per tapaus |
|---|---|---|---|
| ei chain of thoughtia | 37/60 | 61,7 % [49,0, 72,9] | 0 |
| chain of thought, enintään 60 tokenia | 34/60 | 56,7 % [44,1, 68,4] | 53,1 |
| chain of thought, enintään 200 tokenia | 34/60 | 56,7 % [44,1, 68,4] | 97,7 |
Tarkkuus laski ja kustannus nousi, ja tämän luvun oma sääntö koskee tämän luvun omaa tulosta: pudotus on 7 tapausta voitettu ja 10 hävitty, paritettu todennäköisyys 0,629, eli sitä ei ole osoitettu. Se, mikä on osoitettu, on että se tuotti 98 ylimääräistä output-tokenia per kutsu eikä ostanut niillä mitään mitattavaa. Epävarmuus on kokonaan hyödyn puolella. Lasku on varma.
Epäonnistuva chain on opettavaisempi kuin onnistuva. Kun modelia pyydettiin päättelemään aiheesta ”Your Slack integration stopped posting messages after Tuesday”, se kirjoitti:
1. Check if the issue persists on Monday.
2. Verify if there are any updates or changes in your Slack setup that
might affect message posting.
3. If no update has been made since Tuesday, check for any recent system
restarts or downtime affecting Slack functionality.
4. If you have recently installed new software or updated your
environment, ensure it's compatible with Slack version.
5. Contact Slack support for further assistance or troubleshooting steps.Se on pätevää vianmääritysohjetta, mutta se ei ole tehtävä. Kun modelia pyydettiin ajattelemaan, se ajautui genreen, jota ”think step by step about this support ticket” eniten muistuttaa sen koulutusdatassa — ja vastasi sitten luokittelukysymykseen viidensadan merkin verran asiaankuulumatonta päättelyä omassa contextissaan. Chain of thought auttaa ongelmissa, joissa on laskemisen arvoinen välitila: aritmetiikka, monihyppyiset haut, rajoitteiden ratkaisu. Lauseen reitittäminen yhteen neljästä ämpäristä ei sisällä välitilaa. Chainillä ei ole mitään pidettävää, joten se vain lisää uskottavaa tekstiä, josta lopullisen päätöksen täytyy sitten selviytyä.
Kaksi käytännön seurausta. Ensinnäkin modelille, joka on koulutettu päättelemään — luvun 12 RLVR-modelit — ohje on pahempi kuin turha: se voi korvata pitkän chainin, jonka model olisi tuottanut, lyhyellä promptin näköisellä. Ja useiden chainien samplettaminen ja äänestäminen, eli self-consistency,11 ei voi pelastaa tehtävää, jossa ei ole mitään erimielisyyden aihetta: se moninkertaistaa kustannuksen samplejen määrällä ratkaistakseen tasapelejä, joita ei ole. Luku 12 mittasi tuon kaupan siellä, missä se pätee. Toiseksi huomaa, mitä itse vertailurakenne maksoi. Vastauksen pakottaminen Final queue:-riville pudotti ilman päättelyä olevan haaran 76,7 %:sta 61,7 %:iin. Viisitoista pistettä, maksettuna siitä, että kaksi haaraa saatiin vertailukelpoisiksi. Rakenne, joka on olemassa mukavuuttasi varten, ei sekään ole ilmainen.
Sama kutsu, kahdesti
Linkki osioon: Sama kutsu, kahdestiVielä yksi mittaus, koska tätä kaikki kysyvät ensimmäisen yllättävän tuloksen jälkeen. Kuusikymmentä promptia, greedy decoding, ajettuna toistuvasti:
- Sama kutsu toistettuna kaiken pysyessä samana palautti bitilleen identtiset todennäköisyydet. Determinististä.
- Sama kutsu batchattuna eri naapureiden kanssa — batch-koot 1, 4, 12, 30 ja 60 — palautti todennäköisyyksiä, jotka erosivat enintään 0,0128. Valittu label ei muuttunut kertaakaan, 0 tapauksessa 60:stä.
Label säilyi, koska sillä oli tilaa säilyä: kuudenkymmenen tapauksen pienin väli kahden parhaan jonon välillä oli 0,0459, kolme ja puoli kertaa drift. Vakaus ei ollut algoritmin ominaisuus. Se oli marginaali, ja marginaalit loppuvat. Luku 17 sisältää aritmeettisen syyn ja purkaa sampling-säätimet, jotka leventävät ja kaventavat näitä välejä. Syy istuttaa se tähän on, että se rajaa, mitä mikään prompt-mittaus voi tarkoittaa: bench mittaa järjestelmää, joka on toistettava vain toleranssiin asti, ja kahden pisteen ero varianttien välillä on huonona päivänä toleranssin sisällä.
Lopeta mielipiteily ja aloita haku
Linkki osioon: Lopeta mielipiteily ja aloita hakuKaikki yllä oleva on ihmisen valitsema variantti ja koneen arvioima tulos. Ilmeinen seuraava askel on antaa koneen valita myös variantit.
APE tekee juuri niin: model ehdottaa ehdokasohjeita, ne pisteytetään held-out-esimerkeillä, ja parhaat säilyvät.8 Sen löytämät ohjeet ovat usein sellaisia, joita yksikään ihminen ei kirjoittaisi, mikä on pointti — haku kohdistuu siihen, mikä saa pisteitä, ei siihen, mikä kuulostaa ammattimaiselta.
DSPy menee pidemmälle ja on tuotteelle hyödyllisempi idea.12 Määrittelet, mitä kukin pipeline-vaihe ottaa ja palauttaa, ja framework kääntää sen prompteiksi, valitsee demonstraatiot ja optimoi ohjeet metriikkaasi vasten. Vaihda modelia, ja käännät uudelleen sen sijaan, että kirjoittaisit uudelleen. Prompt lakkaa olemasta lähdekoodia, jota joku hienosäätää käsin, ja muuttuu artefaktiksi, joka generoidaan metriikkaa vasten — mitä sen olisi pitänyt olla alusta asti.
Kumpikaan ei poista benchin tarvetta. Molemmat tekevät siitä ainoan tarvitsemasi asian, koska optimizer ilman metriikkaa ei optimoi mitään.
Jäljelle jää kuri. Promptit kuuluvat versionhallintaan, tiedostoihin, sen koodin viereen, joka ne lähettää — eivät tietokantariville, jota joku muokkasi tiistaina. Ne tarvitsevat versiotunnisteen, joka tallennetaan jokaisen niiden tuottaman outputin rinnalle, tai kun jokin regressio tapahtuu, et voi selvittää, mikä muuttui. Ne tarvitsevat benchin continuous integrationissa, koska prompt on järjestelmäsi ainoa osa, jonka toimittaja voi hiljaa invalidoida deployaamalla uuden modelin. Ja ne tarvitsevat tapauksia: ei sataa nokkelaa, vaan ne tylsät kaksikymmentä, jotka hajosivat viime kvartaalilla, säilytettynä ikuisesti. Bench on toimitettava tuotos. Prompt on sen sivutuote.
Mihin tästä mennään seuraavaksi
Linkki osioon: Mihin tästä mennään seuraavaksiKaikki tässä luvussa mitattiin tarkkuutena. Jokaisella näistä varianteista on myös hinta.
System prompt, joka toi 21,7 pistettä, lähetetään jokaisella kutsulla ikuisesti. Kaksi esimerkkiä, jotka toivat seitsemän pistettä, lähetetään jokaisella kutsulla ikuisesti. Kuusitoista, jotka toivat kaksitoista, lähetetään jokaisella kutsulla ikuisesti, ja ne ovat suunnilleen kymmenen kertaa pidempiä kuin käyttäjän oikeasti kysymä kysymys. Chain of thought, joka ei tuonut mitään, tuotti 98 ylimääräistä tokenia per request, ja output-tokenit ovat kalliimpaa lajia.
Mikään siitä ei näy tarkkuustaulukossa, ja kaikki siitä näkyy laskulla.
Luku 16 käsittelee yksikköä, jossa nämä päätökset oikeasti hinnoitellaan. Token billing-yksikkönä, context window budjettina eikä muistina, miksi neljänkymmenen vuoron keskustelu maksaa paljon enemmän kuin neljäkymmentä kertaa ensimmäinen vuoro, mitä prompt caching maksaa ja mitä ei, ja miksi promptisi järjestys päättää, osuuko cache lainkaan — mikä osoittautuu toiseksi, täysin taloudelliseksi syyksi laittaa vakaa materiaali ensin ja muuttuva materiaali viimeiseksi.
Lähteet ja menetelmä
Linkki osioon: Lähteet ja menetelmäBench ja jokainen taulukko tuotettiin Qwen/Qwen2.5-0.5B-Instruct:llä greedy decodingin alla, joten ne toistuvat täsmälleen. Hugging Face -dokumentaatio chat templateista on viite sille, mihin luvun 11 template-markkerit oikeasti laajenevat, ja sille tosiasialle, että väärällä templatella toimitettu model on todellinen ja toistuva vika. Tuotantomittakaavan sijainti- ja formaattivaikutuksista laboratoriomittakaavan sijaan yllä olevat viitteet ovat ensisijaiset lähteet; toimittajien prompting-oppaat ovat hyödyllisiä esimerkkiensä vuoksi, ja ne kannattaa lukea muistaen, ettei yksikään niistä julkaise väliä.
Viitteet
Linkki osioon: Viitteet-
Anthropic, Effective context engineering for AI agents (29. syyskuuta 2025), tämän luvun käyttämästä prompt-versus-context-erosta, jota kehitetään luvussa 24. ↩
-
Zhao, Z., Wallace, E., Feng, S., Klein, D. and Singh, S. Calibrate Before Use: Improving Few-Shot Performance of Language Models. arXiv:2102.09690 (2021). Majority-label-, recency- ja common-token-bias sekä se, miksi tämän luvun benchin rotaatio ei ole valinnainen. ↩
-
McNemar, Q. Note on the sampling error of the difference between correlated proportions or percentages. Psychometrika 12(2), s. 153–157 (1947). Tämän luvun paritetut vertailut käyttävät tarkkaa binomimuotoa eivätkä khiin neliö -approksimaatiota, koska diskordantit lukumäärät ovat pieniä. ↩
-
Liu, N. F. et al. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (2023). Siteerattu tässä sijaintivaikutuksen vuoksi; mitattu pituudessa luvussa 24. ↩
-
Sclar, M., Choi, Y., Tsvetkov, Y. and Suhr, A. Quantifying Language Models' Sensitivity to Spurious Features in Prompt Design. arXiv:2310.11324 (2023). Pelkät erottimet ja välistys liikuttavat tarkkuutta tarpeeksi järjestääkseen model-leaderboardit uudelleen. ↩
-
Brown, T. B. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). Paperi, joka esitteli in-context learningin kykynä eikä kuriositeettina; osio 3 on lähde zero-shot / one-shot / few-shot -sanastolle, jota kaikki nyt käyttävät. ↩
-
Lu, Y., Bartolo, M., Moore, A., Riedel, S. and Stenetorp, P. Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity. arXiv:2104.08786 (2021). Tulos, joka toistetaan yllä olevassa few-shot-taulukossa. ↩
-
Zhou, Y. et al. Large Language Models Are Human-Level Prompt Engineers. arXiv:2211.01910 (2022). Automaattinen prompt engineering ehdotuksilla ja pisteytyksellä. Paljon siteerattu ”take a deep breath” -ohje tulee lähteestä Yang, C. et al., Large Language Models as Optimizers, arXiv:2309.03409 (2023), joka löysi sen hakemalla yhdellä tehtävällä ja yhdellä modelilla — väite, joka ei säilynyt ehjänä matkalla blogipostauksiin. ↩ ↩2
-
Wei, J. et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903 (2022). ↩
-
Kojima, T., Gu, S. S., Reid, M., Matsuo, Y. and Iwasawa, Y. Large Language Models are Zero-Shot Reasoners. arXiv:2205.11916 (2022). ”let's think step by step” -tulos, ja lukemisen arvoinen siksi, kuinka kapeat ehdot olivat. ↩
-
Wang, X. et al. Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171 (2022). Mitattu kustannus mukana luvussa 12. ↩
-
Khattab, O. et al. DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines. arXiv:2310.03714 (2023). ↩