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 dos proyectos de Multimodalidad extraídos: generación de imágenes o comprensión de imágenes. Ambos necesitan el mismo cambio de clave Vite y la misma actualización del SDK de OpenAI. Después, sigue la reparación del proyecto que tengas. Ese cambio de clave es el que todos los proyectos extraídos del curso necesitan; Ejecutar Chef Claude localmente lo aplica a un proyecto React con dos rutas de proveedor.

Lo que necesitas primero

Instala una versión LTS compatible de Node.js. Se recomienda Node 24, que incluye npm.

Verifica que ambos comandos funcionan:

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 la generación de imágenes puede requerir verificación de la organización.

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

JunoLo que necesitas primero Instala Node.js LTS y configura una clave temporal de OpenAI con facturación y un límite de gasto bajo. La generación de imágenes también puede solicitar verificación de la organización, así que verifica eso antes de empezar. ¡Una vez pasé toda una noche con una clave sin facturación y los mensajes de error nunca lo dijeron!
JunoLo que necesitas primero Vite puede servir la página mucho antes de que tu proyecto de OpenAI tenga facturación o acceso al modelo, así que una página que carga no prueba nada sobre la cuenta. La primera solicitud de imagen pagada es lo que prueba que la clave funciona. Mantén esa clave limitada a un gasto bajo para que un error se mantenga económico.
JunoLo que necesitas primero El empaquetamiento local y el acceso a OpenAI fallan independientemente, así que tratalos como requisitos previos separados. El navegador recibe la clave, lo que significa que todas las personas que abren la página también la reciben. Establece un límite de gasto bajo ahora y mueve la solicitud a un servidor antes de cualquier cosa que se parezca a un despliegue; he revocado una clave después de una exposición más corta que ésta.

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 actualiza el SDK antiguo del curso antes de usar las APIs de imagen actuales.

Crea .env y .gitignore al lado de 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,

La clave está incluida en el frontend

Esto es aceptable solo para aprendizaje local temporal con una clave restringida. Las solicitudes de imagen pueden costar dinero. Nunca despliegues ni compartas esta versión solo 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 de OpenAI actual encima. Tu clave temporal va en .env, y .gitignore mantiene ese archivo fuera de Git. ¡Una clave que nunca aparece en un commit es una clave que nunca tienes que reemplazar!
JunoAbre y prepara el proyecto Ambos proyectos requieren las mismas dos ediciones: la actualización del SDK y la sustitución de clave Vite. Vite lee .env al iniciar, así que reinicialo después de cambiar el archivo. Y 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: la versión del curso es anterior a la forma de solicitud gpt-image, así que una nueva llamada de modelo a través del paquete antiguo falla con errores que parecen equivocaciones en tu propio código en lugar de un paquete desactualizado. Solo después, reemplaza el ID de modelo descontinuado y el manejo de respuesta. Una vez hice esos dos pasos en el orden opuesto y pasé una hora auditando código que nunca fue el problema.

Repara el proyecto de generación de imágenes

La instantánea del curso llama al modelo descontinuado 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",
})

Donde el código lee image.data[0].url, reemplázalo con una URL de datos hecha a partir de la imagen base64 devuelta:

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

Mantén la asignación o marcado circundante de tu archivo extraído.

La cadena base64 es la imagen completa incrustada en la respuesta, así que espera cargas de un megabyte o más. Una versión con un backend guardaría la imagen del lado del servidor y enviaría a la página una URL corta en lugar de una URL de datos larga.

JunoRepara el proyecto de generación de imágenes Apunta la solicitud a gpt-image-2 y convierte el valor base64 devuelto en una URL de datos PNG. El modelo descontinuado y el campo antiguo .url son parte del mismo cambio, así que actualiza ambos. ¡Si cambias uno y no el otro, la imagen se romperá, que es exactamente el error que cometí primero!
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, manteniendo la asignación circundante de tu proyecto extraído. Si la imagen está rota, verifica el prefijo data:image/png;base64, antes de cambiar cualquier otra cosa.
JunoRepara el proyecto de generación de imágenes Base64 significa que la imagen completa se lleva dentro de la respuesta JSON, así que espera cargas de un megabyte o más y una URL de datos mucho más larga que el resto de tu marcado. Una versión con backend almacenaría la imagen en el servidor y enviaría a la página una URL corta en lugar de una URL de datos larga. Incrustar es aceptable para un ejercicio local; en producción es un costo que ves en la factura.

Repara el proyecto de visión

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

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

con el 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.

