Genera contenido con la API de Gemini en Vertex AI

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 Gemini en Vertex AI, crea una Google Cloud cuenta.

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 Gemini en Vertex AI para aprender a enviar una solicitud a la API de Gemini en Vertex AI con un SDK de lenguaje de programación o la API de REST.

Modelos compatibles

Todos los modelos de Gemini admiten la generación de contenido.

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
            },
            "fps": double
          }
        }
      ]
    }
  ],
  "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,
    "responseLogprobs": boolean,
    "logprobs": integer,
    "audioTimestamp": boolean,
    "thinkingConfig": {
      "thinkingBudget": integer
    }
  },
  "labels": {
    string: string
  }
}

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

Parámetros

cachedContent

Opcional: string

Nombre del contenido almacenado en caché que se usa como contexto para entregar la predicción. Formato: projects/{project}/locations/{location}/cachedContents/{cachedContent}

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-2.0-flash y gemini-2.0-flash-lite.

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

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.

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-2.0-flash-lite y gemini-2.0-flash, puedes especificar hasta 3,000 imágenes con inlineData.

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 formato de Duración y la velocidad de fotogramas del video . Por ejemplo, para especificar un clip de 10 segundos a partir de la 1:00 con una velocidad de fotogramas de 10 fotogramas por segundo, configura lo siguiente:

  • "startOffset": { "seconds": 60 }
  • "endOffset": { "seconds": 70 }
  • "fps": 10.0

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-2.0-flash-lite y gemini-2.0-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 los requisitos de audio y video de Gemini.

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

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 Google Cloud que envía la solicitud. Para gemini-2.0-flash y gemini-2.0-flash-lite, el límite de tamaño es de 2 GB.
  • URL HTTP: La URL del archivo debe ser legible públicamente. Puedes especificar un archivo de video, un archivo de audio y hasta 10 archivos de imagen por solicitud. Los archivos de audio, los archivos de video 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. Si los Controles del servicio de VPC están habilitados, no se admite especificar una URL de archivo multimedia para fileURI.

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.

fps

Opcional: double

Es la velocidad de fotogramas del video que se envía al modelo. El valor predeterminado es 1.0 si no se especifica. El valor mínimo aceptado es tan bajo como 0.0, sin incluirlo. El valor máximo es 24.0.

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_MEDIUM_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 de daño 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-2.0-flash-lite: 0.0 - 2.0 (predeterminado: 1.0)
  • Rango para gemini-2.0-flash: 0.0 - 2.0 (predeterminado: 1.0)

Para obtener más información, consulta Parámetros de generación de contenido.

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-2.0-flash-lite: 0.95
  • Configuración predeterminada para gemini-2.0-flash: 0.95

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-2.0-flash-lite: 1-8, valor predeterminado: 1
  • gemini-2.0-flash: 1-8, valor 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.

Para obtener más información, consulta Parámetros de generación de contenido.

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.

Para obtener más información, consulta Parámetros de generación de contenido.

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.

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.

responseMimeType

Opcional: string (enum)

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.

text/plain no es compatible con responseSchema.

responseSchema

Opcional: esquema

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

Para usar este parámetro, debes especificar un tipo de MIME admitido que no sea text/plain para el parámetro responseMimeType.

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.

responseLogprobs

Opcional: boolean

Si es verdadero, muestra las probabilidades de registro de los tokens que eligió el modelo en cada paso. El valor predeterminado de este parámetro es false.

logprobs

Opcional: int

Devuelve las probabilidades de registro de los tokens candidatos principales en cada paso de generación. El token elegido por el modelo podría no ser el mismo que el token candidato principal en cada paso. Especifica la cantidad de candidatos que se mostrarán con un valor de número entero en el rango de 1 a 20.

Debes habilitar responseLogprobs para usar este parámetro.

audioTimestamp

Opcional: boolean

Disponible para los siguientes modelos:

  • Gemini 2.0 Flash-Lite
  • Gemini 2.0 Flash

Habilita la comprensión de marcas de tiempo para archivos de solo audio.

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

thinkingConfig

Opcional: object

Es la configuración del proceso de pensamiento del modelo para los modelos de Gemini 2.5.

