Skip to content
This page has been auto-translated and may contain errors.View in English

Executando Intro to AI Engineering localmente ​

Use esta página para executar o projeto Gift Genie extraído do Intro to AI Engineering em seu computador com seu próprio provedor de IA. O projeto vem em duas formas: um app Vite somente navegador nas aulas antes da migração de backend, e um app Express e Vite a partir da migração de backend em diante. Uma linha em package.json diz qual você tem; a instalação e o arquivo .env são os mesmos para ambos, e o início difere.

O que você precisa primeiro ​

Instale uma versão LTS suportada do Node.js. Node 24 é recomendado e inclui npm.

Verifique se ambos os comandos funcionam. Seus números de versão podem ser diferentes:

bash
$ node --version
v24.18.0
$ npm --version
11.18.0

Você também precisa dos três valores que definiu nas variáveis de ambiente do Scrimba durante o curso: a URL do seu provedor, sua chave de API e o ID do modelo. Se não tiver mais a chave, crie uma nova no mesmo provedor.

JunoO que você precisa primeiro Instale a versão LTS do Node.js, que inclui npm, e verifique se node --version e npm --version imprimem uma versão.

Depois tenha pronto a URL do seu provedor, sua chave de API e seu ID de modelo. Você colará todos os três em um arquivo em poucos minutos.

JunoO que você precisa primeiro Os três valores funcionam como um conjunto: a URL escolhe o provedor, a chave prova quem você é para esse provedor, e o ID do modelo nomeiam um de seus modelos. Uma chave de um provedor enviada para a URL de outro provedor é rejeitada.
JunoO que você precisa primeiro Ambas as formas do projeto usam Vite 7.3, que precisa de Node 20.19 ou 22.12 e mais novos. Node 20 atingiu fim de vida, então na prática significa Node 22.12 ou um LTS mais novo.

Descubra qual projeto você tem ​

Abra package.json na pasta extraída e encontre a linha start. Se disser apenas vite, você tem o projeto somente navegador:

json
"start": "vite"

Se disser concurrently, com um script server abaixo dele, você tem o projeto com backend. Sua pasta também contém server.js:

json
"start": "concurrently \"npm run client\" \"npm run server\" ",
"server": "node --watch server.js",
JunoDescubra qual projeto você tem Abra package.json e leia a linha start. Se disser vite e nada mais, você tem o projeto somente navegador. Se disser concurrently, você tem o projeto com backend.

Lembre-se qual é: as últimas duas seções cobrem uma cada.

JunoDescubra qual projeto você tem O script start é o que executa quando você digita npm start. O projeto somente navegador executa Vite sozinho; o projeto com backend executa Vite e um servidor Express lado a lado a partir de um único comando.
JunoDescubra qual projeto você temconcurrently inicia npm run client e npm run server como dois processos filhos e prefixam sua saída com [0] e [1], para que as linhas do Vite e do Express compartilhem um terminal.

Instale os pacotes ​

Abra um terminal na pasta extraída, aquela que contém package.json. Todos os comandos nesta página são executados a partir daí:

bash
$ cd path-to-your-extracted-project

Instale os pacotes que o projeto lista. Isto é o mesmo para ambas as formas:

bash
$ npm install

npm termina relatando quantos pacotes adicionou. Também pode relatar vulnerabilidades, ou avisos allow-scripts sobre esbuild e fsevents. Nenhum impede que o projeto execute.

JunoInstale os pacotes Execute npm install na pasta com package.json. Termina dizendo quantos pacotes foram adicionados.

Se npm disser que não consegue encontrar package.json, você está na pasta errada.

JunoInstale os pacotes O download inclui package-lock.json, então npm instala as mesmas versões de pacotes que o curso usou. A contagem de vulnerabilidades descreve essas versões; não é um sinal de que a instalação falhou.
JunoInstale os pacotes Versões mais novas do npm listam pacotes cujos scripts de instalação não foram aprovados. Vite ainda inicia sem aprová-los aqui, porque o binário do esbuild chega como um pacote de plataforma em vez de através desse script.

Adicione seus valores a .env ​

No Scrimba, o editor preenche suas três variáveis de ambiente para você. Em seu computador, elas vêm de um arquivo. Crie .env ao lado de package.json e coloque seus valores nele sob exatamente estes nomes:

dotenv
AI_URL=https://api.openai.com/v1
AI_KEY=your-key-here
AI_MODEL=your-model-id

