Μετάβαση στο περιεχόμενο
15/30Κεφάλαιο 15 από 30

Prompt engineering, μετρημένο: τι αλλάζει την έξοδο

Εξήντα tickets, ίδιες λέξεις σε έξι σειρές, ακρίβεια 26,7%–85,0%. Και τέσσερα internet tricks με error bars.

Σε αυτή τη σελίδα

Εδώ υπάρχει ένα ticket υποστήριξης και τέσσερις ουρές στις οποίες θα μπορούσε να πάει.

TEXT
The label on the parcel has my old surname on it.
    -> billing / technical / shipping / account

Για να το δρομολογήσετε χρειάζεστε τρία πράγματα στο prompt: τους ορισμούς των ουρών, το ticket και την οδηγία να επιλεγεί μία. Τρία blocks. Υπάρχουν έξι σειρές στις οποίες μπορείτε να τα βάλετε, και τα blocks περιέχουν ακριβώς τους ίδιους χαρακτήρες και στις έξι.

Σε εξήντα tickets με γνωστές απαντήσεις, οι έξι σειρές πετυχαίνουν βαθμολογία από 26,7 % έως 55,0 %. Μετακινήστε τα ίδια δύο blocks έξω από το user turn και μέσα στο system turn, χωρίς να αλλάξετε καμία λέξη, και το ίδιο μοντέλο πετυχαίνει 76,7 %. Τυλίξτε το ticket σε ένα tag τύπου XML και φτάνει στο 85,0 %.

Δεν άλλαξε τίποτα στο μοντέλο. Δεν άλλαξε τίποτα στο task. Δεν ξαναγράφτηκε ούτε μία λέξη. Μια διαφορά πενήντα οκτώ μονάδων προέκυψε από τη διάταξη του ίδιου κειμένου.

Αυτός είναι ο λόγος που υπάρχει αυτό το κεφάλαιο, και είναι επίσης ο λόγος που είναι το πιο γεμάτο cargo cult θέμα στο πεδίο. Τα αποτελέσματα είναι πραγματικά και μεγάλα, κάτι που κάνει κάθε ανέκδοτη εμπειρία να μοιάζει επιβεβαιωμένη· και είναι ασταθή μεταξύ μοντέλων και tasks, πράγμα που σημαίνει ότι οι περισσότερες συμβουλές δεν είναι ποτέ κάτι παραπάνω από ένα ανέκδοτο. Άρα αυτό το κεφάλαιο έχει έναν κανόνα, και όλα μέσα του υποτάσσονται σε αυτόν τον κανόνα:

Ένα prompt μετριέται, δεν συζητιέται. Τέσσερις παραλλαγές σε είκοσι περιπτώσεις δεν ξεχωρίζουν τίποτα.

Πριν από τις μετρήσεις, ένα γεγονός που εξηγεί αθόρυβα τα μισά από όσα ακολουθούν.

Το μοντέλο δεν έχει μνήμη. Μεταξύ δύο κλήσεων δεν κρατά τίποτα — ούτε την τελευταία σας ερώτηση, ούτε τη δική του τελευταία απάντηση, ούτε το αρχείο που επισυνάψατε, ούτε το γεγονός ότι το ρωτήσατε ήδη δύο φορές. Κάθε κλήση ξεκινά από ένα άδειο μηχάνημα, και το μόνο που ξέρει αυτό το μηχάνημα είναι η ακολουθία από tokens που μόλις του δώσατε.

Αυτό που μοιάζει με μνήμη σε ένα chat interface είναι ο client σας που ξαναστέλνει ολόκληρη τη συνομιλία, κάθε turn, από την αρχή. Το μοντέλο τα διαβάζει όλα ξανά από το μηδέν, κάθε φορά. Το Κεφάλαιο 13 μέτρησε τι κοστίζει αυτό το ξαναδιάβασμα σε ένα forward pass· το Κεφάλαιο 16 το μετατρέπει σε γραμμή σε τιμολόγιο. Αυτό που έχει σημασία εδώ είναι η συνέπεια για τον σχεδιασμό: το prompt δεν είναι μήνυμα προς ένα σύστημα που έχει κατάσταση. Είναι η κατάσταση.

Αυτό αποσύρει μια ολόκληρη οικογένεια συγχύσεων. «Το μοντέλο ξέχασε τι του είπα» συνήθως σημαίνει ότι δεν του στάλθηκε ποτέ. «Αγνόησε την προηγούμενη οδηγία μου» συνήθως σημαίνει ότι η οδηγία βγήκε από το window όταν το ιστορικό κόπηκε. «Συμπεριφέρθηκε διαφορετικά στην παραγωγή» συνήθως σημαίνει ότι η παραγωγή συναρμολογεί διαφορετικό prompt από αυτό που δοκιμάσατε. Κανένα από αυτά δεν είναι πρόβλημα του μοντέλου, και κανένα δεν διορθώνεται με το να ξαναγράψετε κάτι.

Ο ισχυρισμός «αυτό το prompt είναι καλύτερο» είναι ισχυρισμός για μια κατανομή, και δεν μπορείτε να δείτε μια κατανομή κοιτάζοντας μία έξοδο. Αυτό που χρειάζεστε είναι βαρετό: περιπτώσεις με γνωστές απαντήσεις, N παραλλαγές και ένα διάστημα.

Το harness είναι πενήντα γραμμές TypeScript με το ίδιο σχήμα όπως ο client από το Κεφάλαιο 14 — ένα request, ένα deadline, λίγη concurrency, μια καταμέτρηση. Επανεμφανίζεται στο Κεφάλαιο 19 για να αξιολογήσει έναν retriever και στο Κεφάλαιο 29 ως το golden set.

bench.tsTS
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 };
}

Ο αριθμός που επιστρέφει δεν είναι το αποτέλεσμα. Αυτό είναι:

stats.tsTS
/** 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;
}

Το Κεφάλαιο 4 έκανε το επιχείρημα και αυτό το κεφάλαιο το εξαργυρώνει. Δεκαεπτά σωστά στα είκοσι είναι 85 %, και το 95 % διάστημά του τρέχει από 64 % έως 95 %. Μια παραλλαγή με 13 στα 20 — 65 %, που μοιάζει σαφώς χειρότερη — έχει διάστημα από 43 % έως 82 %. Αυτά τα δύο διαστήματα επικαλύπτονται σχεδόν σε όλο τους το μήκος. Είκοσι περιπτώσεις δεν μπορούν να ξεχωρίσουν ένα καλό prompt από ένα μέτριο, και οι περισσότερες δημοσιευμένες συμβουλές για prompts επικυρώθηκαν σε λιγότερες.

Εξήντα περιπτώσεις, όσες χρησιμοποιεί αυτό το κεφάλαιο, δεν είναι ακόμα πολλές. Είναι αρκετές για να δείτε μεγάλα αποτελέσματα και αρκετά τίμιες ώστε να παραδεχτούν όταν δεν μπορούν να δουν μικρά — και θα το παραδεχτούν αρκετές φορές παρακάτω.

Τρία blocks — οι κανόνες R, το ticket T, η οδηγία I — ενωμένα σε ένα user message. Και οι έξι μεταθέσεις, byte-identical περιεχόμενο, εξήντα περιπτώσεις η καθεμία.

σειρά των τριών blocksσωστάακρίβεια, 95 % Wilson
κανόνες, οδηγία, ticket33/6055,0 % [42,5, 66,9]
κανόνες, ticket, οδηγία30/6050,0 % [37,7, 62,3]
ticket, κανόνες, οδηγία22/6036,7 % [25,6, 49,3]
οδηγία, ticket, κανόνες21/6035,0 % [24,2, 47,6]
οδηγία, κανόνες, ticket17/6028,3 % [18,5, 40,8]
ticket, οδηγία, κανόνες16/6026,7 % [17,1, 39,0]

Από το καλύτερο στο χειρότερο η διαφορά είναι 28,3 μονάδες, και τα διαστήματα δεν επικαλύπτονται, άρα εδώ δεν πρόκειται για ιστορία θορύβου. Επειδή κάθε arm βαθμολογείται στα ίδια εξήντα items, η πιο αιχμηρή ερώτηση είναι η paired: στις περιπτώσεις όπου δύο arms διαφωνούν, πόσο μονόπλευρη είναι η κατανομή; Η μετάβαση από τη χειρότερη σειρά στην καλύτερη ανέστρεψε 21 περιπτώσεις σε σωστές και 4 σε λάθος — ακριβής paired πιθανότητα 0,0009.3

Διαβάστε τον πίνακα για το σχήμα του, όχι για τον νικητή του. Οι δύο καλύτερες γραμμές και οι δύο τελειώνουν με το ticket· οι δύο χειρότερες είτε θάβουν την οδηγία στη μέση είτε την αφήνουν να ακολουθεί τα δεδομένα. Είναι το ίδιο φαινόμενο που οι Liu et al. ονόμασαν Lost in the Middle: το υλικό στις άκρες ενός prompt χρησιμοποιείται πιο αξιόπιστα από το υλικό στο κέντρο.4 Το Κεφάλαιο 16 κοστολογεί το window και το Κεφάλαιο 24 μετρά σωστά το αποτέλεσμα σε μεγάλο μήκος, όπου η μέση καταρρέει όπως περιγράφεται και η ανάκαμψη στο εντελώς τέλος δεν επανεμφανίζεται. Εδώ ο πρακτικός κανόνας προκύπτει μόνος του: task στην κορυφή, δεδομένα στο κάτω μέρος, τίποτα σημαντικό στη μέση.

Τώρα μετακινήστε τις ίδιες λέξεις μεταξύ turns. Το Κεφάλαιο 11 καθιέρωσε ότι το chat template δεν είναι διακόσμηση γύρω από το μοντέλο αλλά μέρος του — τα <|im_start|>system και <|im_start|>user είναι πραγματικά tokens που το μοντέλο είδε εκατομμύρια φορές κατά το fine-tuning, ακριβώς σε αυτές τις θέσεις. Άρα θα πρέπει να έχει σημασία σε ποια πλευρά αυτών των markers προσγειώνεται η οδηγία σας, και έχει:

πού ζουν οι ίδιες λέξειςσωστάακρίβεια, 95 % Wilson
κανόνες και οδηγία στο system turn, μόνο το ticket στο user turn46/6076,7 % [64,6, 85,6]
κανόνες στο system turn, οδηγία και ticket στο user turn44/6073,3 % [61,0, 82,9]
κανόνες και οδηγία στο system turn, οδηγία επαναλαμβανόμενη μετά το ticket42/6070,0 % [57,5, 80,1]
και τα τρία blocks σε ένα user turn33/6055,0 % [42,5, 66,9]

Η μετακίνηση των κανόνων και της οδηγίας πέρα από το όριο του template αγόρασε 21,7 μονάδες — 19 περιπτώσεις κερδισμένες, 6 χαμένες, paired πιθανότητα 0,0146 — χωρίς να αλλάξει ούτε ένας χαρακτήρας τους. Αυτή είναι η συγκεκριμένη απάντηση στο system prompt έναντι user prompt: δεν είναι δύο τρόποι να πεις το ίδιο πράγμα. Είναι δύο διαφορετικές token θέσεις σε μια δομή πάνω στην οποία εκπαιδεύτηκε το μοντέλο, και η system θέση είναι εκεί όπου ανήκουν οι οδηγίες που ισχύουν για ολόκληρη τη συνομιλία.

Προσέξτε και την τρίτη γραμμή. Η επανάληψη της οδηγίας μετά το ticket — ένα ευρέως προτεινόμενο κόλπο — βαθμολογήθηκε χαμηλότερα από το να δηλωθεί μία φορά. Σε αυτό το μοντέλο, σε αυτό το task, το να το πείτε δύο φορές ήταν χειρότερο από το να το πείτε μία.

Delimiters, και το στατιστικό μάθημα που κρύβεται μέσα τους

Σύνδεσμος στην ενότητα: Delimiters, και το στατιστικό μάθημα που κρύβεται μέσα τους

Ίδιο prompt, καλύτερη τοποθέτηση, εξήντα περιπτώσεις. Το μόνο που αλλάζει είναι τι περιβάλλει το κείμενο του ticket.

πώς οριοθετείται το ticketσωστάακρίβεια, 95 % Wilson
ένα tag τύπου XML51/6085,0 % [73,9, 91,9]
τίποτα απολύτως48/6080,0 % [68,2, 88,2]
ένα Markdown heading47/6078,3 % [66,4, 86,9]
μια ετικέτα, Ticket:46/6076,7 % [64,6, 85,6]
hash fences45/6075,0 % [62,8, 84,2]
triple backticks44/6073,3 % [61,0, 82,9]
διπλά εισαγωγικά40/6066,7 % [54,1, 77,3]

Διαφορά δεκαοκτώ μονάδων από στίξη. Αλλά κοιτάξτε τα δύο ακραία διαστήματα: [73,9, 91,9] και [54,1, 77,3]. Επικαλύπτονται. Με την πρόχειρη ανάγνωση — συγκρίνετε τα error bars, και αν ακουμπάνε, μην πείτε τίποτα — αυτός ο πίνακας δεν αποδεικνύει απολύτως τίποτα.

Η πρόχειρη ανάγνωση εδώ είναι λάθος, και το να καταλάβετε γιατί αξίζει περισσότερο από τον πίνακα. Κάθε παραλλαγή βαθμολογήθηκε στα ίδια εξήντα tickets, άρα οι δύο μετρήσεις δεν είναι ανεξάρτητα δείγματα· είναι paired. Το μεγαλύτερο μέρος του πλάτους κάθε διαστήματος προέρχεται από μια πηγή αβεβαιότητας που μοιράζονται και τα δύο arms — το αν αυτά τα εξήντα tickets είναι αντιπροσωπευτικά — και αυτή η πηγή ακυρώνεται όταν τα συγκρίνετε μεταξύ τους. Κάντε αντί γι’ αυτό την paired ερώτηση και η απάντηση είναι αιχμηρή: η μετάβαση από διπλά εισαγωγικά στο XML tag ανέστρεψε 12 περιπτώσεις σε σωστές και 1 σε λάθος, paired πιθανότητα 0,0034. Αυτή είναι πραγματική διαφορά.

Και μετά το ίδιο τεστ ξεφουσκώνει τον τίτλο. Το XML tag κέρδισε την απλή ετικέτα Ticket: κατά 8,3 μονάδες, που είναι ο αριθμός που ένα blog post θα έβαζε στον τίτλο του. Paired: 6 κερδισμένες, 1 χαμένη, πιθανότητα 0,1250. Δεν έχει αποδειχθεί. Επτά περιπτώσεις είναι αυτό πάνω στο οποίο στηρίζεται εκείνη η διάσημη βελτίωση.

Άρα υπάρχουν δύο ερωτήσεις με δύο διαφορετικά όργανα, και η σύγχυσή τους είναι ο τρόπος με τον οποίο οι συμβουλές για prompts πάνε λάθος και προς τις δύο κατευθύνσεις ταυτόχρονα:

Πόσο καλό είναι αυτό το prompt; Το Wilson διάστημα στη δική του ακρίβεια. Πλατύ εκτός αν έχετε εκατοντάδες περιπτώσεις. Αυτός είναι ο αριθμός που αναφέρετε σε κάποιον που αποφασίζει αν θα το βγάλει στην παραγωγή.

Είναι το B καλύτερο από το A; Το paired test πάνω στις περιπτώσεις όπου διαφωνούν. Πολύ πιο ευαίσθητο, επειδή η κοινή δυσκολία του set ακυρώνεται. Αυτός είναι ο αριθμός που χρησιμοποιείτε για να αποφασίσετε μεταξύ δύο υποψηφίων.

Το γενικό εύρημα — ότι τα μοντέλα είναι έντονα και απρόβλεπτα ευαίσθητα σε επιλογές μορφοποίησης χωρίς σημασιολογικό περιεχόμενο — δεν είναι νέο. Οι Sclar et al. άλλαξαν μόνο διαχωριστικά, κενά και πεζά/κεφαλαία σε δεκάδες tasks και βρήκαν διασπορές ακρίβειας αρκετά μεγάλες ώστε να ανατρέψουν δημοσιευμένες κατατάξεις μοντέλων.5 Η πρακτική συνέπεια δεν είναι «χρησιμοποιήστε XML tags». Είναι ότι η μορφοποίηση είναι hyperparameter, δεν κοστίζει τίποτα να τη σαρώσετε, και κάθε σύγκριση δύο μοντέλων που παγώνει μία μορφή συγκρίνει μορφές όσο και μοντέλα.

Το in-context learning — το να δείχνετε στο μοντέλο δουλεμένα παραδείγματα μέσα στο prompt και να το κάνετε να γενικεύει από αυτά χωρίς καμία ενημέρωση weights — είναι η ικανότητα που έκανε το GPT-3 διάσημο.6 Η πρακτική ερώτηση δεν είναι ποτέ αν δουλεύει. Είναι για πόσα παραδείγματα αξίζει να πληρώσετε.

Τα παραδείγματα μπαίνουν ως πραγματικά προηγούμενα turns, εναλλάσσοντας user και assistant, επειδή αυτή είναι η δομή πάνω στην οποία εκπαιδεύτηκε το template. Κάθε k εκτελέστηκε με πέντε διαφορετικές τυχαίες επιλογές από ένα ξεχωριστό pool δεκαέξι labelled tickets:

παραδείγματαμέση ακρίβειαχειρότερη και καλύτερη επιλογήδιασπορά μεταξύ επιλογών
076,7 %
178,7 %78,3 – 80,0 %1,7 μονάδες
283,7 %80,0 – 86,7 %6,7 μονάδες
481,7 %78,3 – 86,7 %8,3 μονάδες
883,7 %78,3 – 88,3 %10,0 μονάδες
1689,3 %85,0 – 93,3 %8,3 μονάδες

Δύο παραδείγματα αγόρασαν επτά μονάδες. Τα επόμενα έξι παραδείγματα δεν αγόρασαν τίποτα μετρήσιμο — 83,7, μετά 81,7, μετά 83,7, μια ακολουθία που περιπλανιέται μέσα στον ίδιο της τον θόρυβο. Τα δεκαέξι αγόρασαν άλλες πέντε και μισή. Η καμπύλη δεν είναι ομαλή άνοδος· είναι ένα σκαλοπάτι, ένα οροπέδιο και ένα σκαλοπάτι.

Η στήλη που έχει τη μεγαλύτερη σημασία είναι η τελευταία. Στο k = 8, το ποια οκτώ παραδείγματα έτυχε να επιλέξετε μετακίνησε την ακρίβεια κατά 10 μονάδες — περισσότερο από ολόκληρο το κέρδος της μετάβασης από δύο παραδείγματα σε οκτώ. Και η κάτω γραμμή είναι η πιο αιχμηρή εκδοχή του: στο k = 16 το pool έχει εξαντληθεί, άρα και οι πέντε εκτελέσεις περιέχουν ακριβώς τα ίδια δεκαέξι παραδείγματα, που διαφέρουν μόνο στη σειρά εμφάνισής τους. Μόνο η σειρά μετακίνησε την ακρίβεια κατά 8,3 μονάδες.

Αυτό είναι το αποτέλεσμα που ανέφεραν οι Lu et al. και επιβιώνει παντού όπου έχει αναζητηθεί: η σειρά των παραδειγμάτων είναι πραγματικό hyperparameter με αποτελέσματα συγκρίσιμα με το πλήθος παραδειγμάτων.7 Άρα η τίμια συμβουλή για few-shot prompting δεν είναι ένας αριθμός. Είναι:

Ξεκινήστε από το μηδέν και προσθέστε παραδείγματα μόνο απέναντι σε μέτρηση

Σύνδεσμος στην ενότητα: Ξεκινήστε από το μηδέν και προσθέστε παραδείγματα μόνο απέναντι σε μέτρηση

Τα πρώτα δύο συνήθως αξίζουν. Πέρα από αυτό μαντεύετε, και η μαντεψιά κοστίζει tokens σε κάθε μία κλήση για την υπόλοιπη ζωή του προϊόντος.

Δύο καλά επιλεγμένα παραδείγματα κερδίζουν οκτώ πρόχειρα επιλεγμένα. Αν τα παραδείγματά σας ήρθαν από την κορυφή ενός spreadsheet, αυτή είναι η μεταβλητή που πρέπει να σαρώσετε πριν προσθέσετε περισσότερα.

Είναι δωρεάν, είναι πραγματικό αποτέλεσμα, και σε αντίθεση με τα περισσότερα σε αυτό το κεφάλαιο δεν χρειάζεται ξαναγράψιμο για να δοκιμαστεί.

Τέσσερα παραδείγματα που έχουν όλα την ίδια ετικέτα διδάσκουν στο μοντέλο την ετικέτα, όχι το task. Η κατάρρευση αυτού του μοντέλου προς όποια ουρά αναφερόταν τελευταία είναι η ίδια αποτυχία με άλλη φορεσιά.

Τώρα η λαογραφία. Καθεμία από αυτές είναι μία μόνο πρόταση που μπαίνει στην αρχή ενός system prompt που κατά τα άλλα είναι ίδιο, στις ίδιες εξήντα περιπτώσεις.

πρόταση που προστέθηκε στο system promptσωστάακρίβεια, 95 % Wilsonpaired έναντι baseline
δεν προστέθηκε τίποτα46/6076,7 % [64,6, 85,6]
«Take a deep breath and work on this problem carefully.»47/6078,3 % [66,4, 86,9]+4 / −3, p = 1,000
«This is very important to my career.»46/6076,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/6070,0 % [57,5, 80,1]+3 / −7, p = 0,344
«I will tip you $200 if you answer correctly.»41/6068,3 % [55,8, 78,7]+1 / −6, p = 0,125
«You will be penalised for every ticket you send to the wrong queue.»25/6041,7 % [30,1, 54,3]+3 / −24, p < 0,001

Τέσσερις από τις πέντε δεν έκαναν τίποτα. Όχι «έκαναν λίγο»· τίποτα που εξήντα paired περιπτώσεις μπορούν να δουν. Η persona του ειδικού και η δωροδοκία βαθμολογήθηκαν και οι δύο κάτω από το ανέγγιχτο baseline, και ακόμη και αυτές οι πτώσεις αποτυγχάνουν στο paired test — είναι θόρυβος που δείχνει προς τα κάτω.

Η τρίτη γραμμή είναι αυτή στην οποία αξίζει να μείνετε. Το «This is very important to my career» παρήγαγε ακριβώς την ίδια ακρίβεια, 46 στα 60 — και δέκα από τις εξήντα απαντήσεις άλλαξαν, πέντε προς κάθε κατεύθυνση. Το συνοπτικό στατιστικό ήταν ίδιο και η συμπεριφορά δεν ήταν. Αν η αξιολόγησή σας είναι ένας μόνο αριθμός πάνω σε ένα μικρό set, μια αλλαγή που ξαναγράφει το ένα έκτο των εξόδων σας μπορεί να μοιάζει με αλλαγή που δεν έκανε τίποτα, και θα τη βγάλετε στην παραγωγή πιστεύοντας ότι ήταν δωρεάν.

Και μετά η απειλή, που είναι η μόνη πρόταση που μετακίνησε τη βελόνα και τη μετακίνησε 35 μονάδες προς τα κάτω, αναστρέφοντας 24 περιπτώσεις από σωστές σε λάθος. Αυτό δεν είναι σφάλμα στρογγυλοποίησης· είναι διαφορετική συμπεριφορά μοντέλου. Το μάθημα δεν είναι «μην απειλείτε ποτέ ένα μοντέλο». Είναι ότι το συναισθηματικό framing δεν είναι αδρανές. Μετακινεί την κατανομή, μερικές φορές έντονα, προς μια κατεύθυνση που κανείς δεν μπορεί να προβλέψει διαβάζοντας την πρόταση — και ακριβώς γι’ αυτό πρέπει να μετριέται αντί να εκλογικεύεται.

Μια επιφύλαξη που σας οφείλει αυτό το κεφάλαιο: αυτές οι πέντε προτάσεις δοκιμάστηκαν σε ένα μικρό μοντέλο και ένα task. Μερικές έχουν δημοσιευμένη υποστήριξη αλλού — το «take a deep breath» προήλθε από paper που έψαξε οδηγίες με υψηλή βαθμολογία αντί να τις επινοήσει, που είναι διαφορετικός και καλύτερος ισχυρισμός από εκείνον που κυκλοφόρησε μετά.8 Αυτό που γενικεύεται δεν είναι οι προτάσεις. Είναι ότι η λίστα που επιβίωσε στα blog posts και η λίστα που επιβιώνει στη μέτρηση είναι δύο διαφορετικές λίστες, και ο μόνος τρόπος να ξέρετε ποια κρατάτε είναι να τρέξετε το bench.

Ένας κανόνας που όλοι επαναλαμβάνουν — πείτε αυτό που θέλετε, όχι αυτό που δεν θέλετε — με τη συνηθισμένη απουσία αριθμού. Ορίστε ο αριθμός. Η ίδια απαίτηση μορφής, γραμμένη με τρεις τρόπους, με το μοντέλο να παράγει ελεύθερα ώστε να μπορεί να παρατηρηθεί η συμμόρφωση:

πώς γράφεται ο κανόνας μορφήςη έξοδος ήταν ακριβώς μία επιτρεπόμενη λέξημέσος όρος output tokens
«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
και τα δύο μαζί41/60 (68,3 %)2,3

Τρεις απαγορεύσεις τα πήγαν χειρότερα από μία οδηγία, και έκαναν το μοντέλο να γράψει πέντε φορές περισσότερο κείμενο — το ακριβώς αντίθετο και των τριών ταυτόχρονα. Η προσθήκη της θετικής πρότασης ξανά το έσωσε στο 68 %.

Ο μηχανισμός δεν είναι μυστήριος μόλις θυμηθείτε το Κεφάλαιο 8. Το μοντέλο επιλέγει ένα επόμενο token από μια κατανομή conditioned σε όλα όσα προηγούνται, και μια απαγόρευση βάζει το απαγορευμένο πράγμα μέσα σε αυτό το conditioning. Δεν υπάρχει operator για άρνηση· υπάρχει ένα context στο οποίο μια λέξη εμφανίζεται πλέον.

Και αυτό μετριέται άμεσα. Πάρτε το baseline prompt και προσθέστε μία γραμμή: Do not use the shipping queue for software problems. Έπειτα κοιτάξτε μόνο τα σαράντα πέντε tickets που δεν είναι shipping tickets:

επιλέχθηκε shippingμέση πιθανότητα στο shippingσυνολική ακρίβεια
baseline11,1 % από τις 45 περιπτώσεις0,13176,7 % [64,6, 85,6]
μετά την απαγόρευσή του με το όνομά του37,8 %0,37451,7 % [39,3, 63,8]

Το να κατονομάσετε μια ουρά για να την αποκλείσετε έκανε το μοντέλο να την επιλέγει τρεις φορές συχνότερα, σχεδόν τριπλασίασε την πιθανότητα που της ανέθετε, και κόστισε 25 μονάδες συνολικής ακρίβειας — 16 περιπτώσεις χαμένες έναντι 1 κερδισμένης, paired πιθανότητα 0,0003.

Μη σκεφτείτε έναν ελέφαντα, μετρημένο. Η επαναδιατύπωση είναι πάντα η ίδια: αντικαταστήστε την απαγόρευση με τον θετικό κανόνα που την κάνει περιττή. Όχι «μη χρησιμοποιείτε shipping για προβλήματα software» αλλά «χρησιμοποιείτε shipping μόνο όταν εμπλέκεται φυσικό δέμα».

Το τίμιο αντιπαράδειγμα: chain of thought που κοστίζει και δεν αποδίδει

Σύνδεσμος στην ενότητα: Το τίμιο αντιπαράδειγμα: chain of thought που κοστίζει και δεν αποδίδει

Το Κεφάλαιο 12 έχτισε σωστά το chain of thought — πρώτα ως prompting τεχνική,910 μετά ως κάτι που εκπαιδεύεται με επαληθεύσιμες ανταμοιβές — και έκλεισε με μια προειδοποίηση που ανέβαλε για αυτό το κεφάλαιο: το να λέτε σε ένα μοντέλο να σκέφτεται βήμα προς βήμα παύει να βοηθά όταν το μοντέλο συλλογίζεται μόνο του, και μπορεί να βλάψει. Ορίστε αυτή η προειδοποίηση με έναν πίνακα από κάτω, σε ένα task όπου είναι εύκολο να υποθέσετε ότι περισσότερη σκέψη πρέπει να είναι καλύτερη.

Και τα δύο arms διαβάζονται με το ίδιο όργανο στην ίδια θέση. Η μόνη διαφορά είναι αν ένα chain of thought που έγραψε το ίδιο το μοντέλο βρίσκεται πρώτα στο context.

armσωστάακρίβεια, 95 % Wilsonεπιπλέον output tokens ανά περίπτωση
χωρίς chain of thought37/6061,7 % [49,0, 72,9]0
chain of thought, έως 60 tokens34/6056,7 % [44,1, 68,4]53,1
chain of thought, έως 200 tokens34/6056,7 % [44,1, 68,4]97,7

Η ακρίβεια έπεσε και το κόστος ανέβηκε, και ο ίδιος ο κανόνας αυτού του κεφαλαίου ισχύει για το ίδιο του το αποτέλεσμα: η πτώση είναι 7 περιπτώσεις κερδισμένες έναντι 10 χαμένων, paired πιθανότητα 0,629, που δεν έχει αποδειχθεί. Αυτό που έχει αποδειχθεί είναι ότι παρήγαγε ενενήντα οκτώ επιπλέον output tokens ανά κλήση και δεν αγόρασε τίποτα μετρήσιμο με αυτά. Η αβεβαιότητα βρίσκεται εξ ολοκλήρου στην πλευρά του οφέλους. Ο λογαριασμός είναι βέβαιος.

Ένα chain που αποτυγχάνει είναι πιο διδακτικό από ένα που δουλεύει. Όταν του ζητήθηκε να συλλογιστεί για το «Your Slack integration stopped posting messages after Tuesday», το μοντέλο έγραψε:

TEXT
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.

Αυτή είναι ικανή συμβουλή troubleshooting και δεν είναι το task. Όταν του ζητήθηκε να σκεφτεί, το μοντέλο παρέσυρε τον εαυτό του στο είδος που το «think step by step about this support ticket» μοιάζει περισσότερο στα training data του — και έπειτα απάντησε σε μια ερώτηση ταξινόμησης με πεντακόσιους χαρακτήρες άσχετου συλλογισμού μέσα στο δικό του context. Το chain of thought βοηθά σε προβλήματα με ενδιάμεση κατάσταση που αξίζει να υπολογιστεί: αριθμητική, multi-hop αναζητήσεις, ικανοποίηση περιορισμών. Η δρομολόγηση μιας πρότασης σε έναν από τέσσερις κουβάδες δεν έχει ενδιάμεση κατάσταση. Δεν υπάρχει τίποτα να κρατήσει το chain, άρα το μόνο που κάνει είναι να προσθέτει εύλογο κείμενο που η τελική απόφαση πρέπει μετά να επιβιώσει.

Δύο πρακτικά επακόλουθα. Πρώτον, για ένα μοντέλο εκπαιδευμένο να συλλογίζεται — τα RLVR μοντέλα του Κεφαλαίου 12 — η οδηγία είναι χειρότερη από περιττή: μπορεί να αντικαταστήσει το μακρύ chain που θα παρήγαγε το μοντέλο με ένα σύντομο, prompt-shaped. Και το sampling πολλών chains και η ψηφοφορία, που είναι αυτό που κάνει το self-consistency,11 δεν μπορεί να σώσει ένα task χωρίς τίποτα για το οποίο να διαφωνήσει: πολλαπλασιάζει το κόστος με τον αριθμό των samples για να σπάσει ισοπαλίες που δεν υπάρχουν. Το Κεφάλαιο 12 μέτρησε αυτό το trade εκεί όπου όντως εφαρμόζεται. Δεύτερον, προσέξτε τι κόστισε το ίδιο το scaffold σύγκρισης. Η εξαναγκασμένη απάντηση σε γραμμή Final queue: έριξε το no-reasoning arm από 76,7 % σε 61,7 %. Δεκαπέντε μονάδες, πληρωμένες για να γίνουν συγκρίσιμα τα δύο arms. Η δομή που υπάρχει για τη δική σας ευκολία δεν είναι ούτε αυτή δωρεάν.

Μία τελευταία μέτρηση, επειδή είναι η ερώτηση που κάνουν όλοι μετά το πρώτο εκπληκτικό αποτέλεσμα. Εξήντα prompts, greedy decoding, επαναλαμβανόμενη εκτέλεση:

  • Η ίδια κλήση επαναλαμβανόμενη με όλα σταθερά επέστρεψε bit-identical πιθανότητες. Ντετερμινιστική.
  • Η ίδια κλήση batched με διαφορετικούς γείτονες — batch sizes 1, 4, 12, 30 και 60 — επέστρεψε πιθανότητες που διέφεραν έως 0,0128. Η επιλεγμένη ετικέτα δεν άλλαξε ποτέ, σε 0 από 60 περιπτώσεις.

Η ετικέτα επιβίωσε επειδή είχε χώρο να το κάνει: στις εξήντα περιπτώσεις το στενότερο χάσμα μεταξύ των δύο κορυφαίων ουρών ήταν 0,0459, τρεισήμισι φορές το drift. Η σταθερότητα δεν ήταν ιδιότητα του αλγορίθμου. Ήταν margin, και τα margins εξαντλούνται. Το Κεφάλαιο 17 είναι εκεί όπου ζει ο αριθμητικός λόγος και όπου αποσυναρμολογούνται τα sampling knobs που ανοίγουν και στενεύουν αυτά τα gaps. Ο λόγος που το φυτεύουμε εδώ είναι ότι οριοθετεί τι μπορεί να σημαίνει οποιαδήποτε μέτρηση prompt: το bench μετρά ένα σύστημα αναπαραγώγιμο μόνο μέχρι μια ανοχή, και μια διαφορά δύο μονάδων μεταξύ παραλλαγών είναι μέσα σε αυτή την ανοχή σε μια κακή μέρα.

Σταματήστε να έχετε γνώμες και αρχίστε να ψάχνετε

Σύνδεσμος στην ενότητα: Σταματήστε να έχετε γνώμες και αρχίστε να ψάχνετε

Όλα τα παραπάνω είναι ένας άνθρωπος που επιλέγει μια παραλλαγή και μια μηχανή που τη βαθμολογεί. Το προφανές επόμενο βήμα είναι να αφήσετε τη μηχανή να επιλέξει και τις παραλλαγές.

APE κάνει ακριβώς αυτό: ένα μοντέλο προτείνει υποψήφιες οδηγίες, αυτές βαθμολογούνται σε held-out παραδείγματα, και οι καλύτερες επιβιώνουν.8 Οι οδηγίες που βρίσκει είναι συχνά πράγματα που κανένας άνθρωπος δεν θα έγραφε, και αυτό είναι το νόημα — η αναζήτηση γίνεται πάνω σε αυτό που βαθμολογείται καλά, όχι πάνω σε αυτό που ακούγεται επαγγελματικό.

DSPy πηγαίνει πιο πέρα και είναι η πιο χρήσιμη ιδέα για ένα προϊόν.12 Δηλώνετε τι παίρνει και τι επιστρέφει κάθε βήμα ενός pipeline, και το framework το μεταγλωττίζει σε prompts, επιλέγοντας demonstrations και βελτιστοποιώντας οδηγίες ως προς το metric σας. Αλλάζετε μοντέλο και κάνετε recompile αντί να ξαναγράψετε. Το prompt παύει να είναι source code που κάποιος hand-tunes και γίνεται artifact που παράγεται απέναντι σε ένα metric, που είναι αυτό που θα έπρεπε να ήταν από την αρχή.

Κανένα από τα δύο δεν αφαιρεί την ανάγκη για το bench. Και τα δύο το κάνουν το μόνο πράγμα που χρειάζεστε, επειδή ένας optimiser χωρίς metric δεν βελτιστοποιεί τίποτα.

Αυτό που μένει είναι η πειθαρχία. Τα prompts ανήκουν σε version control, σε αρχεία, δίπλα στον κώδικα που τα στέλνει — όχι σε μια γραμμή βάσης δεδομένων που κάποιος επεξεργάστηκε μια Τρίτη. Χρειάζονται ένα version identifier αποθηκευμένο δίπλα σε κάθε έξοδο που παρήγαγαν, αλλιώς την ημέρα που κάτι θα κάνει regress δεν μπορείτε να μάθετε τι άλλαξε. Χρειάζονται το bench σε continuous integration, επειδή το prompt είναι το ένα μέρος του συστήματός σας που ένας vendor μπορεί να ακυρώσει σιωπηλά αναπτύσσοντας νέο μοντέλο. Και χρειάζονται περιπτώσεις: όχι εκατό έξυπνες, απλώς τις βαρετές είκοσι που έσπασαν το προηγούμενο τρίμηνο, κρατημένες για πάντα. Το bench είναι το παραδοτέο. Το prompt είναι υποπροϊόν του.

Όλα σε αυτό το κεφάλαιο μετρήθηκαν σε ακρίβεια. Κάθε μία από αυτές τις παραλλαγές έχει επίσης τιμή.

Το system prompt που αγόρασε 21,7 μονάδες στέλνεται σε κάθε κλήση, για πάντα. Τα δύο παραδείγματα που αγόρασαν επτά μονάδες στέλνονται σε κάθε κλήση, για πάντα. Τα δεκαέξι που αγόρασαν δώδεκα στέλνονται σε κάθε κλήση, για πάντα, και είναι περίπου δέκα φορές το μήκος της ερώτησης που όντως έκανε ο χρήστης. Το chain of thought που δεν αγόρασε τίποτα παρήγαγε ενενήντα οκτώ επιπλέον tokens ανά request, και τα output tokens είναι το ακριβό είδος.

Τίποτα από αυτά δεν φαίνεται σε έναν πίνακα ακρίβειας, και όλα φαίνονται σε ένα τιμολόγιο.

Το Κεφάλαιο 16 αφορά τη μονάδα στην οποία είναι πραγματικά εκφρασμένες αυτές οι αποφάσεις. Το token ως μονάδα χρέωσης, το context window ως budget αντί για μνήμη, γιατί μια συνομιλία σαράντα turns κοστίζει πολύ περισσότερο από σαράντα φορές το πρώτο turn, τι πληρώνει και τι δεν πληρώνει το prompt caching, και γιατί η σειρά του prompt σας αποφασίζει αν το cache θα hit καθόλου — κάτι που αποδεικνύεται ότι είναι ένας δεύτερος, καθαρά οικονομικός λόγος να βάζετε το σταθερό υλικό πρώτο και το μεταβλητό υλικό τελευταίο.


Το bench και κάθε πίνακας παρήχθησαν με Qwen/Qwen2.5-0.5B-Instruct υπό greedy decoding, άρα αναπαράγονται ακριβώς. Η τεκμηρίωση του Hugging Face για chat templates είναι η αναφορά για το σε τι πραγματικά επεκτείνονται οι template markers του Κεφαλαίου 11, και για το γεγονός ότι ένα μοντέλο που αποστέλλεται με λάθος template είναι πραγματική και επαναλαμβανόμενη αποτυχία. Για τα position και format effects σε production scale αντί για laboratory scale, οι παραπάνω παραπομπές είναι οι πρωτογενείς πηγές· οι vendor prompting guides είναι χρήσιμοι για τα παραδείγματά τους και πρέπει να διαβάζονται γνωρίζοντας ότι κανένας τους δεν δημοσιεύει διάστημα.

  1. Anthropic, Effective context engineering for AI agents (29 Σεπτεμβρίου 2025), για τη διάκριση prompt-versus-context που χρησιμοποιείται σε αυτό το κεφάλαιο και αναπτύσσεται στο Κεφάλαιο 24.

  2. 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 και common-token bias, και γιατί η εναλλαγή στο bench αυτού του κεφαλαίου δεν είναι προαιρετική.

  3. McNemar, Q. Note on the sampling error of the difference between correlated proportions or percentages. Psychometrika 12(2), pp. 153–157 (1947). Οι paired συγκρίσεις σε αυτό το κεφάλαιο χρησιμοποιούν την ακριβή διωνυμική μορφή αντί για την chi-squared προσέγγιση, επειδή οι discordant counts είναι μικρές.

  4. Liu, N. F. et al. Lost in the Middle: How Language Models Use Long Contexts. arXiv:2307.03172 (2023). Παρατίθεται εδώ για το position effect· μετριέται σε μήκος στο Κεφάλαιο 24.

  5. Sclar, M., Choi, Y., Tsvetkov, Y. and Suhr, A. Quantifying Language Models' Sensitivity to Spurious Features in Prompt Design. arXiv:2310.11324 (2023). Μόνο τα separators και τα spacing μετακινούν την ακρίβεια αρκετά ώστε να αναδιατάξουν model leaderboards.

  6. Brown, T. B. et al. Language Models are Few-Shot Learners. arXiv:2005.14165 (2020). Το paper που εισήγαγε το in-context learning ως ικανότητα και όχι ως περιέργεια· η ενότητα 3 είναι η πηγή του λεξιλογίου zero-shot / one-shot / few-shot που χρησιμοποιούν πλέον όλοι.

  7. 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). Το αποτέλεσμα που αναπαράγεται στον few-shot πίνακα παραπάνω.

  8. Zhou, Y. et al. Large Language Models Are Human-Level Prompt Engineers. arXiv:2211.01910 (2022). Αυτόματο prompt engineering μέσω πρότασης και βαθμολόγησης. Η πολύ-παρατιθέμενη οδηγία «take a deep breath» έρχεται από τους Yang, C. et al., Large Language Models as Optimizers, arXiv:2309.03409 (2023), που την βρήκαν μέσω αναζήτησης σε ένα task με ένα μοντέλο — ένας ισχυρισμός που δεν επιβίωσε ακέραιος στο ταξίδι του προς τα blog posts. 2

  9. Wei, J. et al. Chain-of-Thought Prompting Elicits Reasoning in Large Language Models. arXiv:2201.11903 (2022).

  10. 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», και αξίζει να διαβαστεί για το πόσο στενές ήταν οι συνθήκες.

  11. Wang, X. et al. Self-Consistency Improves Chain of Thought Reasoning in Language Models. arXiv:2203.11171 (2022). Μετρημένο με το κόστος του στο Κεφάλαιο 12.

  12. Khattab, O. et al. DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines. arXiv:2310.03714 (2023).


Δημιουργήθηκε από

David Vicente Campos

Ιδρυτής της NeuraLIA Labs & συνιδρυτής του MyRealFood

Είμαι μηχανικός πληροφορικής, απόφοιτος του Πανεπιστημίου Λεόν. Συνίδρυσα το MyRealFood, όπου ως CTO έφτιαξα την εφαρμογή που έχουν χρησιμοποιήσει εκατομμύρια άνθρωποι για να τρώνε καλύτερα, και ίδρυσα τη NeuraLIA Labs, όπου δημιουργώ προϊόντα AI. Εδώ γράφω για όσα χρειάστηκε να κατανοήσω στην πορεία, όπως θα ήθελα να μου τα είχε εξηγήσει κάποιος.

Περισσότερα για τον συγγραφέα

Δημοσιεύτηκε από τη NeuraLIA Labs.

Λάβετε νέες αναρτήσεις στα εισερχόμενά σας

Νέα για AI, οδηγοί και ενημερώσεις προϊόντος — ένα σύντομο email όταν δημοσιεύουμε κάτι που αξίζει τον χρόνο σας.

Ευρετήριο μαθήματος

Abstract software decision engine with branching paths, probability nodes, and glowing gates.
jev13 λεπτά ανάγνωσης

Το μοντέλο AI Jev είναι φτιαγμένο για αποφάσεις, όχι για πρόζα

Το Jev της TypeSafe AI τραβά την προσοχή επειδή αντιμετωπίζει την ευφυΐα στο λογισμικό ως πρόβλημα πιθανοτήτων: επιλέξτε το σωστό κλαδί, προσθέστε βεβαιότητα και αποφύγετε να πληρώνετε ένα LLM για να γράφει κείμενο όταν ο κώδικας χρειάζεται μια απόφαση.

Abstract legal research workspace with documents, search nodes and governance controls.
openai12 λεπτά ανάγνωσης

Το Astra for Law της OpenAI είναι νομικό σύστημα AI, όχι νέο μοντέλο

Το νομικό λανσάρισμα της OpenAI αφορά λιγότερο ένα νέο θεμελιώδες μοντέλο και περισσότερο το σύστημα γύρω από αυτό: ανάκτηση ανά τομέα, αξιόπιστα εργαλεία, δικαιώματα, benchmarks και διαδρομές ελέγχου.

Abstract agent runtime sorting documents, memory blocks and pointer nodes inside a bounded context frame.
context-engineering12 λεπτά ανάγνωσης

Context engineering for long-horizon AI agents

Long-running agents do not fail only because the window is small. They fail when files, tool outputs and stale history crowd out the task the agent was supposed to finish.

Έτοιμοι να αφήσετε τη LIA να επιλέγει;

Δημιουργήστε με κάθε μοντέλο AI σε ένα σημείο — ξεκινήστε δωρεάν σήμερα.