Genera contenido con la API de Gemini

Usa generateContent o streamGenerateContent para generar contenido con Gemini.

La familia de modelos de Gemini incluye modelos que funcionan con solicitudes de instrucciones multimodales. El término multimodal indica que puedes usar más de una modalidad, o tipo de entrada, en una instrucción. Los modelos que no son multimodales aceptan instrucciones solo con texto. Las modalidades pueden incluir texto, audio, video y mucho más.

Crea una cuenta de Google Cloud para comenzar

Para comenzar a usar la API de Vertex AI para Gemini, crea una cuenta de Google Cloud.

Después de crear tu cuenta, usa este documento para revisar el cuerpo de la solicitud, los parámetros del modelo, el cuerpo de la respuesta y algunas solicitudes de muestra del modelo de Gemini.

Cuando tengas todo listo, consulta la guía de inicio rápido de la API de Vertex AI para Gemini para aprender a enviar una solicitud a la API de Vertex AI Gemini con un SDK de lenguaje de programación o REST API

Modelos compatibles

Modelo Versión
Gemini 1.5 Flash gemini-1.5-flash-001
gemini-1.5-flash-002
Gemini 1.5 Pro gemini-1.5-pro-001
gemini-1.5-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-001
gemini-1.0-pro-vision-001
Gemini 1.0 Pro gemini-1.0-pro
gemini-1.0-pro-001
gemini-1.0-pro-002

Ejemplo de sintaxis

Sintaxis para generar una respuesta del modelo.

Sin transmisión

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \

https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
  "contents": [{
    ...
  }],
  "generationConfig": {
    ...
  },
  "safetySettings": {
    ...
  }
  ...
}'

Python

gemini_model = GenerativeModel(MODEL_ID)
generation_config = GenerationConfig(...)

model_response = gemini_model.generate_content([...], generation_config, safety_settings={...})

Transmisión

curl

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent \
  -d '{
    "contents": [{
      ...
    }],
    "generationConfig": {
      ...
    },
    "safetySettings": {
      ...
    }
    ...
  }'

Python

gemini_model = GenerativeModel(MODEL_ID)
model_response = gemini_model.generate_content([...], generation_config, safety_settings={...}, stream=True)

Lista de parámetros

Consulta ejemplos para obtener detalles sobre la implementación.

Cuerpo de la solicitud

{
  "cachedContent": string,
  "contents": [
    {
      "role": string,
      "parts": [
        {
          // Union field data can be only one of the following:
          "text": string,
          "inlineData": {
            "mimeType": string,
            "data": string
          },
          "fileData": {
            "mimeType": string,
            "fileUri": string
          },
          // End of list of possible types for union field data.

          "videoMetadata": {
            "startOffset": {
              "seconds": integer,
              "nanos": integer
            },
            "endOffset": {
              "seconds": integer,
              "nanos": integer
            }
          }
        }
      ]
    }
  ],
  "systemInstruction": {
    "role": string,
    "parts": [
      {
        "text": string
      }
    ]
  },
  "tools": [
    {
      "functionDeclarations": [
        {
          "name": string,
          "description": string,
          "parameters": {
            object (OpenAPI Object Schema)
          }
        }
      ]
    }
  ],
  "safetySettings": [
    {
      "category": enum (HarmCategory),
      "threshold": enum (HarmBlockThreshold)
    }
  ],
  "generationConfig": {
    "temperature": number,
    "topP": number,
    "topK": number,
    "candidateCount": integer,
    "maxOutputTokens": integer,
    "presencePenalty": float,
    "frequencyPenalty": float,
    "stopSequences": [
      string
    ],
    "responseMimeType": string,
    "responseSchema": schema,
    "seed": integer
  },
  "labels": {
    string: string
  }
}

El cuerpo de la solicitud contiene datos con los siguientes parámetros:

Parámetros

cachedContent

Opcional: CachedContent

Contenido almacenado en caché. Puedes usar el contenido almacenado en caché en las solicitudes que contienen contenido repetido.

contents

Obligatorio: Content

El contenido de la conversación actual con el modelo.

Para consultas de un solo turno, esta es una instancia única. Para las consultas de varios turnos, este es un campo repetido que contiene el historial de conversaciones y la solicitud más reciente.

systemInstruction

Opcional: Content

Disponible para gemini-1.5-flash, gemini-1.5-pro y gemini-1.0-pro-002.

Instrucciones para que el modelo mejore su rendimiento. Por ejemplo, "Responde de la forma más concisa posible" o "No uses términos técnicos en tu respuesta".

Las cadenas text se contabilizan para el límite de tokens.

El campo role de systemInstruction se ignora y no afecta el rendimiento del modelo.

tools

Opcional. Un fragmento de código que permite que el sistema interactúe con sistemas externos para realizar una acción, o un conjunto de acciones, fuera del conocimiento y del alcance del modelo. Consulta Llamadas a funciones.

