← Úroveň 5 – Vynálezca

Lekcia 6 z 8 ⏱ 40 minút Prémiové

AI na serveri

Postav serverový endpoint, ktorý rozpráva s AI – a skryje tvoj tajný kľúč pred svetom.

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é:

💡

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 💪

  1. Pridaj riadok .env do .gitignore – over príkazom git status (súbor .env sa nesmie zobraziť).
  2. Vytvor endpoint /zeptat-se podľa príkladu.
  3. 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}"` });
});
  1. 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š