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

Ejecutar Multimodalidad localmente

Usa esta página para ejecutar cualquiera de los proyectos Multimodalidad extraídos: generación de imágenes o comprensión de imágenes. Ambos necesitan el mismo cambio de clave de Vite y la misma actualización del SDK de OpenAI. Después, sigue la reparación del proyecto que tengas. El cambio de clave es el que todo proyecto de navegador extraído en estos cursos necesita; Ejecutar Chef Claude localmente lo aplica a un proyecto de React con dos rutas de proveedor.

Lo que necesitas primero

Instala una versión LTS soportada de Node.js. Se recomienda Node 24 e incluye npm. El proyecto instala la última versión de Vite, que necesita Node 22.12 o superior.

Verifica que ambos comandos funcionen:

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

Necesitas una clave de API de OpenAI con facturación y acceso al modelo que uses. El acceso a generación de imágenes puede requerir verificación de organización.

Usa una clave temporal con un límite de gasto bajo. Ambos proyectos realizan solicitudes pagas de OpenAI desde código del navegador, así que cualquiera que abra las herramientas de desarrollo del navegador puede leer la clave.

JunoLo que necesitas primero Instala Node.js LTS, luego ejecuta node --version y npm --version. Cada uno debe imprimir un número de versión.

A continuación, crea una clave temporal de OpenAI con facturación y un límite de gasto bajo. Si planeas ejecutar el proyecto de generación de imágenes, verifica si tu organización necesita verificación antes de empezar.

JunoLo que necesitas primero Vite puede servir la página mucho antes de que tu proyecto de OpenAI tenga facturación o acceso a modelos, así que una página que carga no prueba nada de la cuenta. La primera solicitud pagada es lo que prueba que la clave funciona.

Mantén esa clave con un límite de gasto bajo para que un error no salga caro.

JunoLo que necesitas primero La agrupación local y el acceso a OpenAI fallan independientemente, así que trátalos como requisitos separados. El navegador recibe la clave, lo que significa que todos los que abran la página también la reciben.

Establece el límite de gasto ahora, y mueve la solicitud a un servidor antes de nada que se parezca a un despliegue.

Abre y prepara el proyecto

Abre una terminal en la carpeta extraída que contiene package.json:

bash
$ cd path-to-your-downloaded-project
$ npm install
$ npm install openai@latest

La segunda instalación reemplaza el SDK antiguo del curso con el actual antes de que cambies el modelo.

Revisa index.js para ver qué proyecto tienes. El proyecto de generación de imágenes llama a openai.images.generate y construye un formulario de póster con un título de película y un estilo artístico. El proyecto de visión llama a openai.chat.completions.create con gpt-4-vision-preview y tiene una carpeta images/.

Crea .env y .gitignore junto a package.json:

dotenv
VITE_OPENAI_API_KEY=your-openai-api-key
txt
.env
node_modules/

Las entradas de .gitignore mantienen dos cosas fuera de cualquier repositorio que crees desde esta carpeta: tu clave, y la carpeta node_modules que npm puede reconstruir en cualquier momento. Ignorar archivos y buenos hábitos cubre el hábito más amplio.

En index.js, cambia la clave del cliente de OpenAI de:

js
apiKey: process.env.OPENAI_API_KEY,

a:

js
apiKey: import.meta.env.VITE_OPENAI_API_KEY,

Deja la línea dangerouslyAllowBrowser: true debajo en su lugar. El SDK se niega a ejecutarse en el navegador sin ella.

La clave está incluida en el frontend

Esto es aceptable solo para aprendizaje local temporal con una clave restringida. Las solicitudes de imágenes pueden costar dinero. Nunca despliegues ni compartas esta versión de navegador; mueve la solicitud de OpenAI a un backend primero.

JunoAbre y prepara el proyecto Abre la carpeta extraída que contiene package.json, instala sus paquetes, luego instala el SDK actual de OpenAI encima.

Pon tu clave temporal en .env, y deja que .gitignore mantenga ese archivo fuera de Git. Luego cambia la única línea apiKey en index.js y deja sola la línea debajo.

JunoAbre y prepara el proyecto Ambos proyectos necesitan las mismas dos ediciones: la actualización del SDK y la sustitución de clave de Vite. Vite lee .env al iniciar, así que reinícialo después de cambiar el archivo.

Cada valor VITE_ se envía al navegador, así que el prefijo marca un valor como publicado en lugar de oculto.

JunoAbre y prepara el proyecto Actualiza el SDK primero. El curso fija OpenAI 4.20, que es anterior a los modelos gpt-image, así que una llamada de modelo nuevo a través del paquete antiguo puede fallar de formas que parecen errores en tu propio código.

Solo entonces reemplaza el ID de modelo retirado y el manejo de respuestas. import.meta.env mueve la clave al bundle; no la asegura.

Repara el proyecto de generación de imágenes

La captura del curso llama al modelo retirado dall-e-3 y espera una URL de imagen alojada. Siguiendo la guía actual de generación de imágenes de OpenAI, cambia su solicitud de imagen para usar gpt-image-2:

js
const image = await openai.images.generate({
  model: "gpt-image-2",
  prompt,
  size: "1024x1024",
})

El modelo devuelve la imagen como datos base64 en lugar de una URL. Donde el código lee image.data[0].url:

js
const imgURL = image.data[0].url;

construye una URL de datos PNG desde la imagen base64 devuelta en su lugar:

js
const imgURL = `data:image/png;base64,${image.data[0].b64_json}`;

Mantén la línea que coloca imgURL en la salida del póster tal como está.

JunoRepara el proyecto de generación de imágenes Apunta la solicitud a gpt-image-2, luego cambia la línea imgURL para que construya una URL de datos PNG desde b64_json.

