API de inferencia

Usa la API de inferencia para generar instrucciones de 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.

Para obtener más información, consulta lo siguiente:

Modelos compatibles:

Modelo Versión
Gemini 1.5 Flash (versión preliminar) gemini-1.5-flash-preview-0514
Gemini 1.5 Pro (versión preliminar) gemini-1.5-pro-preview-0514
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

Limitaciones:

Si proporcionas muchas imágenes, la latencia puede ser alta.

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": [{
    ...
  }],
  "generation_config": {
    ...
  },
  "safety_settings": {
    ...
  }
  ...
}'

Python

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

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

De 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": [{
      ...
    }],
    "generation_config": {
      ...
    },
    "safety_settings": {
      ...
    }
    ...
  }'

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

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

Parámetros

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.

system_instruction

Opcional: Content

Las instrucciones del sistema que proporcionó el usuario para el modelo.

Nota: Solo se debe usar text en parts, y el contenido de cada part debe estar en un párrafo independiente.

tools

Opcional. Consulta API de llamada a función.

tool_config

Opcional. Consulta API de llamada a función.

safety_settings

Opcional: SafetySetting

Configuración por solicitud para bloquear contenido no seguro.

Se aplicó de manera forzosa en GenerateContentResponse.candidates.

generation_config

Opcional: GenerationConfig

Los ajustes de configuración de generación.

Contenido

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.

Part

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.

inline_data

Opcional: Blob

Datos intercalados en bytes sin procesar.

file_data

Opcional: FileData

Datos almacenados en un archivo.

function_call

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 API de llamada a función.

function_response

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 API de llamada a función.

video_metadata

Opcional: VideoMetadata

Metadatos del video. Los metadatos solo se deben especificar mientras los datos de video se presentan en inline_data o file_data.

BLOB

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

Parámetros

mime_type

string

Tipo de MIME de IANA de los datos.

data

bytes

Bytes sin procesar.

FileData

Datos basados en URI.

Parámetros

mime_type

string

Tipo de MIME de IANA de los datos.

file_uri

string

El URI de Cloud Storage para el archivo que almacena los datos

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 API de llamada a función 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

start_offset

Opcional: google.protobuf.Duration

El desplazamiento inicial del video.

end_offset

Opcional: google.protobuf.Duration

El desplazamiento final del video.

SafetySetting

Configuración de seguridad.

Parámetros

category

Opcional: HarmCategory

La categoría de daño.

threshold

Opcional: HarmBlockThreshold

El umbral de bloqueo de daño.

max_influential_terms

Opcional: int

La cantidad máxima de términos influyentes que contribuyen más a las puntuaciones de seguridad, lo que podría causar un posible bloqueo.

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.

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

Controla la aleatorización de las predicciones.

top_p

Opcional: float

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

top_k

Opcional: Si se especifica, se usa el muestreo de Top-K.

candidate_count

Opcional: int

Cantidad de candidatos que se generarán.

max_output_tokens

Opcional: int

La cantidad máxima de tokens de salida que se generarán por mensaje.

stop_sequences

Opcional: List[string]

Detén las secuencias.

presence_penalty

Opcional: float

Penalizaciones positivas.

frequency_penalty

Opcional: float

Penalizaciones de frecuencia.

response_mime_type

Opcional: string (enum)

Mimetype de respuesta de salida del texto candidato generado.

Mimetype compatible:

  • text/plain: la salida de texto (configuración predeterminada).
  • application/json: la respuesta JSON en los candidatos.
  • Se debe solicitar al modelo que genere el tipo de respuesta adecuado; de lo contrario, el comportamiento no está definido.

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

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.
  • 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

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

model = GenerativeModel(MODEL_ID)
response = model.generate_content("Write a story about a magic backpack.")

print(response)

NodeJS

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generateContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-002'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, 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.generateContent(request);

  console.log(result.response.candidates[0].content.parts[0].text);
}

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.
  • 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 TIANA 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"
    },
    {
      "file_data": {"file_uri": "FILE_URI", "MIME_TYPE"}
    },
    {
      "file_data": {"file_uri": "FILE_URI", "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

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

model = GenerativeModel(MODEL_ID)
response = 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?",
    ]
)

print(response)

NodeJS

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generateContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-pro-preview-0409'
) {
  // Initialize Vertex AI
  const vertexAI = new VertexAI({project: projectId, 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.generateContent(request);

  console.log(result.response.candidates[0].content.parts[0].text);
}

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.
  • 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

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

model = GenerativeModel(MODEL_ID)
responses = model.generate_content(
    "Write a story about a magic backpack.", stream=True
)

for response in responses:
    print(response)

NodeJS

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function generateContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-002'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, 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);
  }
}

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.
  • 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, Part

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

model = GenerativeModel(MODEL_ID)
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.
 */
async function generateContent(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-pro-preview-0409'
) {
  // Initialize Vertex AI
  const vertexAI = new VertexAI({project: projectId, 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);
  }
}

¿Qué sigue?