← Poziom 5 – Wynalazca

Lekce 6 z 8 ⏱ 40 minut Premium

AI na serveru

Postavíš serverový endpoint, který mluví s AI – a schová tvůj tajný klíč před světem.

Proč AI nevoláme přímo z prohlížeče

AI služby (OpenAI, Anthropic a další) vyžadují API klíč – tajný kód, kterým se prokazuješ a podle kterého se platí. A tady je háček:

Cokoli dáš do JavaScriptu v prohlížeči, si může kdokoli přečíst (F12 → zdrojový kód). Kdyby tam byl tvůj klíč, kdokoli by za tvoje peníze mohl volat AI.

Řešení znáš z Mistrza: vlastní server. Klíč zůstane na serveru, prohlížeč mluví jen s tvým serverem:

Prohlížeč  →  tvůj server (klíč je tady!)  →  AI služba
Prohlížeč  ←  tvůj server                  ←  AI služba

Pokaż mi to: endpoint /zeptat-se

Navážeme na Express server z Mistrza. Klíč uložíme do souboru .env (ten se nikdy nedává na GitHub – přidej ho do .gitignore!):

AI_KLIC=sk-tady-je-tvuj-tajny-klic

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: 'Jsi přátelský pomocník. Odpovídej česky a stručně.' },
        { role: 'user', content: otazka },
      ],
    }),
  });

  const data = await odpoved.json();
  res.json({ text: data.choices[0].message.content });
});

app.listen(3000, () => console.log('Server běží na http://localhost:3000'));

Co je tu nového:

💡

Kde vzít klíč? API klíč vydávají AI služby po registraci – a bývá placený (i když levně, haléře za odpověď). Tohle je úkol pro rodiče: požádej je, ať ti klíč založí a dobijí malý kredit (stačí pár dolarů). Bez klíče můžeš zatím testovat s vymyšlenou odpovědí – viz „Teraz ty”.

Teraz ty 💪

  1. Přidej do .gitignore řádek .env – ověř si to příkazem git status (soubor .env nesmí být vidět).
  2. Vytvoř endpoint /zeptat-se podle vzoru.
  3. Nemáš klíč? Nevadí – vrať zatím testovací odpověď a pokračuj do další lekce:
app.post('/zeptat-se', (req, res) => {
  res.json({ text: `Testovací odpověď na: „${req.body.otazka}"` });
});
  1. Vyzkoušej endpoint z prohlížeče (konzole F12):
const r = await fetch('/zeptat-se', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ otazka: 'Ahoj, kdo jsi?' }),
});
console.log(await r.json());

Kontrola: Server odpovídá na POST /zeptat-se (testovací nebo skutečnou AI odpovědí) a tajný klíč není v kódu ani na GitHubu.

Co si z téhle lekce odnést