Saltar al contenido

Visión y documentos

Los modelos con visión aceptan imágenes en la misma solicitud que el texto: capturas de pantalla, fotos, gráficos, páginas escaneadas. Algunos también leen PDF y otros documentos directamente. Busca image y document en el input_modalities de un modelo en la lista de modelos, o filtra por visión en la página de modelos.

Envía una imagen

Convierte el content del mensaje del usuario en un array de partes. Una imagen es una parte image_url que contiene una URL HTTPS pública o una data URL en base64:

const completion = await client.chat.completions.create({
  model: "gemini-3.6-flash",
  messages: [
    {
      role: "user",
      content: [
        { type: "text", text: "What's in this picture?" },
        { type: "image_url", image_url: { url: "https://example.com/photo.jpg" } },
      ],
    },
  ],
});

Un archivo local se envía como data URL:

import { readFile } from "node:fs/promises";

const base64 = (await readFile("chart.png")).toString("base64");
const part = { type: "image_url", image_url: { url: `data:image/png;base64,${base64}` } };
  • Agrega varias partes image_url para enviar varias imágenes; haz referencia a ellas por su orden en el texto.
  • JPEG, PNG, WebP y GIF tienen amplio soporte. El modelo puede reducir la escala de imágenes muy grandes.
  • image_url.detail (low, high, auto) se respeta en los modelos que lo admiten; low cuesta menos tokens.
  • Las imágenes se facturan como tokens de entrada, así que una imagen grande cuesta más que una oración corta.

Envía un PDF

Los modelos que leen documentos aceptan una parte file con el documento como data URL:

{
  "model": "gemini-3.6-flash",
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "text", "text": "Summarise this contract's termination clauses." },
        {
          "type": "file",
          "file": { "filename": "contract.pdf", "file_data": "data:application/pdf;base64,JVBERi0xLjcK..." }
        }
      ]
    }
  ]
}

Para extraer texto de muchas páginas a un precio fijo por página, OCR suele ser más barato que enviar documentos a un modelo de chat.

En el endpoint Messages

El formato Anthropic usa bloques image y document, con una fuente en base64 o URL:

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": [
        { "type": "image", "source": { "type": "url", "url": "https://example.com/photo.jpg" } },
        { "type": "document", "source": { "type": "base64", "media_type": "application/pdf", "data": "JVBERi0xLjcK..." } },
        { "type": "text", "text": "Compare the photo with page 2 of the document." }
      ]
    }
  ]
}

En la API de Responses

Usa partes input_image con un image_url, y partes input_file con file_data y un filename, dentro de un mensaje del usuario en input.

Solicitudes demasiado grandes

El cuerpo de una solicitud puede ocupar hasta 64 MiB. Si lo superas, recibes un 413. Para archivos grandes, es preferible una URL que el modelo pueda descargar en lugar de incrustar los bytes.