Prečo nevoláme AI priamo z prehliadača
AI služby (OpenAI, Anthropic a ďalšie) vyžadujú API kľúč – tajný kód, ktorý ťa identifikuje a slúži na fakturáciu. A tu je háčik:
Všetko, čo dáš do JavaScriptu v prehliadači, môže prečítať ktokoľvek (F12 → zdrojový kód). Keby tam bol tvoj kľúč, ktokoľvek by mohol volať AI za tvoje peniaze.
Riešenie už poznáš z Majstra: vlastný server. Kľúč zostane na serveri a prehliadač rozpráva len s tvojím serverom:
Browser → your server (the key is here!) → AI service
Browser ← your server ← AI service
Ukážem ti: endpoint /zeptat-se
Postavíme na Express serveri z Majstra. Kľúč uložíme do súboru .env (ten nikdy na GitHub – pridaj do .gitignore!):
AI_KLIC=sk-your-secret-key-here
A server dostane nový endpoint:
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'));
Čo je tu nové:
fetchvie aj posielať dáta:method: 'POST'abody.headerssAuthorization– tam sa predkladá kľúč.role: 'system'– to je tvoj prompt z minulej lekcie! Definuje, ako sa AI správa.process.env.AI_KLIC– kľúč sa číta z.env, nie z kódu.
Odkiaľ zobrať kľúč? AI služby vydávajú API kľúče po registrácii – a zvyčajne je to platené (lacné, len centy za odpoveď). Toto je úloha pre rodiča: nech ti vytvorí kľúč a pridá malý kredit (pár dolárov stačí). Bez kľúča môžeš testovať s vymyslenou odpoveďou – pozri „Teraz ty” nižšie.
Teraz ty 💪
- Pridaj riadok
.envdo.gitignore– over príkazomgit status(súbor.envsa nesmie zobraziť). - Vytvor endpoint
/zeptat-sepodľa príkladu. - Nemáš kľúč? Nevadí – zatiaľ vráť testovaciu odpoveď a pokračuj do ďalšej lekcie:
app.post('/zeptat-se', (req, res) => {
res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
- Vyskúšaj endpoint z prehliadača (konzola F12):
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());
Skontroluj sa: Server odpovedá na POST /zeptat-se (testovou alebo skutočnou AI odpoveďou) a tajný kľúč nie je ani v kóde, ani na GitHube.
Čo si z tejto lekcie odnášaš
- Tajné kľúče patria na server do
.env, nikdy do prehliadača ani do Gitu. fetchvie POST – posiela dáta vbodya kľúč vheaders.- System prompt formuje osobnosť tvojho AI pomocníka.
© 2026 Ing. Martin Polak / AlgoRhino · Podmienky používania obsahu