Si la solicitud actualizada falla, envía un mensaje solo de texto a gpt-4o-mini primero. Un éxito ahí confirma que tu cuenta puede usar el modelo, así que la parte de imagen del mensaje es lo que debes inspeccionar a continuación.

JunoRepara el proyecto de visión Reemplaza el modelo de visión descontinuado con gpt-4o-mini y mantén el formato de mensaje de texto e imagen sin cambios. Solo cambió el ID del modelo, no la forma de la solicitud. ¡Cambiar menos líneas significa menos líneas que pueden romperse, una lección que sigo reaprendiendo!
JunoRepara el proyecto de visión Esta reparación reemplaza el modelo y nada más; la reformulación de forma de respuesta pertenece a la generación de imágenes, no aquí. Apunta la solicitud a gpt-4o-mini y mantén el arreglo de contenido multimodal sin cambios. Si la llamada aún falla después de ese reemplazo, verifica el acceso a la cuenta antes de verificar tu propio código de mensaje.
JunoRepara el proyecto de visión Cambia solo el ID de modelo descontinuado y preserva el arreglo de contenido multimodal. Si la llamada falla, envía primero una solicitud solo de texto a gpt-4o-mini: el éxito ahí prueba el acceso a la cuenta y apunta al manejo de imagen como la causa. Reduce a cuál parte de la solicitud falla antes de reescribir cualquiera de ella. Una vez la reescribí primero, y eso me costó una tarde.

Ejecuta cualquiera de los proyectos

bash
$ npm start

Abre la URL Local que imprime Vite. En el proyecto de generación de imágenes, envía un prompt y busca la imagen generada en la página. En el proyecto de visión, envía una imagen y pregunta y busca la respuesta de texto del modelo. Reinicia después de cambiar .env, y detén el proyecto con Ctrl+C.

JunoEjecuta cualquiera de los proyectos Ejecuta npm start, abre la URL Local que imprime Vite, e intenta el flujo de principio a fin. Una imagen generada o una respuesta de visión es la señal de éxito, y cada intento es una solicitud pagada. ¡Escribo mi prompt de prueba antes de empezar a hacer clic, así gasto menos dinero y pierdo menos tiempo preguntándome si debo intentar de nuevo!
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, facturación, acceso al modelo y la ruta de respuesta específica del proyecto en una única llamada. Reinicia Vite después de cualquier edición de .env, o el valor antiguo sigue siendo servido.
JunoEjecuta cualquiera de los proyectos Cada proyecto tiene su propia señal de éxito: la generación de imagen debe recibir base64 y renderizarlo como una URL de datos, visión debe conseguir que su mensaje mixto de texto e imagen sea aceptado. Verifica contra el correcto antes de cambiar cualquier código. Cada reintento se factura, así que lee la consola primero e intenta el segundo intento de manera informada.

Solución de problemas

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

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

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

El SDK informa un error sobre ejecutarse en un entorno de navegador: npm install openai@latest mantiene la guardia del navegador del SDK, que se niega a ejecutarse con una clave de API en código de navegador. Si tu proyecto extraído no pasa ya dangerouslyAllowBrowser: true en las opciones del cliente de OpenAI, añádelo al lado de la línea apiKey. El nombre de la opción es la advertencia: esto sigue siendo aceptable solo para una clave temporal y restringida usada localmente.

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

JunoSolución de problemas Verifica estos en orden: corrige cualquier lectura de process.env sin terminar, confirma el modelo, luego verifica b64_json para generación de imágenes o la Consola del navegador para un error de renderizado. La mayoría de fallos aquí son una edición sin terminar en lugar de un misterio. ¡Verifica las cosas ordinarias primero; me tomó demasiado tiempo convertir eso en un hábito!
JunoSolución de problemas Separa la sustitución Vite, acceso a la cuenta, forma de respuesta y renderizado de página; cada capa falla por su cuenta. Una solicitud puede tener éxito y aún renderizar incorrectamente, así que la pestaña Network y la página pueden mostrar historias diferentes. Empareja el síntoma con una capa antes de editar cualquier cosa.
JunoSolución de problemas Lee la respuesta del proveedor en sí antes de cambiar cualquier código de UI, porque la carga útil muestra lo que el modelo devolvió y la página renderizada no. Mantén separados la salida de generación de imagen y el manejo de mensaje de visión; sus fallos se ven similares pero tienen causas diferentes. Y si el SDK actualizado se niega a ejecutarse en el navegador, esa guardia está funcionando como se pretende, así que trata dangerouslyAllowBrowser como una anulación solo local en lugar de una respuesta de producción.