El objeto thinkingConfig contiene el siguiente campo:

  • thinkingBudget: integer. De forma predeterminada, el modelo controla automáticamente cuántos tokens considera, hasta un máximo de 8,192.

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,
      "logprobsResult": {
        "topCandidates": [
          {
            "candidates": [
              {
                "token": string,
                "logProbability": float
              }
            ]
          }
        ],
        "chosenCandidates": [
          {
            "token": string,
            "logProbability": float
          }
        ]
      }
    }
  ],
  "usageMetadata": {
    "promptTokenCount": integer,
    "candidatesTokenCount": integer,
    "totalTokenCount": integer
  },
  "modelVersion": string
}
Elemento de la respuesta Descripción
modelVersion El modelo y la versión que se usaron para la generación. Por ejemplo: gemini-2.0-flash-lite-001.
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 Es un número entero que especifica dónde comienza una cita en el content. El startIndex está en bytes y se calcula a partir de la respuesta codificada en UTF-8.
endIndex Un número entero que especifica dónde termina una cita en content. El endIndex está en bytes y se calcula a partir de la respuesta codificada en UTF-8.
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.
logprobsResult Devuelve los tokens candidatos principales (topCandidates) y los tokens elegidos reales (chosenCandidates) en cada paso.
token Los modelos de IA generativa dividen los datos de texto en tokens para su procesamiento, que pueden ser caracteres, palabras o frases.
logProbability Un valor de probabilidad de registro que indica la confianza del modelo para un token en particular.
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

Generación de texto

Genera una respuesta de texto a partir de una entrada de texto.

SDK de IA generativa para Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="How does AI work?",
)
print(response.text)
# Example response:
# Okay, let's break down how AI works. It's a broad field, so I'll focus on the ...
#
# Here's a simplified overview:
# ...

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.

from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

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

print(response)

Go

import (
	"context"
	"fmt"
	"io"

	"google.golang.org/genai"
)

// generateWithText shows how to generate text using a text prompt.
func generateWithText(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	resp, err := client.Models.GenerateContent(ctx,
		"gemini-2.5-flash",
		genai.Text("How does AI work?"),
		nil,
	)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	respText := resp.Text()

	fmt.Fprintln(w, respText)
	// Example response:
	// That's a great question! Understanding how AI works can feel like ...
	// ...
	// **1. The Foundation: Data and Algorithms**
	// ...

	return nil
}

Cómo usar la instrucción multimodal

Genera una respuesta de texto a partir de una entrada multimodal, como texto y una imagen.

SDK de IA generativa para Python

from google import genai
from google.genai.types import HttpOptions, Part

client = genai.Client(http_options=HttpOptions(api_version="v1"))
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=[
        "What is shown in this image?",
        Part.from_uri(
            file_uri="gs://cloud-samples-data/generative-ai/image/scones.jpg",
            mime_type="image/jpeg",
        ),
    ],
)
print(response.text)
# Example response:
# The image shows a flat lay of blueberry scones arranged on parchment paper. There are ...

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.


from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

response = client.chat.completions.create(
    model="google/gemini-2.0-flash-001",
    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)

Go

import (
	"context"
	"fmt"
	"io"

	genai "google.golang.org/genai"
)

// generateWithTextImage shows how to generate text using both text and image input
func generateWithTextImage(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	modelName := "gemini-2.5-flash"
	contents := []*genai.Content{
		{Parts: []*genai.Part{
			{Text: "What is shown in this image?"},
			{FileData: &genai.FileData{
				// Image source: https://storage.googleapis.com/cloud-samples-data/generative-ai/image/scones.jpg
				FileURI:  "gs://cloud-samples-data/generative-ai/image/scones.jpg",
				MIMEType: "image/jpeg",
			}},
		},
			Role: "user"},
	}

	resp, err := client.Models.GenerateContent(ctx, modelName, contents, nil)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	respText := resp.Text()

	fmt.Fprintln(w, respText)

	// Example response:
	// The image shows an overhead shot of a rustic, artistic arrangement on a surface that ...

	return nil
}

Respuesta de texto de transmisión

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

SDK de IA generativa para Python

from google import genai
from google.genai.types import HttpOptions

client = genai.Client(http_options=HttpOptions(api_version="v1"))

for chunk in client.models.generate_content_stream(
    model="gemini-2.5-flash",
    contents="Why is the sky blue?",
):
    print(chunk.text, end="")
# Example response:
# The
#  sky appears blue due to a phenomenon called **Rayleigh scattering**. Here's
#  a breakdown of why:
# ...

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.

from google.auth import default
import google.auth.transport.requests

import openai

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

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

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

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

Go

import (
	"context"
	"fmt"
	"io"

	genai "google.golang.org/genai"
)

// generateWithTextStream shows how to generate text stream using a text prompt.
func generateWithTextStream(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	modelName := "gemini-2.5-flash"
	contents := genai.Text("Why is the sky blue?")

	for resp, err := range client.Models.GenerateContentStream(ctx, modelName, contents, nil) {
		if err != nil {
			return fmt.Errorf("failed to generate content: %w", err)
		}

		chunk := resp.Text()

		fmt.Fprintln(w, chunk)
	}

	// Example response:
	// The
	//  sky is blue
	//  because of a phenomenon called **Rayleigh scattering**. Here's the breakdown:
	// ...

	return nil
}

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-2.0-flash en lugar de gemini-2.0-flash-001.

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

¿Qué sigue?