toolConfig

Opcional. Consulta Llamadas a funciones.

safetySettings

Opcional: SafetySetting

Configuración por solicitud para bloquear contenido no seguro.

Se aplicó de manera forzosa en GenerateContentResponse.candidates.

generationConfig

Opcional: GenerationConfig

Los ajustes de configuración de generación.

labels

Opcional: string

Son metadatos que puedes agregar a la llamada a la API en formato de pares clave-valor.

contents

El tipo de datos estructurados base que incluye contenido de varias partes de un mensaje.

Esta clase consta de dos propiedades principales: role y parts. La propiedad role denota la persona que produce el contenido, mientras que la propiedad parts contiene varios elementos, cada uno de los cuales representa un segmento de datos dentro de un mensaje.

Parámetros

role

Opcional: string

La identidad de la entidad que crea el mensaje. Se admiten los siguientes valores:

  • user: indica que el mensaje lo envía una persona real, por lo general, un mensaje generado por el usuario.
  • model: indica que el modelo genera el mensaje.

El valor model se usa para insertar mensajes del modelo en la conversación durante las conversaciones de varios turnos.

En el caso de las conversaciones que no tengan varios turnos, este campo se puede dejar en blanco o sin configurar.

parts

Part

Una lista de partes ordenadas que conforman un solo mensaje. Es posible que las diferentes partes tengan distintos tipos de MIME de IANA.

Para límites sobre las entradas, como el número máximo de tokens o de imágenes, consulta las especificaciones del modelo en la página Modelos de Google.

Para calcular la cantidad de tokens en tu solicitud, consulta Obtén el recuento de tokens.

parts

Un tipo de datos que contiene contenido multimedia que forma parte de un mensaje Content de varias partes.

Parámetros

text

Opcional: string

Un mensaje de texto o un fragmento de código.

inlineData

Opcional: Blob

Datos intercalados en bytes sin procesar.

Para gemini-1.0-pro-vision, puedes especificar 1 imagen como máximo con inlineData.Para especificar hasta 16 imágenes, usa fileData.

fileData

Opcional: fileData

Datos almacenados en un archivo.

functionCall

Opcional: FunctionCall.

Contiene una cadena que representa el campo FunctionDeclaration.name y un objeto JSON estructurado que contiene cualquier parámetro para la llamada a función que predijo el modelo.

Consulta Llamadas a funciones.

functionResponse

Opcional: FunctionResponse.

La salida del resultado de una FunctionCall que contiene una cadena que representa el campo FunctionDeclaration.name y un objeto JSON estructurado que contiene cualquier resultado de la llamada a función. Se usa como contexto para el modelo.

Consulta Llamadas a funciones.

videoMetadata

Opcional: VideoMetadata

Para la entrada de video, el desplazamiento inicial y final del video en Duración formato Por ejemplo, para especificar un clip de 10 segundos a partir de la 1:00, configura "startOffset": { "seconds": 60 } y "endOffset": { "seconds": 70 }.

Los metadatos solo se deben especificar mientras los datos de video se presentan en inlineData o fileData.

blob

BLOB de contenido. Si es posible, envíalo como texto en lugar de bytes sin procesar.

Parámetros

mimeType

string

El tipo de medio del archivo especificado en los campos data o fileUri. Los valores aceptables son los siguientes:

Haz clic para expandir los tipos de MIME.

  • application/pdf
  • audio/mpeg
  • audio/mp3
  • audio/wav
  • image/png
  • image/jpeg
  • image/webp
  • text/plain
  • video/mov
  • video/mpeg
  • video/mp4
  • video/mpg
  • video/avi
  • video/wmv
  • video/mpegps
  • video/flv

En el caso de gemini-1.0-pro-vision, la duración máxima del video es de 2 minutos.

En el caso de Gemini 1.5 Pro y Gemini 1.5 Flash, la duración máxima de un archivo de audio es de 8.4 horas, y la duración máxima de un archivo de video (sin audio) es de una hora. Para obtener más información, consulta Requisitos de contenido multimedia de Gemini 1.5 Pro.

Los archivos de texto deben estar codificados en UTF-8. El contenido del archivo de texto se contabiliza para el límite de tokens.

No hay límite en la resolución de la imagen.

data

bytes

La codificación en base64 de la imagen, PDF o el video que se incluirá intercalada en el mensaje. Si incluyes contenido multimedia intercalado, también debes especificar el tipo de medio (mimeType) de los datos.

Límite de tamaño: 20 MB

CachedContent

Se usa para actualizar cuando vence una caché de contexto. Debes especificar ttl o expireTime cuando actualizas CachedContent, pero no puedes especificar ambos. Para obtener más información, consulta Usa el almacenamiento en caché de contexto.

Parámetros

ttl

TTL

