Ejecutar embeddings y bases de datos vectoriales en tu máquina
Usa esta página para ejecutar el chatbot del curso que extrajiste en tu computadora. Aquí instalas dos paquetes faltantes, adaptas la configuración de OpenAI y Supabase del chatbot para Vite, e inicias el proyecto del navegador con la base de datos que construiste durante el curso.
Lo que necesitas primero
Instala una versión LTS soportada de Node.js. Se recomienda Node 24 e incluye npm. También necesitas una clave de API de OpenAI y un proyecto de Supabase existente que contenga los datos del curso.
Para Supabase, usa una clave publicable o la clave anon heredada. Estas claves están diseñadas para aparecer en código del navegador: cualquiera que copie una solo puede hacer lo que tus políticas de Row Level Security (reglas de lectura por fila de Supabase) permitan. Nunca pongas una clave secreta o una clave service_role en este proyecto del navegador. Consulta Claves de API de Supabase para los tipos de clave actuales.
La clave de OpenAI no tiene un alcance equivalente: cualquier copia de ella puede hacer solicitudes facturadas a tu cuenta, así que en producción nunca pertenece en código cliente. Esta configuración de aprendizaje la envía al navegador de todas formas; la advertencia en la sección de Vite explica los límites de hacerlo. El equivalente del lado del servidor de esta configuración, el proyecto del SDK de Vercel AI, usa el mismo proyecto de Supabase pero con una clave secreta. Una clave secreta es aceptable allí porque ese proyecto se ejecuta en un servidor, así que sus claves nunca llegan a un navegador.
anon, el tipo diseñado para navegadores, nunca un secreto de servidor. Una vez usé el tipo de clave incorrecto y pasé una noche aprendiendo la diferencia entre ellas. Abre la carpeta del proyecto
Abre una terminal en la carpeta del chatbot extraído que contiene package.json:
$ cd ruta-a-tu-proyecto-descargadoPara confirmar que tienes la descarga correcta, abre package.json: la exportación del chatbot declara Vite, y la fuente junto a ella incluye los archivos config.js e index.js que las siguientes secciones editan. Estas instrucciones se ajustan al chatbot completado, cuyo código importa tanto openai como @supabase/supabase-js; el nombre de la carpeta por sí solo no lo distingue de la exportación de una lección anterior.
package.json; toda instalación y todo archivo en esta página pertenece allí. Si la terminal está en otro lugar, los comandos se ejecutan en la carpeta incorrecta y nada después de esto funciona. Verifico la lista de carpetas buscando package.json antes de escribir cualquier cosa, un hábito que construí después de cometer ese error varias veces. package.json en el nivel superior, Vite declarado dentro y config.js e index.js junto a él. Treinta segundos de verificación aquí cuestan menos que reparar los archivos de un proyecto diferente. Todo comando en esta página asume que estás en esta carpeta. Prepara el proyecto para Vite
Instala la dependencia Vite declarada, luego los dos paquetes que la fuente importa pero el package.json descargado no declara:
$ npm install
$ npm install openai @supabase/supabase-jsAbre config.js y reemplaza toda lectura de ambiente de Scrimba. Mantén los imports, exports y validación existentes, pero reemplaza tres nombres de ambiente en cuatro ocurrencias; OPENAI_API_KEY aparece dos veces:
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_URLLas dos lecturas de OPENAI_API_KEY están en la validación y el cliente de OpenAI, así que cambia ambas.
Abre index.js y cambia el modelo de chat de gpt-4 a gpt-4o-mini. Deja el modelo de embedding text-embedding-ada-002 suministrado sin cambios mientras sigues el curso. Los vectores existentes en la base de datos del curso deben tener las mismas dimensiones que los embeddings de consulta; cambiar ese modelo es una migración de base de datos separada, no parte de la configuración local.
Crea .env junto a package.json:
VITE_OPENAI_API_KEY=tu-clave-api-openai
VITE_SUPABASE_URL=https://tu-proyecto.supabase.co
VITE_SUPABASE_API_KEY=tu-clave-publicable-o-anonTambién crea .gitignore:
.env
node_modules/Enviar .env a un repositorio de Git es la forma más común en que se filtra una clave; ignorar archivos y buenos hábitos cubre el hábito en detalle.
Estas credenciales son visibles en el navegador
Vite copia valores VITE_ en el bundle del frontend. Usa credenciales de aprendizaje restringidas, habilita Row Level Security en Supabase, y nunca publiques esta versión. Una aplicación de producción debe mover la solicitud de OpenAI a un backend.
.env con una clave de Supabase segura para navegador. Luego mantén .env fuera de Git. Una vez publiqué una clave con mi primer proyecto y pasé la noche reemplazándola, así que este orden está escrito por experiencia. .env y .gitignore termina la reparación. VITE_ son lo que coloca los valores en el bundle, que también entrega la clave de OpenAI al código del navegador. Eso es aceptable para una lección y descalificador para producción, así que mueve la llamada de OpenAI detrás de un backend antes de que usuarios reales lleguen a este chatbot. He visto un proyecto saltar ese paso y terminó con una clave revocada y una factura inesperada. Ejecuta el proyecto
$ npm startAbre la URL Local impresa por Vite y hazle al chatbot una pregunta cubierta por los datos del curso. Una respuesta útil muestra que la página, la recuperación de Supabase y la solicitud de OpenAI están funcionando. Reinicia el comando después de cambiar .env, y detente con Ctrl+C.
npm start, abre la URL Local, y hazle al chatbot algo que los datos del curso cubran. Si cambias .env, reinicia el comando para que Vite lea los nuevos valores, y presiona Ctrl+C cuando termines. Una vez olvidé ese reinicio y me confundió toda una tarde, así que espero que esta nota te ahorré una. .env. Solución de problemas
Failed to resolve import "openai" o "@supabase/supabase-js": Ejecuta ambos comandos de instalación mostrados anteriormente en esta página, y ejecútalos en la carpeta que contiene package.json.
process is not defined: Una referencia process.env permanece en config.js. Reemplázala con el valor import.meta.env.VITE_... correspondiente.
Supabase no devuelve filas o devuelve un error de permisos: Confirma la URL del proyecto, usa una clave publicable o anon, y verifica que la tabla del curso y las políticas de Row Level Security existan en ese mismo proyecto.
OpenAI rechaza el modelo o la clave: Confirma la facturación y el acceso de la clave en la cuenta de OpenAI. Usa un modelo actual disponible para ese proyecto.

