Ejecutar Embeddings y Bases de Datos Vectoriales localmente
Usa esta página para ejecutar el chatbot del curso extraído en tu computadora. Instala dos paquetes que la descarga omite, adapta la configuración de OpenAI y Supabase del chatbot para Vite e inicia el proyecto en el navegador contra la base de datos que construiste durante el curso.
Lo que necesitas primero
Instala una versión LTS compatible de Node.js. Se recomienda Node 24 e incluye npm. También necesitas una clave de API de OpenAI y un proyecto Supabase existente que contenga los datos del curso.
Para Supabase, usa una clave publicable (comienza con sb_publishable_) o la clave heredada anon. Estas claves están diseñadas para aparecer en código de navegador: quien copie una solo puede hacer lo que tus políticas de Row Level Security, las reglas de acceso por fila de Supabase, permitan. Supabase está retirando las claves heredadas antes de fin de 2026, así que prefiere la clave publicable cuando tu proyecto muestre una. Nunca pongas una clave secreta o clave service_role en este proyecto de navegador. Consulta Claves 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. Este setup de aprendizaje la envía al navegador de todas formas, y la advertencia en la sección Vite abajo explica los límites de hacerlo. El proyecto Vercel AI SDK muestra el arreglo del lado del servidor: usa una clave secreta de Supabase, que es aceptable allí porque ese proyecto se ejecuta en un servidor y sus claves nunca llegan a un navegador.
Para Supabase, usa una clave publicable o anon, el tipo diseñado para navegadores, nunca un secreto de servidor.
La clave Supabase que configures se vuelve legible en código cliente, así que debe ser una clave publicable o anon cuyo acceso Row Level Security limite. Mantén toda clave del lado del servidor fuera de este proyecto.
anon copiada solo puede hacer lo que tus políticas de Row Level Security permitan, por eso ese tipo de clave está hecha para código de navegador. La clave de OpenAI no tiene tal limitación y gasta tu dinero hasta que la revoques. Así que una clave Supabase en código cliente es una cuestión de política, mientras que una clave de OpenAI en código cliente de producción es un error.
Abre la carpeta del proyecto
Abre una terminal en la carpeta extraída del chatbot que contiene package.json:
$ cd path-to-your-downloaded-projectPara confirmar que tienes la descarga correcta, abre package.json: el chatbot declara Vite, y el código junto a él incluye los archivos config.js e index.js que la siguiente sección edita. Estas instrucciones se adaptan al chatbot completado, cuyo código importa tanto openai como @supabase/supabase-js; el nombre de la carpeta solo no lo distingue de la descarga de una lección anterior.
package.json; cada instalación y cada archivo en esta página pertenece allí. Si la terminal está en cualquier otro lugar, los comandos se ejecutan en la carpeta equivocada. Verifica el listado de carpeta para package.json antes de escribir nada.
package.json en el nivel superior con Vite declarado dentro, y config.js e index.js junto a él. Cada comando en esta página asume que estás en esta carpeta.
La descarga de una lección anterior se ve casi idéntica por nombre de carpeta, y aplicar estas ediciones a ella repara problemas que no tiene.
Prepara el proyecto para Vite
Instala la dependencia Vite declarada, luego los dos paquetes que el código importa pero el package.json descargado no declara:
$ npm install
$ npm install openai @supabase/supabase-jsAbre config.js y reemplaza cada lectura de entorno de Scrimba. Mantén los imports, exports y validación existentes, pero reemplaza tres nombres de entorno en cuatro ocurrencias:
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 OPENAI_API_KEY están en la verificación de validación y en 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=your-openai-api-key
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_API_KEY=your-publishable-or-anon-keyTambién crea .gitignore:
.env
node_modules/Enviar .env a un repositorio Git es la forma más común en que una clave se filtra; 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 app de producción debe mover la solicitud de OpenAI a un backend.
.env con una clave Supabase segura para navegador. Luego agrega .gitignore para que .env se mantenga fuera de Git.
Una lectura que pierdas falla cuando la página se ejecuta, no cuando Vite inicia. El par .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.
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. Presiona Ctrl+C cuando termines.
Una buena pregunta prueba el acceso de OpenAI y las filas y políticas de Supabase juntas, así que trátala como tu prueba de integración. Reinicia después de cualquier cambio en .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, en la carpeta que contiene package.json.
process is not defined: Una referencia process.env permanece en config.js. Reemplázala con el valor correspondiente import.meta.env.VITE_....
Supabase no devuelve filas o 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.
process is not defined significa que un nombre de Vite sigue siendo incorrecto, y respuestas vacías usualmente apuntan a datos de Supabase o permisos. Arregla uno a la vez y ejecuta la página nuevamente después de cada uno.
Cada capa depende de la anterior, así que detente en la primera capa rota y repárala allí.