Se usa para especificar la cantidad de segundos y nanosegundos después de que se crea o actualiza una caché de contexto que esta permanece antes de vencer.

expireTime

Timestamp

Una marca de tiempo que especifica cuándo vence una caché de contexto.

TTL

Es el tiempo de vida, o la duración, después de que se crea o actualiza una caché de contexto antes de que venza.

Parámetros

seconds

float

Es el componente de segundos de la duración antes de que venza una caché de contexto después de su creación. El valor predeterminado es 3,600 segundos.

nano

Opcional: float

Es el componente de nanosegundos de la duración antes de que venza una caché de contexto después de su creación.

FileData

Datos de URI o URL web.

Parámetros

mimeType

string

Tipo de MIME de IANA de los datos.

fileUri

string

Es el URI o la URL del archivo que se incluirá en la instrucción. Los valores aceptables son los siguientes:

  • URI del bucket de Cloud Storage: El objeto debe poder leerse de forma pública o residir en el mismo proyecto de Google Cloud que envía la solicitud.
  • URL HTTP: La URL del archivo debe ser legible públicamente. Puedes especificar un archivo de video y hasta 10 archivos de imagen por solicitud. Los archivos de audio y los documentos no pueden superar los 15 MB.
  • URL del video de YouTube: El video de YouTube debe ser propiedad de la cuenta que usaste para acceder a la consola de Google Cloud o ser público. Solo se admite una URL de video de YouTube por solicitud.

Cuando especifiques un fileURI, también debes especificar el tipo de medio (mimeType) del archivo.

Para gemini-1.5-pro y gemini-1.5-flash, el límite de tamaño es de 2 GB.

Para gemini-1.0-pro-vision, el límite de tamaño es de 20 MB.

functionCall

Un functionCall predicho que muestra el modelo que contiene una cadena que representa el functionDeclaration.name y un objeto JSON estructurado que contiene los parámetros y sus valores.

Parámetros

name

string

El nombre de la función a la que se llamará.

args

Struct

Los parámetros y valores de la función en formato de objeto JSON

Consulta Llamadas a funciones para obtener detalles sobre los parámetros.

functionResponse

El resultado de una FunctionCall que contiene una cadena que representa la FunctionDeclaration.name. También contiene un objeto JSON estructurado con el resultado de la función (y lo usa como contexto del modelo). Esto debería contener el resultado de un FunctionCall basado en la predicción del modelo.

Parámetros

name

string

El nombre de la función a la que se llamará.

response

Struct

La respuesta de la función en formato de objeto JSON.

videoMetadata

Metadatos que describen el contenido del video de entrada.

Parámetros

startOffset

Opcional: google.protobuf.Duration

El desplazamiento inicial del video.

endOffset

Opcional: google.protobuf.Duration

El desplazamiento final del video.

safetySetting

Configuración de seguridad.

Parámetros

category

Opcional: HarmCategory

La categoría de seguridad para la que se configura un umbral. Los valores aceptables son los siguientes:

Haz clic para expandir las categorías de seguridad

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT

threshold

Opcional: HarmBlockThreshold

El umbral para bloquear respuestas que podrían pertenecer a la categoría de seguridad especificada según la probabilidad.

  • OFF
  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MED_AND_ABOVE
  • BLOCK_ONLY_HIGH

method

Opcional: HarmBlockMethod

Especifica si se utiliza el umbral para la puntuación de probabilidad o gravedad. Si no se especifica, el umbral se utiliza para la puntuación de probabilidad.

harmCategory

Categorías HRM que bloquean contenido.

Parámetros

HARM_CATEGORY_UNSPECIFIED

No se especifica la categoría de daño.

HARM_CATEGORY_HATE_SPEECH

La categoría de daño es la incitación al odio o a la violencia.

HARM_CATEGORY_DANGEROUS_CONTENT

La categoría de daño es el contenido peligroso.

HARM_CATEGORY_HARASSMENT

La categoría de daño es el hostigamiento.

HARM_CATEGORY_SEXUALLY_EXPLICIT

La categoría de daño es el contenido sexual explícito.

harmBlockThreshold

Niveles de umbral de probabilidad usados para bloquear una respuesta.

Parámetros

HARM_BLOCK_THRESHOLD_UNSPECIFIED

Umbral de bloqueo de daño no especificado.

BLOCK_LOW_AND_ABOVE

Bloquea el umbral bajo y superior (es decir, bloquea más).

BLOCK_MEDIUM_AND_ABOVE

Bloquea el umbral medio y superior.

BLOCK_ONLY_HIGH

Bloquea solo el umbral alto (es decir, bloquea menos).

BLOCK_NONE

No bloquear.

OFF

Desactiva la seguridad si todas las categorías están desactivadas.

harmBlockMethod

Un umbral de probabilidad que bloquea una respuesta según una combinación de probabilidad y gravedad.

