Warum wir AI nicht direkt aus dem Browser aufrufen
AI-Dienste (OpenAI, Anthropic und andere) verlangen einen API-Schlüssel – einen Geheimcode, der dich identifiziert und für die Abrechnung genutzt wird. Und hier ist der Haken:
Alles, was du in JavaScript im Browser einbaust, kann jeder lesen (F12 → Quellcode). Wäre dein Schlüssel dort, könnte jeder die AI auf deine Kosten nutzen.
Die Lösung kennst du schon aus dem Meister: dein eigener Server. Der Schlüssel bleibt auf dem Server, und der Browser spricht nur mit deinem Server:
Browser → your server (the key is here!) → AI service
Browser ← your server ← AI service
Zeig mir das: der /zeptat-se-Endpunkt
Wir bauen auf dem Express-Server aus dem Meister auf. Den Schlüssel speichern wir in einer .env-Datei (die kommt niemals auf GitHub – füge sie zu .gitignore hinzu!):
AI_KLIC=sk-your-secret-key-here
Und der Server bekommt einen neuen Endpunkt:
require('dotenv').config();
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.static('public'));
app.post('/zeptat-se', async (req, res) => {
const { otazka } = req.body;
const odpoved = await fetch('https://api.openai.com/v1/chat/completions', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AI_KLIC}`,
},
body: JSON.stringify({
model: 'gpt-4o-mini',
messages: [
{ role: 'system', content: 'You are a friendly helper. Answer briefly in English.' },
{ role: 'user', content: otazka },
],
}),
});
const data = await odpoved.json();
res.json({ text: data.choices[0].message.content });
});
app.listen(3000, () => console.log('Server running at http://localhost:3000'));
Was hier neu ist:
fetchkann auch Daten senden:method: 'POST'undbody.- Die
headersmitAuthorization– dort wird der Schlüssel vorgelegt. role: 'system'– das ist dein Prompt aus der letzten Lektion! Er definiert, wie sich die AI verhält.process.env.AI_KLIC– der Schlüssel wird aus.envgelesen, nicht im Code geschrieben.
Woher bekomme ich einen Schlüssel? AI-Dienste stellen API-Schlüssel nach der Registrierung aus – und das ist meist kostenpflichtig (aber günstig, nur Cent pro Antwort). Das ist eine Aufgabe für die Eltern: Bitte sie, einen Schlüssel für dich anzulegen und etwas Guthaben hinzuzufügen (ein paar Euro reichen). Ohne Schlüssel kannst du trotzdem mit einer erfundenen Antwort testen – siehe „Jetzt du“ unten.
Jetzt du 💪
- Füge eine Zeile
.envzu.gitignorehinzu – prüfe es mit dem Befehlgit status(die.env-Datei darf nicht erscheinen). - Erstelle den
/zeptat-se-Endpunkt nach dem Beispiel. - Kein Schlüssel? Kein Problem – gib vorerst eine Testantwort zurück und mach mit der nächsten Lektion weiter:
app.post('/zeptat-se', (req, res) => {
res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
- Probiere den Endpunkt im Browser aus (F12-Konsole):
const r = await fetch('/zeptat-se', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ otazka: 'Hi, who are you?' }),
});
console.log(await r.json());
Check: Der Server antwortet auf POST /zeptat-se (mit einer Test- oder echten AI-Antwort), und der geheime Schlüssel steht weder im Code noch auf GitHub.
Das nimmst du aus dieser Lektion mit
- Geheime Schlüssel gehören auf den Server in
.env, niemals in den Browser oder in Git. fetchkann POST – es sendet Daten imbodyund den Schlüssel inheaders.- Der System-Prompt formt die Persönlichkeit deiner AI-Helferin.
© 2026 Ing. Martin Polak / AlgoRhino · Nutzungsbedingungen für Inhalte