Warum Modellaufrufe über ein Gateway laufen
Ein LLM-Gateway ist ein einziger Dienst, durch den alle Modellaufrufe laufen. Er hält die Schlüssel des Anbieters, wendet Limits an, protokolliert den Aufruf und wählt das Modell. Das ist wichtig, weil jedes Produkt, das den Anbieter direkt aufruft, jede Regel selbst nachbauen müsste.
Ein Unternehmen hat drei Produkte, die ein Modell aufrufen. Eines lässt einen Schlüssel in einem Build-Protokoll durchsickern. Ein anderes hat kein Limit und verbraucht ein Monatsbudget in einer Nacht. Ein Gateway macht aus beidem eine einzige Korrektur.
Am Ende dieser Lektion
Notiz
Ich kann sagen, wozu ein Gateway vor Modellaufrufen dient.
Schlüsselwörter
| Begriff | Was er bedeutet |
|---|---|
| Gateway | ein Dienst, durch den alle Modellaufrufe laufen |
| Kundenschlüssel | ein Schlüssel, mit dem ein Team das Gateway erreicht |
| Ratenlimit | eine Obergrenze für Anfragen in einem Zeitfenster |
| Routing | die Wahl, welches Modell eine Anfrage bedient |
| Anfrageprotokoll | eine Aufzeichnung jedes Aufrufs, ohne seinen Text |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein Gateway hat vier Aufgaben
Jede Aufgabe ist eine Regel, die vor oder nach dem Aufruf gilt. Schlüssel: Aufrufer haben einen Kundenschlüssel, und nur das Gateway hat den Schlüssel des Anbieters. Limits: ein Zähler pro Team und Minute. Routing: eine Regel wählt das Modell. Protokoll: ein Eintrag pro Aufruf.
Weil alle Aufrufe durch eine Funktion laufen, ändert man eine Regel an einer einzigen Stelle.
Beispiel: fünf Anfragen, Limit zwei
| Anfrage | Schlüssel | Wörter | Ergebnis |
|---|---|---|---|
| 1 | schluessel-berlin | 40 | ok, kleines-modell |
| 2 | schluessel-berlin | 500 | ok, grosses-modell |
| 3 | schluessel-berlin | 20 | begrenzt: Berlin hat schon zwei |
| 4 | schluessel-zzz | 10 | abgelehnt: diesen Schlüssel gibt es nicht |
| 5 | schluessel-koeln | 80 | ok, kleines-modell |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Was ein Gateway protokollieren darf
Protokollieren Sie die ID, das Team, den Status, das Modell, die Größe und die Uhrzeit. Protokollieren Sie nicht den Text des Prompts. Prompts enthalten personenbezogene Daten, und ein Protokoll lesen mehr Menschen als die Funktion selbst.
Das Gateway ist außerdem eine einzelne Fehlerquelle und ein zusätzlicher Schritt. Geben Sie ihm ein Zeitlimit, starten Sie mehrere Kopien und halten Sie seine Regeln klein.
Ein häufiger Fehler
Warnung
Viele glauben, ein Gateway mache Aufrufe sicher, weil es Schlüssel prüft. Es prüft, wer anruft, nicht, was gefragt wird. Ein gültiger Schlüssel kann trotzdem einen schädlichen Prompt senden. Limits und Protokolle begrenzen den Schaden; den Text beurteilen sie nicht.
Das Modell-Hilfsskript schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const basis = process.env.AI_URL || \"http://ai:4000\";' 'async function fragen(nachrichten, probe, max) {' ' try {' ' const res = await fetch(basis + \"/v1/chat/completions\", {' ' method: \"POST\",' ' headers: { \"content-type\": \"application/json\", authorization: \"Bearer lab\" },' ' body: JSON.stringify({ model: \"lab\", messages: nachrichten, max_tokens: max || 200 }),' ' signal: AbortSignal.timeout(30000),' ' });' ' if (res.ok === false) throw new Error(\"Status \" + res.status);' ' return (await res.json()).choices[0].message.content;' > model.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Modell-Hilfsskript schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' ' } catch (fehler) {' ' console.log(\"Aufgezeichnete Probe: Kein Modell hat geantwortet (\" + fehler.message + \").\");' ' const liste = [].concat(probe);' ' const runde = nachrichten.filter(function (m) { return m.role === \"assistant\"; }).length;' ' return liste[Math.min(runde, liste.length - 1)];' ' }' '}' 'module.exports = { fragen };' >> model.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Gateway schreiben, Teil 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const { fragen } = require(\"./model\");' 'const SCHLUESSEL = { \"schluessel-berlin\": \"berlin\", \"schluessel-koeln\": \"koeln\" }; // erfundene Schlüssel' 'const LIMIT = 2; // angenommene Anfragen pro Team' 'const zaehler = {};' 'const protokoll = [];' > gateway.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Gateway schreiben, Teil 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'function waehlen(anfrage) {' ' return anfrage.woerter > 300 ? \"grosses-modell\" : \"kleines-modell\";' '}' 'function gateway(anfrage) {' ' const team = SCHLUESSEL[anfrage.schluessel];' ' let status = \"ok\";' ' if (team === undefined) status = \"abgelehnt\";' ' else if ((zaehler[team] || 0) >= LIMIT) status = \"begrenzt\";' ' if (status === \"ok\") zaehler[team] = (zaehler[team] || 0) + 1;' ' const modell = status === \"ok\" ? waehlen(anfrage) : \"keines\";' ' protokoll.push({ id: anfrage.id, team: team || \"unbekannt\", status: status, modell: modell });' '}' >> gateway.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Gateway schreiben, Teil 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const anfragen = [' ' { id: 1, schluessel: \"schluessel-berlin\", woerter: 40 },' ' { id: 2, schluessel: \"schluessel-berlin\", woerter: 500 },' ' { id: 3, schluessel: \"schluessel-berlin\", woerter: 20 },' ' { id: 4, schluessel: \"schluessel-zzz\", woerter: 10 },' ' { id: 5, schluessel: \"schluessel-koeln\", woerter: 80 },' '];' 'anfragen.forEach(function (a) { gateway(a); });' 'protokoll.forEach(function (zeile) { console.log(zeile.id, zeile.team, zeile.status, zeile.modell); });' >> gateway.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Gateway schreiben, Teil 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'async function main() {' ' const probe = \"Ein Gateway hält Schlüssel, Limits und Protokoll an einem Ort.\";' ' const nachrichten = [{ role: \"user\", content: \"In einem kurzen Satz: Warum setzt man ein Gateway vor die Modellaufrufe?\" }];' ' console.log(\"Echter Aufruf für Anfrage 1:\", await fragen(nachrichten, probe, 40));' '}' 'main();' >> gateway.js"Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Das Gateway ausführen
docker exec -w /home/node/project agent node gateway.jsHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein Stellvertreter, kein echtes Gateway
Dieses Gateway ist eine Funktion über eine Liste. Das Labor hat kein Netz aus Diensten, also lebt das Limit in einer Variablen. Ein echtes Gateway ist ein Dienst mit gemeinsamem Speicher für seine Zähler, damit jede Kopie dieselben Zahlen sieht.
Hier übernimmt die Plattform schon diese Rolle: Sie fügt Ihr Token hinzu und wählt das Modell für den einen echten Aufruf.
Eine mögliche Ausgabe
| Zeile | Was sie zeigt |
|---|---|
| 1 berlin ok kleines-modell | Angenommen und an das kleine Modell geschickt |
| 3 berlin begrenzt keines | Abgelehnt, nichts geht an ein Modell |
| 4 unbekannt abgelehnt keines | Abgelehnt, das Team ist unbekannt |
| Echter Aufruf | Ein kurzer Satz von einem Modell oder eine gekennzeichnete aufgezeichnete Probe |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.