Perché non chiamiamo l’AI direttamente dal browser
I servizi AI (OpenAI, Anthropic e altri) richiedono una chiave API – un codice segreto che ti identifica e serve per la fatturazione. E c’è il trucco:
Tutto ciò che metti in JavaScript nel browser può essere letto da chiunque (F12 → codice sorgente). Se la tua chiave fosse lì, chiunque potrebbe chiamare l’AI con i tuoi soldi.
Conosci già la soluzione dal Maestro: il tuo server. La chiave resta sul server, e il browser parla solo col tuo server:
Browser → your server (the key is here!) → AI service
Browser ← your server ← AI service
Te lo mostro: l’endpoint /zeptat-se
Costruiremo sul server Express del Maestro. Salveremo la chiave in un file .env (questo non va mai su GitHub – aggiungilo a .gitignore!):
AI_KLIC=sk-your-secret-key-here
E il server riceve un nuovo 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'));
Cosa c’è di nuovo:
fetchpuò anche inviare dati:method: 'POST'ebody.- Gli
headersconAuthorization– è lì che viene presentata la chiave. role: 'system'– è il tuo prompt dell’ultima lezione! Definisce come si comporta l’AI.process.env.AI_KLIC– la chiave viene letta da.env, non scritta nel codice.
Dove trovo una chiave? I servizi AI rilasciano chiavi API dopo la registrazione – ed è di solito a pagamento (ma economico, pochi centesimi per risposta). È un lavoro per un genitore: chiedigli di creare una chiave per te e aggiungere un piccolo credito (pochi dollari bastano). Senza chiave, puoi comunque testare con una risposta finta – vedi “Ora tocca a te” sotto.
Ora tocca a te 💪
- Aggiungi una riga
.enva.gitignore– controlla con il comandogit status(il file.envnon deve comparire). - Crea l’endpoint
/zeptat-seseguendo l’esempio. - Non hai una chiave? Nessun problema – restituisci per ora una risposta di test e continua alla prossima lezione:
app.post('/zeptat-se', (req, res) => {
res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
- Prova l’endpoint dal browser (console 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());
Controllo: Il server risponde a POST /zeptat-se (con risposta di test o AI vera), e la chiave segreta non è né nel codice né su GitHub.
Cosa porti via da questa lezione
- Le chiavi segrete stanno sul server in
.env, mai nel browser o su Git. fetchpuò fare POST – invia dati inbody, e la chiave inheaders.- Il system prompt modella la personalità del tuo aiutante AI.
© 2026 Ing. Martin Polak / AlgoRhino · Condizioni d'uso dei contenuti