Este exemplo usa a URL do OpenAI. Se você usou outro provedor durante o curso, como Groq ou OpenRouter, use sua URL. O ID do modelo deve ser um que esse provedor oferece.

Crie .gitignore ao lado de package.json e adicione:

txt
.env
node_modules/

Uma chave que chega a um repositório Git permanece em seu histórico mesmo depois de você deletar o arquivo. O manual do Git cobre esse hábito em ignorando arquivos e boas práticas.

Nunca faça commit de sua chave de API

.env contém uma chave funcional. Não a carregue, cole a chave em seu código, ou faça commit do arquivo. Se uma chave for exposta, delete-a em seu provedor e crie uma nova.

JunoAdicione seus valores a .env Crie um arquivo chamado .env ao lado de package.json com seus três valores, um por linha, depois liste .env em .gitignore para que Git nunca o salve.
JunoAdicione seus valores a .env Ambos os projetos observam .env enquanto executam. Salve-o e Vite imprime .env changed, restarting server...; no projeto com backend o servidor também imprime Restarting 'server.js'. Recarregue a página e os novos valores estão em uso.
JunoAdicione seus valores a .env As duas formas leem o mesmo arquivo em lugares diferentes. O vite.config.js do projeto somente navegador o carrega com loadEnv; o projeto com backend o carrega em Node com um flag que você adiciona em sua própria seção. A config Vite do backend ainda lê .env, mas nunca coloca a chave na página.

Execute o projeto somente navegador ​

Esta versão coloca sua chave no navegador

Essas aulas chamam o provedor de IA direto da página, então Vite escreve AI_KEY no código que envia para o navegador, e qualquer pessoa que abra a página pode lê-lo. Use uma chave que você deletará quando terminar, mantenha esta versão em seu próprio computador, e nunca implante ou compartilhe. A migração de backend mais adiante no curso move a chave para um servidor.

Inicie o projeto:

bash
$ npm start

Vite imprime o endereço para abrir:

text
  VITE v7.3.0  ready in 176 ms

  ➜  Local:   http://localhost:5173/

Abra o endereço Local exato. Se a porta 5173 estiver ocupada, Vite escolhe a próxima e imprime aquela.

Nas primeiras aulas, como Setting Up Your AI Client, a página está em branco propositalmente: o trabalho acontece no console do navegador. Abra as ferramentas de desenvolvedor do seu navegador (F12, ou Cmd+Option+J no Chrome em um Mac) e leia a aba Console. Deve mostrar seus valores:

text
AI provider URL: https://api.openai.com/v1
AI model: your-model-id

Aulas que constroem a página Gift Genie mostram essa página. Pare o projeto com Ctrl+C.

JunoExecute o projeto somente navegador Execute npm start e abra o endereço Local. Se a página estiver em branco, abra o Console: as duas linhas com sua URL de provedor e modelo significam que .env foi lido.

Um Missing AI_URL vermelho lá significa que não foi.

JunoExecute o projeto somente navegadorutils.js verifica os três valores assim que a página carrega e lança na primeira que está faltando. As linhas do console são essa verificação passando; ainda não dizem nada sobre se o provedor aceita a chave.
JunoExecute o projeto somente navegadorvite.config.js usa define para substituir cada process.env.AI_KEY, AI_URL e AI_MODEL em seu código pelo valor de .env enquanto serve a página. Essa substituição é como a chave acaba em todo navegador que a carrega.

Execute o projeto com backend ​

No Scrimba, o servidor obteve suas variáveis de ambiente automaticamente. Em seu computador, Node lê .env apenas quando você diz, e o script de servidor no download não. Então faça uma alteração em package.json antes de iniciar. Altere o script server de:

json
"server": "node --watch server.js",

para:

json
"server": "node --env-file=.env --watch server.js",

Então inicie ambas as partes do app:

bash
$ npm start

As linhas [1] vêm do servidor Express e as linhas [0] do Vite:

text
[1] Server running at http://localhost:3001
[0]
[0]   VITE v7.3.1  ready in 1526 ms
[0]
[0]   ➜  Local:   http://localhost:5173/

Abra o endereço Local do Vite, não a porta 3001: o servidor responde apenas as requisições /api do app, então a porta 3001 sozinha mostra Cannot GET /. Digite para quem é o presente e clique Rub the Lamp. O botão muda para Summoning Gift Ideas..., e alguns segundos depois ideias de presentes aparecem abaixo dele. Isso significa que sua chave, URL e modelo funcionam.