Haz ambos cambios juntos. Si cambias el modelo y mantienes .url, el póster no aparecerá.

JunoRepara el proyecto de generación de imágenes Dos cosas cambiaron: el modelo que solicitas, y el campo que devuelve la imagen. Solicita gpt-image-2 y lee b64_json en lugar de .url.

Si la imagen está rota, verifica el prefijo data:image/png;base64, antes de cambiar nada más.

JunoRepara el proyecto de generación de imágenes La respuesta lleva la imagen dentro del JSON en lugar de apuntar a un archivo alojado por el proveedor, así que la página tiene que envolverla en una URL de datos explícita antes de que una etiqueta img pueda mostrarla.

El resto del código de renderizado se mantiene tal como el curso lo escribió.

Repara el proyecto de visión

En el proyecto Vision Part 2, reemplaza el ID de modelo retirado:

js
model: "gpt-4-vision-preview",

con el modelo capaz de imágenes gpt-4o-mini:

js
model: "gpt-4o-mini",

El formato de mensaje existente aún puede enviar entradas de texto e imagen, así que el resto de la solicitud permanece igual.

JunoRepara el proyecto de visión Reemplaza el modelo de visión retirado con gpt-4o-mini y mantén el mensaje de texto e imagen exactamente como está.

Solo el ID del modelo cambia aquí, no la forma de la solicitud.

JunoRepara el proyecto de visión Esta reparación reemplaza el modelo y nada más; el cambio de forma de respuesta pertenece a la generación de imágenes, no aquí.

Si la llamada aún falla después del reemplazo, verifica el acceso a la cuenta antes de verificar tu propio código de mensaje.

JunoRepara el proyecto de visión Chat Completions aún acepta un array de contenido que mezcla una parte text y una parte image_url, así que la forma de solicitud del curso se trasporta a gpt-4o-mini sin cambios.

Reduce qué parte de la solicitud falla antes de reescribir cualquier parte.

Ejecuta cualquiera de los proyectos

bash
$ npm start

Abre la URL Local que imprime Vite.

En el proyecto de generación de imágenes, ingresa un título de película, elige un estilo artístico y selecciona Generar póster. La página muestra "Generando póster para..." mientras se ejecuta la solicitud, luego el póster. Si la solicitud falla, la página muestra "Lo sentimos, ocurrió un error al generar el póster." y la consola del navegador muestra el error.

El proyecto de visión envía su solicitud tan pronto como carga la página. La página muestra la imagen siendo analizada, y la descripción del modelo aparece en la consola del navegador, no en la página. Cada carga de página envía una nueva solicitud pagada, incluida la recarga que Vite activa cuando guardas index.js.

Reinicia después de cambiar .env, y detén el proyecto con Ctrl+C.

JunoEjecuta cualquiera de los proyectos Ejecuta npm start y abre la URL Local que Vite imprime.

Para generación de imágenes, envía un título de película y estilo artístico y espera el póster. Para visión, abre la consola del navegador: la descripción del modelo aparece allí. Cada intento es una solicitud pagada, así que decide qué quieres probar antes de empezar a hacer clic.

JunoEjecuta cualquiera de los proyectos Vite iniciando prueba que el bundle adaptado se compila; no dice nada sobre la cuenta. Una solicitud en vivo verifica la clave, la facturación, el acceso al modelo y el manejo de respuestas del proyecto en una sola llamada.

Reinicia Vite después de cualquier edición de .env, o el valor antiguo seguirá siendo servido.

JunoEjecuta cualquiera de los proyectos Los dos proyectos señalan el éxito de forma diferente. La generación de imágenes debe recibir base64 y renderizarlo como una URL de datos; la visión ejecuta su solicitud al cargar el módulo y registra la primera opción en la consola.

Porque la solicitud de visión se ejecuta en cada carga, cada recarga se factura. Lee la consola antes de intentar de nuevo.

Solución de problemas

process is not defined: Reemplaza la lectura restante de clave process.env en index.js con la forma import.meta.env.VITE_....

La imagen generada está rota: Confirma que el código lee b64_json y agrega el prefijo data:image/png;base64, en lugar de leer .url.

El modelo no está disponible: Confirma la facturación, la verificación de organización y el acceso al modelo en el proyecto de OpenAI. La disponibilidad del proveedor puede variar según la cuenta.

La página de visión permanece en blanco: La página agrega la imagen solo después de que la solicitud tiene éxito, así que una página en blanco significa que la solicitud falló. Lee el error en la consola del navegador. Si no apunta a la clave o al modelo, envía primero un mensaje de solo texto a gpt-4o-mini; un éxito allí confirma que tu cuenta puede usar el modelo, así que la parte de imagen del mensaje es lo siguiente a inspeccionar.

La solicitud funciona pero la página permanece sin cambios: Verifica la consola del navegador para un error de renderizado y compara el campo devuelto con la reparación relevante arriba.

JunoSolución de problemas Revisa esto en orden: corrige cualquier lectura restante de process.env, confirma el modelo, luego verifica b64_json para la generación de imágenes.

Para cualquiera de los proyectos, la consola del navegador muestra el error. La mayoría de los fallos aquí son una edición sin terminar.

JunoSolución de problemas Separa la sustitución de Vite, el acceso a la cuenta, la forma de respuesta y el renderizado de página; cada capa falla por su cuenta. Una solicitud puede tener éxito y aún renderizarse incorrectamente.

Empareja el síntoma con una capa antes de editar nada.

JunoSolución de problemas Lee la respuesta del proveedor antes de cambiar cualquier código de UI, porque muestra lo que el modelo devolvió y la página renderizada no.

Mantén separadas la salida de generación de imágenes y el manejo de mensajes de visión; sus fallos se ven similares pero tienen causas diferentes.