Parámetros

HARM_BLOCK_METHOD_UNSPECIFIED

El método de bloqueo de daño no se especifica.

SEVERITY

El método de bloqueo de daño usa puntuaciones de probabilidad y gravedad.

PROBABILITY

El método de bloqueo de daño usa la puntuación de probabilidad.

generationConfig

Los ajustes de configuración usados cuando se genera el mensaje.

Parámetros

temperature

Opcional: float

La temperatura se usa para las muestras durante la generación de respuesta, que se genera cuando se aplican topP y topK. La temperatura controla el grado de aleatorización en la selección de tokens. Las temperaturas más bajas son buenas para los mensajes que requieren una respuesta menos abierta o de creativa, mientras que las temperaturas más altas pueden generar resultados más diversos o creativos. Una temperatura de 0 significa que siempre se seleccionan los tokens de probabilidad más alta. En este caso, las respuestas para un mensaje determinado son, en su mayoría, deterministas, pero es posible que haya una pequeña cantidad de variación.

Si el modelo muestra una respuesta demasiado genérica, demasiado corta o el modelo proporciona una respuesta de resguardo, intenta aumentar la temperatura.

  • Rango para gemini-1.5-flash: 0.0 - 2.0 (predeterminado: 1.0)
  • Rango para gemini-1.5-pro: 0.0 - 2.0 (predeterminado: 1.0)
  • Rango para gemini-1.0-pro-vision: 0.0 - 1.0 (predeterminado: 0.4)
  • Rango para gemini-1.0-pro-002: 0.0 - 2.0 (predeterminado: 1.0)
  • Rango para gemini-1.0-pro-001: 0.0 - 1.0 (predeterminado: 0.9)

topP

Opcional: float

Si se especifica, se usa el muestreo de núcleos.

Top-P cambia la manera en la que el modelo selecciona los tokens para el resultado. Los tokens se eligen del más probable (consulta Top-K) al menos probable, hasta que la suma de sus probabilidades sea igual al valor de Top-P. Por ejemplo, si los tokens A, B y C tienen una probabilidad de 0.3, 0.2 y 0.1 y el valor Top-P es 0.5, el modelo elegirá A o B como el siguiente token usando la temperatura y excluirá a C como candidato.

Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias.

  • Intervalo: 0.0 - 1.0
  • Configuración predeterminada para gemini-1.5-flash: 0.95
  • Configuración predeterminada para gemini-1.5-pro: 0.95
  • Configuración predeterminada para gemini-1.0-pro: 1.0
  • Configuración predeterminada para gemini-1.0-pro-vision: 1.0

topK

Opcional: El parámetro Top-K cambia la manera en la que el modelo selecciona los tokens para el resultado. Un Top-K de 1 significa que el siguiente token seleccionado es el más probable entre todos los tokens del vocabulario del modelo (también llamado decodificación codiciosa), mientras que un Top-K de 3 significa que el siguiente token se selecciona de los tres tokens más probables (con la temperatura).

Para cada paso de elección de tokens, se muestrean los tokens de Top-K con las probabilidades más altas. Luego, los tokens se filtran según el Top-P, lo que significa que el token final se selecciona a través del muestreo de temperatura.

Especifica un valor más bajo para respuestas menos aleatorias y un valor más alto para respuestas más aleatorias.

Intervalo: 1-40

Solo es compatible con gemini-1.0-pro-vision.

Configuración predeterminada para gemini-1.0-pro-vision: 32

candidateCount

Opcional: int

La cantidad de variaciones de respuesta que se mostrarán. Por cada solicitud, se te cobra por los tokens de salida de todos los candidatos, pero solo se te cobra una vez por los tokens de entrada.

Especificar varios candidatos es una función de vista previa que funciona con generateContent (no se admite streamGenerateContent). Se admiten los siguientes modelos:

  • Gemini 1.5 Flash: 1-8, predeterminado: 1
  • Gemini 1.5 Pro: 1-8, predeterminado: 1

maxOutputTokens

Opcional: int

Cantidad máxima de tokens que se pueden generar en la respuesta. Un token tiene casi cuatro caracteres. 100 tokens corresponden a casi 60 u 80 palabras.

Especifica un valor más bajo para las respuestas más cortas y un valor más alto para las respuestas potencialmente más largas.

stopSequences

Opcional: List[string]

Especifica una lista de cadenas que le indica al modelo que deje de generar texto si se encuentra una de las cadenas en la respuesta. Si una cadena aparece varias veces en la respuesta, la respuesta trunca el lugar en que se encontró por primera vez. Las cadenas distinguen entre mayúsculas y minúsculas.

Por ejemplo, si la siguiente es la respuesta que se muestra cuando no se especifica stopSequences:

public static string reverse(string myString)

