Executando o curso do Vercel AI SDK localmente
Use esta página para executar o agente de atendimento ao cliente extraído no seu computador. Você conecta seu servidor Express ao OpenAI e aos dados do Supabase criados durante o curso, depois faz uma alteração no script de inicialização para que o Node carregue esses valores a partir de .env. O guia Embeddings e Vector Databases executa um projeto relacionado contra o mesmo tipo de configuração de vetores do Supabase.
O que você precisa antes
Instale uma versão LTS suportada do Node.js. A versão Node 24 é recomendada. Você também precisa:
- uma chave de API OpenAI com acesso de cobrança e modelos;
- o projeto Supabase e os dados criados durante o curso;
- uma chave de secret do Supabase ou a chave herdada
service_role.
As chaves de secret e service_role contornam a Row Level Security. Elas devem estar apenas no .env do lado do servidor, nunca em código do navegador. Consulte Chaves de API do Supabase.
Abra e instale o projeto
Abra um terminal na pasta extraída contendo package.json, depois instale os pacotes bloqueados:
$ cd path-to-your-downloaded-project
$ npm cinpm ci na pasta extraída, aquela que contém package.json. Ele instala exatamente as versões de pacotes com as quais o curso foi construído, então não há nada a configurar ou adivinhar aqui. Faça o Node carregar .env
Abra package.json e altere o script de inicialização de:
"start": "node server.js"para:
"start": "node --env-file=.env server.js"O código usa o nome de variável herdado SUPABASE_SERVICE_ROLE_KEY. Você pode colocar uma chave de secret do Supabase atual nessa variável sem renomear o código.
Crie .env ao lado de package.json:
OPENAI_API_KEY=your-openai-api-key
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=your-server-side-secret-key
PORT=3000Crie .gitignore:
.env
node_modules/O handbook do Git cobre esse hábito em ignorando arquivos e boas práticas.
Mantenha a chave do Supabase no servidor
Nunca renomeie a chave de serviço com um prefixo VITE_ ou a mova para client.js. Ela tem acesso elevado ao banco de dados. Não faça commit de .env nem o compartilhe em um ZIP.
--env-file=.env ao script de inicialização, crie o arquivo com todos os quatro valores e mantenha-o fora do Git. A chave do Supabase fica no servidor, sempre. Um .gitignore com .env nele é o primeiro arquivo que crio em qualquer projeto, tendo aprendido isso da maneira difícil. Mantenha os modelos fornecidos
O constants.js baixado usa gpt-4o para geração e classificação de respostas e text-embedding-3-small para embeddings. A configuração local não requer alterar nenhum dos dois modelos. Mantenha-os inalterados a menos que o OpenAI rejeite um para seu projeto. Se você substituir um modelo mais tarde, teste o fluxo completo do agente e confirme que os novos embeddings de consulta permanecem compatíveis com os vetores armazenados no Supabase. Uma troca de embedding pode falhar silenciosamente: um modelo com a mesma contagem de dimensões mas um espaço vetorial diferente retorna correspondências ruins sem erro, então regenere os vetores armazenados depois de alterar o modelo de embedding.
Execute o agente
$ npm startAbra http://localhost:3000 ou use a porta que você definiu em .env. Interrompa o servidor com Ctrl+C.
O carregamento da página mostra que o servidor local está executando. Faça uma pergunta coberta pelos dados do curso: uma resposta útil mostra que a recuperação do Supabase e a geração do OpenAI também estão funcionando. Se uma resposta falhar, o terminal do servidor imprime a primeira chamada que falha na cadeia: embedding, recuperação ou geração. O capítulo RAG explica por que o agente fundamenta suas respostas em dados de curso recuperados em primeiro lugar.
npm start e abra o endereço local no seu navegador. O carregamento da página prova que o servidor roda; uma resposta completa também precisa do OpenAI e dos dados do Supabase do curso, então trate como duas conquistas separadas. Solução de problemas
Missing OPENAI_API_KEY: Confirme que o script de inicialização inclui --env-file=.env, que .env está ao lado de package.json e que o nome da variável corresponde exatamente.
Erro de autenticação ou relação do Supabase: Confirme que a URL e a chave do lado do servidor pertencem ao mesmo projeto, depois conclua as etapas de schema e dados do curso. Não substitua uma chave publicável por essa operação do servidor.
A porta 3000 já está em uso: Altere PORT em .env, reinicie o servidor e abra a nova porta.
A página carrega mas as respostas falham: Verifique o terminal do servidor para o primeiro erro do provedor ou banco de dados. O startup local sozinho não valida nenhum serviço externo.
.env, um erro do Supabase aponta para o projeto ou seus dados, e uma página carregada com respostas que falham aponta para um serviço externo. Corresponda o sintoma à camada primeiro, e a correção geralmente nomeia a si mesma. 
