Generar contenido con la API de Gemini en Vertex AI

Usa generateContent o streamGenerateContent para generar contenido con Gemini.

La familia de modelos Gemini incluye modelos que funcionan con peticiones multimodales. El término multimodal indica que puedes usar más de una modalidad o tipo de entrada en una petición. Los modelos que no son multimodales solo aceptan peticiones con texto. Las modalidades pueden ser texto, audio, vídeo, etc.

Crea una cuenta de Google Cloud para empezar

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

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

Cuando lo tengas todo listo, consulta la guía de inicio rápido de la API de Gemini en Vertex AI para saber cómo enviar una solicitud a la API de Gemini en Vertex AI mediante un SDK de lenguaje de programación o la API REST.

Modelos admitidos

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

Lista de parámetros

Consulta los ejemplos para obtener más información 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
  },
  "labels": {
    string: string
  }
}

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

Parámetros

cachedContent

Opcional: string

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

contents

Obligatorio: Content

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

En el caso de las consultas de un solo turno, se trata de una sola instancia. En las consultas multiturno, se trata de un campo repetido que contiene el historial de la conversación y la última solicitud.

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 tienen en cuenta para el límite de tokens.

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

tools

Opcional. Fragmento de código que permite al sistema interactuar con sistemas externos para realizar una acción o un conjunto de acciones fuera del conocimiento y del ámbito del modelo. Consulta Llamadas a funciones.

toolConfig

Opcional. Consulta Llamadas a funciones.

safetySettings

Opcional: SafetySetting

Ajustes por solicitud para bloquear contenido no seguro.

Fecha de implementación: GenerateContentResponse.candidates.

generationConfig

Opcional: GenerationConfig

Ajustes de configuración de la generación.

labels

Opcional: string

Metadatos que puede añadir a la llamada a la API en formato de pares clave-valor.

contents

Tipo de datos estructurados base que contiene el 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 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 ha enviado una persona real, normalmente un usuario.
  • model: indica que el mensaje lo ha generado el modelo.

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

parts

Part

Lista de partes ordenadas que componen un único mensaje. Las distintas partes pueden tener diferentes tipos MIME de IANA.

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

Para calcular el número de tokens de tu solicitud, consulta Obtener el recuento de tokens.

parts

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

Parámetros

text

Opcional: string

Una petición de texto o un fragmento de código.

inlineData

Opcional: Blob

Datos insertados en bytes sin procesar.

En el caso de gemini-2.0-flash-lite y gemini-2.0-flash, puedes especificar hasta 3000 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 los parámetros de la llamada a la función predicha por el modelo.

Consulta Llamadas a funciones.

functionResponse

Opcional: FunctionResponse.

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

Consulta Llamadas a funciones.

videoMetadata

Opcional: VideoMetadata

En el caso de los vídeos, el desplazamiento de inicio y finalización del vídeo en formato Duración y la frecuencia de imagen del vídeo . Por ejemplo, para especificar un fragmento de 10 segundos que empiece en 1:00 con una velocidad de fotogramas de 10 fotogramas por segundo, defina lo siguiente:

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

Los metadatos solo deben especificarse mientras se presentan los datos del vídeo en inlineData o fileData.

blob

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

Parámetros

mimeType

string

El tipo de contenido multimedia del archivo especificado en los campos data o fileUri. Entre los valores aceptados se incluyen los siguientes:

Haz clic para desplegar 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 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 de un archivo de vídeo (sin audio) es de una hora. Para obtener más información, consulta los requisitos de audio y vídeo de Gemini.

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

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

data

bytes

La codificación Base64 de la imagen, el PDF o el vídeo que se va a incluir en la petición. Cuando incluyas contenido multimedia insertado, también debes especificar el tipo de contenido multimedia (mimeType) de los datos.

Límite de tamaño: 20 MB

FileData

Datos de URI o URL web.

Parámetros

mimeType

string

Tipo MIME de IANA de los datos.

fileUri

string