Luego, la respuesta que se muestra con stopSequences configurada como ["Str", "reverse"] es la siguiente:

public static string

La lista puede tener un máximo de 5 elementos.

presencePenalty

Opcional: float

Penalizaciones positivas.

Los valores positivos penalizan los tokens que ya aparecen en el texto generado, lo que aumenta la probabilidad de generar contenido más diverso.

El valor máximo para presencePenalty es hasta 2.0, no inclusive. Su valor mínimo es -2.0.

Solo es compatible con gemini-1.5-pro y gemini-1.5-flash.

frequencyPenalty

Opcional: float

Los valores positivos penalizan los tokens que aparecen repetidamente en el texto generado, lo que disminuye la probabilidad de repetir contenido.

Este valor para frequencyPenalty llega hasta 2.0, no inclusive. Su valor mínimo es -2.0.

Solo es compatible con gemini-1.5-pro y gemini-1.5-flash.

responseMimeType

Opcional: string (enum)

Disponible para los siguientes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash

Es el tipo de MIME de la respuesta de salida del texto candidato generado.

Se admiten los siguientes tipos de MIME:

  • application/json: la respuesta JSON en los candidatos.
  • text/plain (predeterminado): Salida de texto sin formato.
  • text/x.enum: Para las tareas de clasificación, muestra un valor de enumeración como se define en el esquema de respuesta.

Especifica el tipo de respuesta adecuado para evitar comportamientos no deseados. Por ejemplo, si necesitas una respuesta con formato JSON, especifica application/json y no text/plain.

responseSchema

Opcional: esquema

Disponible para los siguientes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash

Es el esquema que debe seguir el texto candidato generado. Para obtener más información, consulta Controla el resultado generado.

Debes especificar el campo responseMimeType para usar este parámetro.

seed

Opcional: int

Cuando el valor semilla se fija en un valor específico, el modelo hace su mejor esfuerzo para proporcionar la misma respuesta para las solicitudes repetidas. No se garantiza un resultado determinístico. Además, cambiar la configuración del modelo o del parámetro, como la temperatura, puede causar variaciones en la respuesta, incluso cuando usas el mismo valor semilla. Según la configuración predeterminada, se usa un valor semilla aleatorio.

Esta es una función de versión preliminar.

Disponible para los siguientes modelos:

  • gemini-1.5-pro
  • gemini-1.5-flash
  • gemini-1.0-pro-002

Cuerpo de la respuesta

{
  "candidates": [
    {
      "content": {
        "parts": [
          {
            "text": string
          }
        ]
      },
      "finishReason": enum (FinishReason),
      "safetyRatings": [
        {
          "category": enum (HarmCategory),
          "probability": enum (HarmProbability),
          "blocked": boolean
        }
      ],
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "uri": string,
            "title": string,
            "license": string,
            "publicationDate": {
              "year": integer,
              "month": integer,
              "day": integer
            }
          }
        ]
      },
      "avgLogprobs": double
    }
  ],
  "usageMetadata": {
    "promptTokenCount": integer,
    "candidatesTokenCount": integer,
    "totalTokenCount": integer
  }
}
Elemento de la respuesta Descripción
text El texto generado.
finishReason El motivo por el que el modelo dejó de generar tokens. Si está vacío, el modelo no dejó de generar los tokens. Debido a que la respuesta usa el mensaje para el contexto, no es posible cambiar el comportamiento de cómo el modelo deja de generar tokens.
  • FINISH_REASON_STOP: punto de detención natural del modelo o secuencia de detención proporcionada.
  • FINISH_REASON_MAX_TOKENS: se alcanzó la cantidad máxima de tokens especificada en la solicitud.
  • FINISH_REASON_SAFETY: La generación de tokens se detuvo porque la respuesta se marcó por motivos de seguridad. Ten en cuenta que Candidate.content está vacío si los filtros de contenido bloquean el resultado.
  • FINISH_REASON_RECITATION: la generación del token se detuvo porque la respuesta se marcó para citas no autorizadas.
  • FINISH_REASON_BLOCKLIST: La generación de tokens se detuvo porque la respuesta incluye términos bloqueados.
  • FINISH_REASON_PROHIBITED_CONTENT: La generación de tokens se detuvo porque la respuesta se marcó por contenido prohibido, como material de abuso sexual infantil (CSAM).
  • FINISH_REASON_SPII: La generación de tokens se detuvo porque la respuesta se marcó por incluir información de identificación personal sensible (IIPS).
  • FINISH_REASON_MALFORMED_FUNCTION_CALL: Se bloquearon los candidatos debido a una llamada a función con el formato incorrecto y que no se puede analizar.
  • FINISH_REASON_OTHER: Todos los demás motivos que detuvieron el token
  • FINISH_REASON_UNSPECIFIED: No se especifica el motivo de finalización.
category La categoría de seguridad para la que se configura un umbral. Los valores aceptables son los siguientes:

