Porque não chamamos a IA diretamente do browser
Os serviços de IA (OpenAI, Anthropic e outros) exigem uma chave API – um código secreto que te identifica e serve para faturação. E aqui está o problema:
Tudo o que pões em JavaScript no browser pode ser lido por qualquer pessoa (F12 → código fonte). Se a tua chave estivesse lá, qualquer pessoa podia chamar a IA com o teu dinheiro.
Já conheces a solução do Mestre: o teu próprio servidor. A chave fica no servidor e o browser só fala com o teu servidor:
Browser → your server (the key is here!) → AI service
Browser ← your server ← AI service
Vou mostrar-te: o endpoint /zeptat-se
Vamos construir sobre o servidor Express do Mestre. Guardamos a chave num ficheiro .env (isto nunca vai para o GitHub – adiciona ao .gitignore!):
AI_KLIC=sk-your-secret-key-here
E o servidor ganha um endpoint novo:
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 que é novo aqui:
fetchtambém pode enviar dados:method: 'POST'ebody.- Os
headerscomAuthorization– é aí que a chave é apresentada. role: 'system'– é o teu prompt da última lição! Define como a IA se comporta.process.env.AI_KLIC– a chave lê-se do.env, não está escrita no código.
Onde arranjo uma chave? Os serviços de IA emitem chaves API após registo – e é normalmente pago (mas barato, só cêntimos por resposta). Isto é trabalho para um pai: pede-lhe para criar uma chave e adicionar um pequeno crédito (uns poucos euros chegam). Sem chave, podes testar com uma resposta inventada – vê «Agora és tu» abaixo.
Agora és tu 💪
- Adiciona a linha
.envao.gitignore– verifica com o comandogit status(o ficheiro.envnão deve aparecer). - Cria o endpoint
/zeptat-seseguindo o exemplo. - Não tens chave? Sem problema – devolve uma resposta de teste por agora e continua para a próxima lição:
app.post('/zeptat-se', (req, res) => {
res.json({ text: `Test answer to: "${req.body.otazka}"` });
});
- Experimenta o endpoint no browser (consola 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());
Verifica: O servidor responde a POST /zeptat-se (com resposta de teste ou IA real), e a chave secreta não está no código nem no GitHub.
O que ficas a saber desta lição
- Chaves secretas pertencem ao servidor no
.env, nunca no browser nem no Git. fetchpode fazer POST – envia dados embodye a chave emheaders.- O prompt de sistema molda a personalidade do teu assistente de IA.
© 2026 Ing. Martin Polak / AlgoRhino · Condições de uso do conteúdo