Das größte Modell ist nicht immer das beste
Ein Sprachmodell zu wählen heißt, ein Modell zu einer Aufgabe passend zu machen. Die Faktoren sind Kosten, Geschwindigkeit, Größe, wie viel Text es lesen kann und wo es läuft.
Das ist wichtig, denn die Wahl wiederholt sich bei jedem Aufruf. Ein Modell, das zehnmal teurer ist als nötig und eine Million Mal aufgerufen wird, ergibt eine große Rechnung ohne jeden Gewinn.
Am Ende dieser Lektion
Notiz
Ich kann ein Modell für eine Aufgabe wählen und sagen, warum.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Kontextfenster | der meiste Text, den ein Modell in einem Aufruf lesen kann |
| Latenz | wie lange Sie auf die Antwort warten |
| Preis pro Token | was jedes Token kostet, oft pro Million gerechnet |
| Gehostet | von einem Anbieter betrieben und über das Internet erreicht |
| Lokal | auf Ihrem eigenen Rechner betrieben |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Fünf Dinge zum Abwägen
Gehen Sie von der Aufgabe aus. Eine Aufgabe hat eine Größe, etwa wie viel Text hineingeht und wie viel herauskommt. Sie hat eine Wartezeit, die eine Person akzeptiert, und ein Budget.
Stellen Sie dann jedem Modell fünf Fragen, wie die Tabelle zeigt. Ein Modell, das an einer scheitert, scheidet aus, so gut es bei den übrigen auch ist.
Die fünf Fragen
| Faktor | Die Frage, die zu stellen ist |
|---|---|
| Kosten | Was kosten die Tokens dieser Aufgabe? |
| Geschwindigkeit | Ist die Antwort schnell genug für eine Person? |
| Größe | Liest es den ganzen Text der Aufgabe? |
| Qualität | Ist es bei meinen eigenen Beispielen gut genug? |
| Ort | Darf der Text meinen Rechner verlassen? |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Das Labormodell bei zwei Aufgaben messen
docker exec -w /home/node/project agent node -e 'const labor = require("./labor.js"); const fragen = [ { name: "kurz", max: 10, text: "Nennen Sie eine Frucht.", beispiel: "Ein Apfel." }, { name: "lang", max: 100, text: "Beschreiben Sie einen Regentag in drei Sätzen.", beispiel: "Regen klopft ans Fenster. Die Straße ist grau." }, ]; (async () => { for (const eine of fragen) { const start = Date.now(); const erhalten = await labor.fragen({ max_tokens: eine.max, messages: [{ role: "user", content: eine.text }] }, eine.beispiel); const ms = Date.now() - start; if (erhalten.etikett === "Aufgezeichnetes Beispiel") { console.log(eine.name + ": Aufgezeichnetes Beispiel, keine Zeit gemessen."); continue; } const benutzt = erhalten.daten.usage ? erhalten.daten.usage.completion_tokens + " Tokens geschrieben" : "keine Token-Zahl in der Antwort"; console.log(eine.name + ": Antwort des Modells, " + ms + " ms, " + erhalten.text.length + " Zeichen, " + benutzt + "."); } })();'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Kosten vor dem Aufruf berechnen
Ein Preis gilt für je eine Million Tokens: ein Preis für Eingabe-Tokens, ein höherer für Ausgabe-Tokens. Die Kosten eines Aufrufs sind zwei Produkte. Die Eingabe-Tokens mal dem Eingabepreis, plus die Ausgabe-Tokens mal dem Ausgabepreis.
Zählen Sie die Tokens einer typischen Aufgabe, berechnen Sie einen Aufruf und multiplizieren Sie mit den erwarteten Aufrufen. Die Preisliste hier ist erfunden: Nur die Methode ist echt.
Eine Aufgabe bei drei erfundenen Modellen berechnen
docker exec -w /home/node/project agent node -e '/* Eine erfundene Preisliste, in Einheiten pro Million Tokens. */ const modelle = [ { name: "Klein", ein: 20, aus: 80, verzoegerung: 600, kontext: 8000 }, { name: "Mittel", ein: 100, aus: 400, verzoegerung: 1500, kontext: 32000 }, { name: "Gross", ein: 500, aus: 2000, verzoegerung: 4000, kontext: 128000 }, ]; const aufgabe = { ein: 3000, aus: 300, maxVerzoegerung: 2000, budget: 0.5 }; console.log("Die Aufgabe: " + aufgabe.ein + " Tokens hinein, " + aufgabe.aus + " hinaus, Antwort in unter " + aufgabe.maxVerzoegerung + " ms."); for (const m of modelle) { const kosten = (aufgabe.ein * m.ein + aufgabe.aus * m.aus) / 1000000; const passt = aufgabe.ein + aufgabe.aus <= m.kontext && m.verzoegerung <= aufgabe.maxVerzoegerung && kosten <= aufgabe.budget; console.log(m.name.padEnd(7) + "Kosten " + kosten.toFixed(3).replace(".", ",") + " Einheiten, Verzögerung " + m.verzoegerung + " ms, " + (passt ? "passt" : "passt nicht")); }'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: eine Aufgabe, drei Modelle
| Modell | Kosten pro Aufruf | Verzögerung | Passt? |
|---|---|---|---|
| Klein | 0,084 Einheiten | 600 ms | Ja |
| Mittel | 0,420 Einheiten | 1500 ms | Ja |
| Gross | 2,100 Einheiten | 4000 ms | Nein, zu langsam und über dem Budget |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, das größte Modell sei immer das beste. Meist ist es das langsamste und teuerste, und ein kleines reicht für eine einfache Aufgabe oft aus. Testen Sie jedes Modell an eigenen Beispielen und nehmen Sie das billigste, das besteht.
Der Ausführungsort ändert die Regeln
Ein gehostetes Modell betreibt ein Anbieter. Sie senden Text über das Internet und zahlen pro Token. Ein lokales Modell läuft auf Ihrem Rechner: Der Text bleibt bei Ihnen, aber Sie brauchen die Hardware, und es kann langsamer sein.
Eine Aufgabe mit privatem Text muss vielleicht lokal bleiben. Dann lautet die Regel: das billigste unter den erlaubten.
Zum Weiterdenken: die eigene Aufgabe berechnen
Ändern Sie die Aufgabe im Kosten-Skript in eine, die Sie bauen würden. Geben Sie an, wie viele Tokens hinein- und hinausgehen und wie lange eine Person wartet. Führen Sie es aus.
Schreiben Sie, welches Modell Sie wählen würden und welcher Faktor entschieden hat. Sagen Sie, was Sie als Nächstes testen würden, bevor Sie der Wahl trauen.