Se a página diz Sorry, I can't access what I need right now, o motivo está no terminal, em uma linha [1] do servidor. A solução de problemas abaixo corresponde cada mensagem.

Pare ambas as partes com um Ctrl+C. Quando você salva .env enquanto o app executa, ambas as partes reiniciam sozinhas e usam os novos valores.

O projeto de Implantação precisa da mesma alteração --env-file para seu servidor.

JunoExecute o projeto com backend Adicione --env-file=.env ao script server, execute npm start, e abra o endereço Local do Vite. Clique Rub the Lamp e espere pelas ideias de presentes.

Se a página pedir desculpas, leia as linhas [1] mais novas no terminal.

JunoExecute o projeto com backend A página envia sua requisição para /api/gift no endereço do Vite. Vite encaminha toda requisição /api para Express na porta 3001, e Express chama o provedor com a chave que leu de .env. O navegador nunca vê a chave.
JunoExecute o projeto com backend O alvo do proxy em vite.config.js é fixo em http://localhost:3001, enquanto server.js escuta em PORT ou 3001. Deixe PORT fora de .env e os dois concordam, a menos que seu terminal já defina PORT, que ganha sobre .env. Sempre que o servidor aterrissa em outra porta, o alvo do proxy deve mudar para corresponder.

Solução de problemas ​

Somente navegador: uma página em branco, e o console diz Missing AI_URL, Missing AI_MODEL ou Missing AI_KEY: Vite não encontrou esse valor. Verifique se .env está ao lado de package.json e se os nomes estão soletrados exatamente como acima, depois salve. Vite reinicia sozinho (.env changed, restarting server...); recarregue a página.

Backend: o terminal diz Missing credentials, depois Failed running 'server.js': O servidor iniciou sem seu .env. Verifique se o script server contém --env-file=.env e se .env soletra AI_KEY exatamente, depois pare o projeto com Ctrl+C e execute npm start novamente.

Backend: o terminal diz node: .env: not found: O flag está no lugar, mas não há .env ao lado de package.json. Crie lá, ou verifique se seu editor não o salvou como .env.txt. O servidor já parou, então pare o projeto com Ctrl+C e execute npm start novamente.

Backend: a página diz Sorry, I can't access what I need right now, e o terminal mostra 401 com Incorrect API key provided: A requisição chegou ao seu provedor, que não aceitou a chave. Copie a chave novamente, e verifique se a URL em AI_URL pertence ao mesmo provedor.

Seu provedor diz que o modelo não existe ou não está disponível: A mensagem mostra em uma linha [1] no terminal para o projeto com backend, ou no console do navegador para uma aula somente navegador que envia uma requisição. Copie o ID do modelo novamente exatamente como seu provedor lista, e verifique que pertence ao provedor em AI_URL.

Backend: o terminal mostra http proxy error: /api/gift com ECONNREFUSED: Vite não consegue alcançar Express na porta 3001. Role para cima até as primeiras linhas [1]. Se mostrarem um erro, o servidor parou lá, geralmente por um dos motivos acima. Se disserem Server running at uma porta diferente de 3001, seu terminal já define PORT, que ganha sobre .env: mude o alvo do proxy em vite.config.js para essa porta.

Backend: EADDRINUSE menciona a porta 3001: Outro programa está usando a porta do servidor. Pare-o, ou defina PORT em .env e mude o alvo do proxy em vite.config.js para a mesma porta.

npm start diz concurrently: command not found ou vite: command not found: Os pacotes não estão instalados nesta pasta. Execute npm install na pasta que contém package.json.

JunoSolução de problemas Encontre o primeiro erro e combine com um título em negrito acima. No projeto somente navegador, procure no Console do navegador; no projeto com backend, procure no terminal.
JunoSolução de problemas Mantenha três problemas separados: .env não sendo lido, um processo não executando, e o provedor rejeitando a chave ou modelo. Falham nessa ordem, e os dois primeiros nunca chegam ao provedor.
JunoSolução de problemas Um 401 significa que toda a cadeia funcionou até o provedor: a página, o proxy, Express e --env-file. Um erro de credenciais faltando vem do construtor do cliente OpenAI, então o servidor para antes de escutar em qualquer porta.