La URI o la URL del archivo que se va a incluir en la petición. Entre los valores aceptables se incluyen los siguientes:

  • URI del segmento de Cloud Storage: el objeto debe ser de lectura pública o estar en el mismo proyecto Google Cloud que envía la solicitud. En 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 de lectura pública. Puedes especificar un archivo de vídeo, un archivo de audio y hasta 10 archivos de imagen por solicitud. Los archivos de audio, vídeo y documentos no pueden superar los 15 MB.
  • URL del vídeo de YouTube: el vídeo de YouTube debe ser propiedad de la cuenta que has usado para iniciar sesión en la Google Cloud consola o debe ser público. Solo se admite una URL de vídeo de YouTube por solicitud.

Cuando especifiques un fileURI, también debes especificar el tipo de contenido multimedia (mimeType) del archivo. Si Controles de Servicio de VPC está habilitado, no se admite especificar una URL de archivo multimedia para fileURI.

functionCall

Un functionCall predicho devuelto por 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

Nombre de la función a la que se debe llamar.

args

Struct

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

Consulta los detalles de los parámetros en Llamadas a funciones.

functionResponse

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

Parámetros

name

string

Nombre de la función a la que se debe llamar.

response

Struct

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

videoMetadata

Metadatos que describen el contenido de vídeo de entrada.

Parámetros

startOffset

Opcional: google.protobuf.Duration

El desplazamiento inicial del vídeo.

endOffset

Opcional: google.protobuf.Duration

El desplazamiento final del vídeo.

fps

Opcional: double

La frecuencia de fotogramas del vídeo enviado al modelo. Si no se especifica, se asigna el valor 1.0 de forma predeterminada. El valor mínimo aceptado es 0.0, pero no se incluye. El valor máximo es 24.0.

safetySetting

Ajustes de seguridad.

Parámetros

category

Opcional: HarmCategory

La categoría de seguridad para la que se va a configurar un umbral. Entre los valores aceptados se incluyen los siguientes:

Haz clic para desplegar las categorías de seguridad.

  • HARM_CATEGORY_SEXUALLY_EXPLICIT
  • HARM_CATEGORY_HATE_SPEECH
  • HARM_CATEGORY_HARASSMENT
  • HARM_CATEGORY_DANGEROUS_CONTENT

threshold

Opcional: HarmBlockThreshold

Umbral para bloquear las respuestas que podrían pertenecer a la categoría de seguridad especificada en función de la probabilidad.

  • OFF
  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

method

Opcional: HarmBlockMethod

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

harmCategory

Categorías de daño que bloquean contenido.

Parámetros

HARM_CATEGORY_UNSPECIFIED

La categoría de daño no se ha especificado.

HARM_CATEGORY_HATE_SPEECH

La categoría de contenido dañino es incitación al odio.

HARM_CATEGORY_DANGEROUS_CONTENT

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

HARM_CATEGORY_HARASSMENT

La categoría de daño es acoso.

HARM_CATEGORY_SEXUALLY_EXPLICIT

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

harmBlockThreshold

Niveles de umbral de probabilidad que se usan para bloquear una respuesta.

Parámetros

HARM_BLOCK_THRESHOLD_UNSPECIFIED

Umbral de bloqueo de daños no especificado.

BLOCK_LOW_AND_ABOVE

Bloquear el umbral bajo y los valores superiores (es decir, bloquear más contenido).

BLOCK_MEDIUM_AND_ABOVE

Bloquea el umbral medio y los superiores.

BLOCK_ONLY_HIGH

Bloquear solo el umbral alto (es decir, bloquear menos).

BLOCK_NONE

No bloquear nada.

OFF

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

harmBlockMethod

Umbral de probabilidad que bloquea una respuesta en función de una combinación de probabilidad y gravedad.

Parámetros

HARM_BLOCK_METHOD_UNSPECIFIED

No se ha especificado el método de bloqueo de daños.

SEVERITY

El método de bloqueo de contenido dañino usa tanto la probabilidad como la gravedad.

PROBABILITY

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

generationConfig

Ajustes de configuración que se usan al generar la petición.

Parámetros

temperature

Opcional: float

La temperatura se usa para el muestreo durante la generación de respuestas, que se produce cuando se aplican topP y topK. La temperatura controla el grado de aleatoriedad en la selección de tokens. Las temperaturas más bajas son adecuadas para las peticiones que requieren una respuesta menos abierta o creativa, mientras que las temperaturas más altas pueden dar lugar a resultados más diversos o creativos. Una temperatura de 0 significa que siempre se seleccionan los tokens con la probabilidad más alta. En este caso, las respuestas a una petición determinada son mayormente deterministas, pero sigue siendo posible que haya una pequeña variación.