Haz clic para expandir las categorías de seguridad

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT
probability Los niveles de probabilidad de daños en el contenido.
  • HARM_PROBABILITY_UNSPECIFIED
  • NEGLIGIBLE
  • LOW
  • MEDIUM
  • HIGH
blocked Una marca booleana asociada con un atributo de seguridad que indica si la entrada o salida del modelo se bloqueó.
startIndex Un número entero que especifica dónde comienza una cita en el content.
endIndex Un número entero que especifica dónde termina una cita en content.
url Es la URL de una fuente de cita. Los ejemplos de una fuente de URL pueden ser un sitio web de noticias o un repositorio de GitHub.
title Es el título de una fuente de cita. Los ejemplos de títulos de origen pueden ser los de un artículo de noticias o un libro.
license Es la licencia asociada con una cita.
publicationDate La fecha en que se publicó una cita. Sus formatos válidos son YYYY, YYYY-MM y YYYY-MM-DD.
avgLogprobs Promedio de probabilidad logarítmica del candidato.
promptTokenCount Cantidad de tokens en la solicitud.
candidatesTokenCount Cantidad de tokens en las respuestas.
totalTokenCount Cantidad de tokens en la solicitud y las respuestas.

Ejemplos

Respuesta de texto sin transmisión

Genera una respuesta de modelo sin transmisión a partir de una entrada de texto.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el ID del modelo que deseas usar (por ejemplo, gemini-1.5-flash-002). Consulta la lista de modelos compatibles.
  • TEXT: las instrucciones de texto que se incluirán en el mensaje.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

Cuerpo JSON de la solicitud:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent" | Select-Object -Expand Content

Python

import vertexai
from vertexai.generative_models import GenerativeModel

# TODO(developer): Update & uncomment line below
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?"
)

print(response.text)

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generate_from_text_input(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const prompt =
    "What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

  const resp = await generativeModel.generateContent(prompt);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;

public class QuestionAnswer {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    String output = simpleQuestion(projectId, location, modelName);
    System.out.println(output);
  }

  // Asks a question to the specified Vertex AI Gemini model and returns the generated answer.
  public static String simpleQuestion(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String output;
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Send the question to the model for processing.
      GenerateContentResponse response = model.generateContent("Why is the sky blue?");
      // Extract the generated text from the model's response.
      output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func generateContentFromText(w io.Writer, projectID string) error {
	location := "us-central1"
	modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)
	prompt := genai.Text(
		"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?")

	resp, err := gemini.GenerateContent(ctx, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	// See the JSON response in
	// https://pkg.go.dev/cloud.google.com/go/vertexai/genai#GenerateContentResponse.
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class TextInputSample
{
    public async Task<string> TextInput(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();
        string prompt = @"What's a good name for a flower shop that specializes in selling bouquets of dried flowers?";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el nombre del modelo que se usará.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Cuerpo JSON de la solicitud:

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# # OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
)

print(response)

Respuesta multimodal sin transmisión

Genera una respuesta de modelo sin transmisión a partir de una entrada multimodal, como texto y una imagen.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el ID del modelo que deseas usar (por ejemplo, gemini-1.5-flash-002). Consulta la lista de modelos compatibles.
  • TEXT: las instrucciones de texto que se incluirán en el mensaje.
  • FILE_URI: El URI de Cloud Storage para el archivo que almacena los datos.
  • MIME_TYPE: El tipo de MIME de IANA de los datos.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent

Cuerpo JSON de la solicitud:

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      }
    ]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:generateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update & uncomment line below
# PROJECT_ID = "your-project-id"
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

response = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
        "What is shown in this image?",
    ]
)

print(response.text)

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createNonStreamingMultipartContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-flash-001',
  image = 'gs://generativeai-downloads/images/scones.jpg',
  mimeType = 'image/jpeg'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeVisionModel = vertexAI.getGenerativeModel({
    model: model,
  });

  // For images, the SDK supports both Google Cloud Storage URI and base64 strings
  const filePart = {
    fileData: {
      fileUri: image,
      mimeType: mimeType,
    },
  };

  const textPart = {
    text: 'what is shown in this image?',
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  console.log('Prompt Text:');
  console.log(request.contents[0].parts[1].text);

  console.log('Non-Streaming Response Text:');

  // Generate a response
  const response = await generativeVisionModel.generateContent(request);

  // Select the text from the response
  const fullTextResponse =
    response.response.candidates[0].content.parts[0].text;

  console.log(fullTextResponse);
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;

public class Multimodal {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    String output = nonStreamingMultimodal(projectId, location, modelName);
    System.out.println(output);
  }

  // Ask a simple question and get the response.
  public static String nonStreamingMultimodal(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Get the response from the model.
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ));

      // Extract the generated text from the model's response.
      String output = ResponseHandler.getText(response);
      return output;
    }
  }
}

