Executando Embeddings e Bancos de Dados Vetoriais localmente
Use esta página para executar o chatbot do curso extraído no seu computador. Aqui você instala dois pacotes faltantes, adapta as configurações de OpenAI e Supabase do chatbot para Vite e inicia o projeto no navegador com o banco de dados que você construiu durante o curso.
O que você precisa primeiro
Instale uma versão LTS suportada do Node.js. Node 24 é recomendado e inclui npm. Você também precisa de uma chave de API do OpenAI e de um projeto Supabase existente contendo os dados do curso.
Para o Supabase, use uma chave publicável ou a chave anon legada. Essas chaves são projetadas para aparecer em código do navegador: quem copiar uma delas só consegue fazer o que suas políticas de Row Level Security (regras de leitura por linha do Supabase) permitem. Nunca coloque uma chave secreta ou chave service_role neste projeto do navegador. Veja chaves de API do Supabase para os tipos de chave atuais.
A chave do OpenAI não tem equivalente em escopo: qualquer cópia dela pode fazer requisições cobradas na sua conta, então em produção nunca fica em código de cliente. Este setup de aprendizado a envia para o navegador mesmo assim; o aviso na seção de Vite explica os limites de fazer isso. O equivalente do lado do servidor deste setup, o projeto do Vercel AI SDK, usa o mesmo projeto Supabase mas com uma chave secreta. Uma chave secreta é aceitável lá porque aquele projeto roda em um servidor, então suas chaves nunca chegam a um navegador.
anon, do tipo projetado para navegadores, nunca um segredo de servidor. Já usei o tipo de chave errado uma vez e passei uma noite aprendendo a diferença entre eles! Abra a pasta do projeto
Abra um terminal na pasta do chatbot extraída que contém package.json:
$ cd path-to-your-downloaded-projectPara confirmar que tem o download certo, abra package.json: a exportação do chatbot declara Vite e a fonte ao lado dela inclui os arquivos config.js e index.js que as próximas seções editam. Estas instruções se encaixam no chatbot completo, cujo código importa tanto openai quanto @supabase/supabase-js; o nome da pasta sozinho não o distingue da exportação de uma lição anterior.
package.json; toda instalação e cada arquivo nesta página pertence lá. Se o terminal está em qualquer outro lugar, os comandos rodão na pasta errada e nada depois disso funciona. Eu verifico a listagem da pasta por package.json antes de digitar qualquer coisa, um hábito que construí depois de cometer esse erro várias vezes. package.json no topo, Vite declarado dentro dele e config.js e index.js ao lado. Trinta segundos de verificação aqui custam menos que consertar os arquivos de um projeto diferente. Todo comando nesta página assume que você está nesta pasta. Prepare o projeto para Vite
Instale a dependência Vite declarada, então os dois pacotes que a fonte importa mas o package.json baixado não declara:
$ npm install
$ npm install openai @supabase/supabase-jsAbra config.js e substitua cada leitura de ambiente de Scrimba. Mantenha os imports, exports e validação existentes, mas substitua três nomes de ambiente em quatro ocorrências; OPENAI_API_KEY aparece duas vezes:
process.env.OPENAI_API_KEY
import.meta.env.VITE_OPENAI_API_KEY
process.env.SUPABASE_API_KEY
import.meta.env.VITE_SUPABASE_API_KEY
process.env.SUPABASE_URL
import.meta.env.VITE_SUPABASE_URLAs duas leituras de OPENAI_API_KEY ficam na verificação de validação e no cliente OpenAI, então mude ambas.
Abra index.js e mude o modelo de chat de gpt-4 para gpt-4o-mini. Deixe o modelo de embedding text-embedding-ada-002 fornecido inalterado enquanto segue o curso. Os vetores existentes no banco de dados do curso devem ter as mesmas dimensões que os embeddings de query; mudar esse modelo é uma migração de banco de dados separada, não parte da configuração local.
Crie .env ao lado de package.json:
VITE_OPENAI_API_KEY=your-openai-api-key
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_API_KEY=your-publishable-or-anon-keyTambém crie .gitignore:
.env
node_modules/Enviar .env para um repositório Git é a forma mais comum de uma chave vazar; ignorando arquivos e bons hábitos cobre o hábito em detalhes.
Essas credenciais são visíveis no navegador
Vite copia valores VITE_ para o bundle do frontend. Use credenciais de aprendizado restritas, ative Row Level Security no Supabase e nunca publique esta versão. Um app em produção deve mover a requisição do OpenAI para um backend.
.env com uma chave Supabase segura para navegador. Depois mantenha .env fora do Git. Já publiquei uma chave com meu primeiro projeto e passei a noite a substituí-la, então essa ordem é escrita a partir de experiência. .env e .gitignore finaliza o conserto. VITE_ são o que coloca os valores no bundle, que também entrega a chave do OpenAI para código de navegador. Isso é aceitável para uma lição e desqualificador para produção, então mova a chamada do OpenAI atrás de um backend antes de usuários reais chegarem a este chatbot. Já vi um projeto pular esse passo e terminou com uma chave revogada e uma fatura inesperada. Execute o projeto
$ npm startAbra a URL Local impressa por Vite e faça ao chatbot uma pergunta coberta pelos dados do curso. Uma resposta útil mostra que a página, a recuperação do Supabase e a requisição do OpenAI estão todos funcionando. Reinicie o comando depois de mudar .env e pare-o com Ctrl+C.
npm start, abra a URL Local e faça ao chatbot uma pergunta que os dados do curso cobrem. Se mudar .env, reinicie o comando para que Vite leia os novos valores, e pressione Ctrl+C quando terminar. Esquecer esse reinício uma vez me confundiu por uma tarde inteira, então espero que esta nota economize uma para você. .env. Solução de problemas
Failed to resolve import "openai" ou "@supabase/supabase-js": Execute ambos os comandos de instalação mostrados anteriormente nesta página e execute-os na pasta que contém package.json.
process is not defined: Uma referência process.env permanece em config.js. Substitua-a pelo valor import.meta.env.VITE_... correspondente.
Supabase não retorna linhas ou um erro de permissões: Confirme a URL do projeto, use uma chave publicável ou anon e verifique se a tabela do curso e as políticas de Row Level Security existem no mesmo projeto.
OpenAI rejeita o modelo ou chave: Confirme cobrança e acesso de chave na conta OpenAI. Use um modelo atual disponível para esse projeto.