Si el modelo devuelve una respuesta demasiado genérica o demasiado corta, o bien una respuesta alternativa, prueba a aumentar la temperatura.

  • Intervalo de gemini-2.0-flash-lite: 0.0 - 2.0 (valor predeterminado: 1.0)
  • Intervalo de gemini-2.0-flash: 0.0 - 2.0 (valor 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úcleo.

Top-P cambia la forma en que el modelo selecciona los tokens de salida. Los tokens se seleccionan de más a menos probables (consulta el valor K superior) hasta que la suma de sus probabilidades sea igual al valor P superior. Por ejemplo, si los tokens A, B y C tienen una probabilidad de 0,3, 0,2 y 0,1, y el valor de top-P es 0.5, el modelo seleccionará A o B como el siguiente token mediante la temperatura y excluirá C como candidato.

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

  • Intervalo: 0.0 - 1.0
  • Valor predeterminado de gemini-2.0-flash-lite: 0.95
  • Valor predeterminado de gemini-2.0-flash: 0.95

candidateCount

Opcional: int

Número de variaciones de respuesta que se deben devolver. Por cada solicitud, se te cobrarán los tokens de salida de todos los candidatos, pero solo se te cobrarán una vez los tokens de entrada.

Especificar varios candidatos es una función de vista previa que funciona con generateContent (streamGenerateContent no es compatible). 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

Número máximo de tokens que se pueden generar en la respuesta. Un token tiene aproximadamente cuatro caracteres. 100 tokens corresponden aproximadamente a entre 60 y 80 palabras.

Especifica un valor inferior para las respuestas más cortas y un valor superior para las respuestas que puedan ser 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 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, esta se truncará en el punto en el que se encuentre por primera vez. Las cadenas distinguen entre mayúsculas y minúsculas.

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

public static string reverse(string myString)

Entonces, la respuesta devuelta con stopSequences definido 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 de presencePenalty es 2.0, pero no se incluye. 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 reduce la probabilidad de que se repita el contenido.

El valor máximo de frequencyPenalty es 2.0, pero no se incluye. Su valor mínimo es -2.0.

responseMimeType

Opcional: string (enum)

El tipo MIME de la respuesta de salida del texto candidato generado.

Se admiten los siguientes tipos MIME:

  • application/json: respuesta JSON en los candidatos.
  • text/plain (predeterminado): salida de texto sin formato.
  • text/x.enum: En las tareas de clasificación, se debe generar un valor de enumeración tal 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 en formato JSON, especifica application/json y no text/plain.

text/plain no se puede usar con responseSchema.

responseSchema

Opcional: schema

El esquema que ha generado el texto candidato debe seguirse. Para obtener más información, consulta Controlar el resultado generado.

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

seed

Opcional: int

Cuando la semilla se fija en un valor específico, el modelo hace todo lo posible para proporcionar la misma respuesta a las solicitudes repetidas. No se garantiza que la salida sea determinista. Además, si cambias el modelo o los ajustes de los parámetros, como la temperatura, pueden producirse variaciones en la respuesta aunque uses el mismo valor de semilla. De forma predeterminada, se usa un valor de semilla aleatorio.

responseLogprobs

Opcional: boolean

Si es true, devuelve las probabilidades logarítmicas de los tokens que ha elegido el modelo en cada paso. De forma predeterminada, este parámetro tiene el valor false.

logprobs

Opcional: int

Devuelve las probabilidades logarítmicas de los tokens candidatos principales en cada paso de generación. Es posible que el token elegido por el modelo no sea el mismo que el token candidato principal en cada paso. Especifique el número de candidatos que se van a devolver mediante un valor entero comprendido entre 1 y 20.

Para usar este parámetro, debe habilitar responseLogprobs.

audioTimestamp

Opcional: boolean

Disponible para los siguientes modelos:

  • Gemini 2.0 Flash-Lite
  • Gemini 2.0 Flash

Habilita la interpretación de marcas de tiempo en archivos de solo audio.

Esta es una función de vista previa.

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 respuesta Descripción
modelVersion El modelo y la versión que se han usado para la generación. Por ejemplo: gemini-2.0-flash-lite-001.
text El texto generado.
finishReason El motivo por el que el modelo ha dejado de generar tokens. Si está vacío, el modelo no ha dejado de generar los tokens. Como la respuesta usa la petición para el contexto, no es posible cambiar el comportamiento del modelo para que deje de generar tokens.
  • FINISH_REASON_STOP: Punto de parada natural del modelo o secuencia de parada proporcionada.
  • FINISH_REASON_MAX_TOKENS: Se ha alcanzado el número máximo de tokens especificado en la solicitud.
  • FINISH_REASON_SAFETY: Se ha detenido la generación de tokens porque la respuesta se ha marcado por motivos de seguridad. Ten en cuenta que Candidate.content está vacío si los filtros de contenido bloquean la salida.
  • FINISH_REASON_RECITATION: Se ha detenido la generación de tokens porque la respuesta se ha marcado por incluir citas no autorizadas.
  • FINISH_REASON_BLOCKLIST: Se ha detenido la generación de tokens porque la respuesta incluye términos bloqueados.
  • FINISH_REASON_PROHIBITED_CONTENT: Se ha detenido la generación de tokens porque la respuesta se ha marcado por contener contenido prohibido, como material de abuso sexual infantil.
  • FINISH_REASON_SPII: Se ha detenido la generación de tokens porque se ha detectado información personal identificable sensible (IPIS) en la respuesta.
  • FINISH_REASON_MALFORMED_FUNCTION_CALL: se han bloqueado candidatos debido a una llamada a función mal formada y no analizable.
  • FINISH_REASON_OTHER: todos los demás motivos por los que se ha detenido el token
  • FINISH_REASON_UNSPECIFIED: el motivo de finalización no se ha especificado.
category La categoría de seguridad para la que se va a configurar un umbral. Entre los valores aceptados se incluyen los siguientes:

Haz clic para desplegar 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ño del contenido.
  • HARM_PROBABILITY_UNSPECIFIED
  • NEGLIGIBLE
  • LOW
  • MEDIUM
  • HIGH
blocked Un indicador booleano asociado a un atributo de seguridad que indica si se ha bloqueado la entrada o la salida del modelo.
startIndex Número entero que especifica dónde empieza una cita en el content. El valor de startIndex está en bytes y se calcula a partir de la respuesta codificada en UTF-8.
endIndex Número entero que especifica dónde termina una cita en el content. El valor de endIndex está en bytes y se calcula a partir de la respuesta codificada en UTF-8.
url URL de la fuente de una cita. Por ejemplo, una fuente de URL puede ser un sitio web de noticias o un repositorio de GitHub.
title El título de una fuente de cita. Por ejemplo, el título de una fuente puede ser el de un artículo de noticias o el de un libro.
license Es la licencia asociada a una cita.
publicationDate Fecha en la que se publicó la cita. Los formatos válidos son YYYY, YYYY-MM y YYYY-MM-DD.
avgLogprobs Probabilidad logarítmica media del candidato.
logprobsResult Devuelve los tokens candidatos principales (topCandidates) y los tokens elegidos (chosenCandidates) en cada paso.
token Los modelos de IA generativa desglosan los datos de texto en tokens para procesarlos, que pueden ser caracteres, palabras o frases.
logProbability Valor de probabilidad logarítmica que indica la confianza del modelo en un token concreto.
promptTokenCount Número de tokens de la solicitud.
candidatesTokenCount Número de tokens de las respuestas.
totalTokenCount Número 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 Inference mediante la biblioteca de OpenAI. Para obtener más información, consulta 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
}

Usar una petición multimodal

Generar una respuesta de texto a partir de una entrada multimodal, como texto e 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 Inference mediante la biblioteca de OpenAI. Para obtener más información, consulta 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 en streaming

Genera una respuesta de modelo de streaming 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 Inference mediante la biblioteca de OpenAI. Para obtener más información, consulta 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 y ciclo de vida del modelo de Gemini.

Siguientes pasos