Go

import (
	"context"
	"encoding/json"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

func tryGemini(w io.Writer, projectID string, location string, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"

	ctx := context.Background()
	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	gemini := client.GenerativeModel(modelName)

	img := genai.FileData{
		MIMEType: "image/jpeg",
		FileURI:  "gs://generativeai-downloads/images/scones.jpg",
	}
	prompt := genai.Text("What is in this image?")

	resp, err := gemini.GenerateContent(ctx, img, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}
	rb, err := json.MarshalIndent(resp, "", "  ")
	if err != nil {
		return fmt.Errorf("json.MarshalIndent: %w", err)
	}
	fmt.Fprintln(w, string(rb))
	return nil
}

C#


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Text;
using System.Threading.Tasks;

public class GeminiQuickstart
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001"
    )
    {
        // Create client
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        // Initialize content request
        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            GenerationConfig = new GenerationConfig
            {
                Temperature = 0.4f,
                TopP = 1,
                TopK = 32,
                MaxOutputTokens = 2048
            },
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "What's in this photo?" },
                        new Part { FileData = new() { MimeType = "image/png", FileUri = "gs://generativeai-downloads/images/scones.jpg" } }
                    }
                }
            }
        };

        // Make the request, returning a streaming response
        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        // Read streaming responses from server until complete
        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
        }

        return fullText.ToString();
    }
}

REST (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el nombre del modelo que se usará.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Cuerpo JSON de la solicitud:

{
  "model": "google/MODEL_ID",
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
)

print(response)

Respuesta de texto de transmisión

Genera una respuesta de modelo de transmisión a partir de una entrada de texto.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el ID del modelo que deseas usar (por ejemplo, gemini-1.5-flash-002). Consulta la lista de modelos compatibles.
  • TEXT: las instrucciones de texto que se incluirán en el mensaje.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

Cuerpo JSON de la solicitud:

{
  "contents": [{
    "role": "user",
    "parts": [{
      "text": "TEXT"
    }]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel

# TODO(developer): Update Project ID
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")
responses = model.generate_content(
    "Write a story about a magic backpack.", stream=True
)

for response in responses:
    print(response.text)

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});

  // Instantiate the model
  const generativeModel = vertexAI.getGenerativeModel({
    model: MODEL,
  });

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            text: 'Write a story about a magic backpack.',
          },
        ],
      },
    ],
  };

  console.log(JSON.stringify(request));

  const result = await generativeModel.generateContentStream(request);
  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.GenerativeModel;

public class StreamingQuestionAnswer {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    streamingQuestion(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingQuestion(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      // Stream the result.
      model.generateContentStream("Write a story about a magic backpack.")
          .stream()
          .forEach(System.out::println);

      System.out.println("Streaming complete.");
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

// generateContent shows how to	send a basic streaming text prompt, writing
// the response to the provided io.Writer.
func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, "us-central1")
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)

	iter := model.GenerateContentStream(
		ctx,
		genai.Text("Write a story about a magic backpack."),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}
		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
	}
}

REST (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el nombre del modelo que se usará.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Cuerpo JSON de la solicitud:

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": "Write a story about a magic backpack."
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True,
)
for chunk in response:
    print(chunk)

Respuesta multimodal de transmisión

Genera una respuesta de modelo de transmisión a partir de una entrada multimodal, como texto y una imagen.

REST

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el ID del modelo que deseas usar (por ejemplo, gemini-1.5-flash-002). Consulta la lista de modelos compatibles.
  • TEXT: las instrucciones de texto que se incluirán en el mensaje.
  • FILE_URI1: El URI de Cloud Storage para el archivo que almacena los datos.
  • MIME_TYPE1: El tipo de MIME de IANA de los datos.
  • FILE_URI2: El URI de Cloud Storage para el archivo que almacena los datos.
  • MIME_TYPE2: El tipo de MIME de IANA de los datos.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

Cuerpo JSON de la solicitud:

{
  "contents": [{
    "role": "user",
    "parts": [
      {
        "text": "TEXT"
      },
      {
        "fileData": {
          "fileUri": "FILE_URI1",
          "mimeType": "MIME_TYPE1"
        }
      },
      {
        "fileData": {
          "fileUri": "FILE_URI2",
          "mimeType": "MIME_TYPE2"
        }
      }
    ]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

Python

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update & un-comment the lines below
# PROJECT_ID = "your-project-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")
responses = model.generate_content(
    [
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/video/animals.mp4", "video/mp4"
        ),
        Part.from_uri(
            "gs://cloud-samples-data/generative-ai/image/character.jpg",
            "image/jpeg",
        ),
        "Are these video and image correlated?",
    ],
    stream=True,
)

for response in responses:
    print(response)

NodeJS

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = process.env.LOCATION;
const MODEL = 'gemini-1.5-flash-001';

async function generateContent() {
  // Initialize Vertex AI
  const vertexAI = new VertexAI({project: PROJECT_ID, location: LOCATION});
  const generativeModel = vertexAI.getGenerativeModel({model: MODEL});

  const request = {
    contents: [
      {
        role: 'user',
        parts: [
          {
            file_data: {
              file_uri: 'gs://cloud-samples-data/video/animals.mp4',
              mime_type: 'video/mp4',
            },
          },
          {
            file_data: {
              file_uri:
                'gs://cloud-samples-data/generative-ai/image/character.jpg',
              mime_type: 'image/jpeg',
            },
          },
          {text: 'Are this video and image correlated?'},
        ],
      },
    ],
  };

  const result = await generativeModel.generateContentStream(request);

  for await (const item of result.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;

public class StreamingMultimodal {
  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    streamingMultimodal(projectId, location, modelName);
  }

  // Ask a simple question and get the response via streaming.
  public static void streamingMultimodal(String projectId, String location, String modelName)
      throws Exception {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      GenerativeModel model = new GenerativeModel(modelName, vertexAI);

      String videoUri = "gs://cloud-samples-data/video/animals.mp4";
      String imgUri = "gs://cloud-samples-data/generative-ai/image/character.jpg";

      // Stream the result.
      model.generateContentStream(
          ContentMaker.fromMultiModalData(
              PartMaker.fromMimeTypeAndData("video/mp4", videoUri),
              PartMaker.fromMimeTypeAndData("image/jpeg", imgUri),
              "Are this video and image correlated?"
          ))
          .stream()
          .forEach(System.out::println);
    }
  }
}

Go

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
	"google.golang.org/api/iterator"
)

func generateContent(w io.Writer, projectID, modelName string) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, "us-central1")
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)
	iter := model.GenerateContentStream(
		ctx,
		genai.FileData{
			MIMEType: "video/mp4",
			FileURI:  "gs://cloud-samples-data/generative-ai/video/animals.mp4",
		},
		genai.FileData{
			MIMEType: "video/jpeg",
			FileURI:  "gs://cloud-samples-data/generative-ai/image/character.jpg",
		},
		genai.Text("Are these video and image correlated?"),
	)
	for {
		resp, err := iter.Next()
		if err == iterator.Done {
			return nil
		}
		if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
			return errors.New("empty response from model")
		}
		if err != nil {
			return err
		}

		fmt.Fprint(w, "generated response: ")
		for _, c := range resp.Candidates {
			for _, p := range c.Content.Parts {
				fmt.Fprintf(w, "%s ", p)
			}
		}
		fmt.Fprint(w, "\n")
	}
}

REST (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: El ID del proyecto.
  • LOCATION: La región para procesar la solicitud.
  • MODEL_ID: Es el nombre del modelo que se usará.

Método HTTP y URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions

Cuerpo JSON de la solicitud:

{
  "model": "google/MODEL_ID",
  "stream": true,
  "messages": [{
    "role": "user",
    "content": [
       {
          "type": "text",
          "text": "Describe the following image:"
       },
       {
          "type": "image_url",
          "image_url": {
             "url": "gs://generativeai-downloads/images/character.jpg"
          }
       }
     ]
  }]
}

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/endpoints/openapi/chat/completions" | Select-Object -Expand Content

Python (OpenAI)

Puedes llamar a la API de Inference con la biblioteca de OpenAI. Para obtener más información, consulta Cómo llamar a modelos de Vertex AI con la biblioteca de OpenAI.

import vertexai
import openai

from google.auth import default, transport

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# location = "us-central1"

vertexai.init(project=project_id, location=location)

# Programmatically get an access token
credentials, _ = default(scopes=["https://www.googleapis.com/auth/cloud-platform"])
auth_request = transport.requests.Request()
credentials.refresh(auth_request)

# OpenAI Client
client = openai.OpenAI(
    base_url=f"https://{location}-aiplatform.googleapis.com/v1beta1/projects/{project_id}/locations/{location}/endpoints/openapi",
    api_key=credentials.token,
)

response = client.chat.completions.create(
    model="google/gemini-1.5-flash-002",
    messages=[
        {
            "role": "user",
            "content": [
                {"type": "text", "text": "Describe the following image:"},
                {
                    "type": "image_url",
                    "image_url": "gs://cloud-samples-data/generative-ai/image/scones.jpg",
                },
            ],
        }
    ],
    stream=True,
)
for chunk in response:
    print(chunk)

Versiones del modelo

Para usar la versión actualizada automáticamente, especifica el nombre del modelo sin el número de versión final, por ejemplo, gemini-1.5-flash en lugar de gemini-1.5-flash-001.

Para obtener más información, consulta Versiones de modelos y ciclo de vida de Gemini.

¿Qué sigue?