Generación de texto

En esta página, se muestra cómo enviar mensajes de chat a un modelo de Gemini con la console de Google Cloud, la API de REST y los SDK compatibles.

Si deseas obtener información para agregar imágenes y otros elementos multimedia a tu solicitud, consulta Comprensión de imágenes.

Para obtener una lista de los idiomas compatibles con Gemini, consulta Idiomas admitidos.


Para explorar las APIs y los modelos de IA generativa y que están disponibles en Vertex AI, ve a Model Garden en la consola de Google Cloud.

Ir a Model Garden


Si buscas una manera de usar Gemini directamente desde tus apps web y tus dispositivos móviles, consulta los SDK de Vertex AI in Firebase para apps de Android, Swift, Web y Flutter.

Para probar y, luego, iterar los mensajes de chat, recomendamos usar la consola de Google Cloud. Para enviar mensajes de manera programática al modelo, puedes usar la API de REST, el SDK de Vertex AI para Python o una de las otras bibliotecas y SDK compatibles que se muestran en las siguientes pestañas.

Python

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación del SDK de Vertex AI de referencia de la API de Vertex para Python.

Respuestas de transmisión y sin transmisión

Puedes elegir si el modelo genera respuestas de transmisión o sin transmisión. Para las respuestas de transmisión, recibirás cada respuesta en cuanto se genere su token de salida. En el caso de las respuestas sin transmisión continua, recibes todas las respuestas después de que se generan todos los tokens de salida.

Para una respuesta de transmisión, usa el parámetro stream en generate_content.

  response = model.generate_content(contents=[...], stream = True)
  

Para una respuesta sin transmisión, quita el parámetro o configúralo como False.

Código de muestra

import vertexai

from vertexai.generative_models import GenerativeModel, ChatSession

# TODO (developer): update project_id
vertexai.init(project=PROJECT_ID, location="us-central1")

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

chat = model.start_chat()

def get_chat_response(chat: ChatSession, prompt: str) -> str:
    text_response = []
    responses = chat.send_message(prompt, stream=True)
    for chunk in responses:
        text_response.append(chunk.text)
    return "".join(text_response)

prompt = "Hello."
print(get_chat_response(chat, prompt))

prompt = "What are all the colors in a rainbow?"
print(get_chat_response(chat, prompt))

prompt = "Why does it appear when it rains?"
print(get_chat_response(chat, prompt))

C#

Antes de probar este ejemplo, sigue las instrucciones de configuración de C# en la guía de inicio rápido de Vertex AI. Para obtener más información, consulta la documentación de referencia de C# de Vertex AI.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Respuestas de transmisión y sin transmisión

Puedes elegir si el modelo genera respuestas de transmisión o sin transmisión. Para las respuestas de transmisión, recibirás cada respuesta en cuanto se genere su token de salida. En el caso de las respuestas sin transmisión continua, recibes todas las respuestas después de que se generan todos los tokens de salida.

Para una respuesta de transmisión, usa el método StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Para una respuesta sin transmisión, usa el método GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Para obtener más información acerca de cómo el servidor puede transmitir respuestas, consulta RPC de transmisión.

Código de muestra


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

public class MultiTurnChatSample
{
    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 a chat session to keep track of the context
        ChatSession chatSession = new ChatSession($"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}", location);

        string prompt = "Hello.";
        Console.WriteLine($"\nUser: {prompt}");

        string response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "What are all the colors in a rainbow?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        prompt = "Why does it appear when it rains?";
        Console.WriteLine($"\nUser: {prompt}");

        response = await chatSession.SendMessageAsync(prompt);
        Console.WriteLine($"Response: {response}");

        return response;
    }

    private class ChatSession
    {
        private readonly string _modelPath;
        private readonly PredictionServiceClient _predictionServiceClient;

        private readonly List<Content> _contents;

        public ChatSession(string modelPath, string location)
        {
            _modelPath = modelPath;

            _predictionServiceClient = new PredictionServiceClientBuilder
            {
                Endpoint = $"{location}-aiplatform.googleapis.com"
            }.Build();

            // Initialize contents to send over in every request.
            _contents = new List<Content>();
        }

        public async Task<string> SendMessageAsync(string prompt)
        {
            var content = new Content
            {
                Role = "USER",
                Parts =
                {
                    new Part { Text = prompt }
                }
            };
            _contents.Add(content);

            var generateContentRequest = new GenerateContentRequest
            {
                Model = _modelPath,
                GenerationConfig = new GenerationConfig
                {
                    Temperature = 0.9f,
                    TopP = 1,
                    TopK = 32,
                    CandidateCount = 1,
                    MaxOutputTokens = 2048
                }
            };
            generateContentRequest.Contents.AddRange(_contents);

            GenerateContentResponse response = await _predictionServiceClient.GenerateContentAsync(generateContentRequest);

            _contents.Add(response.Candidates[0].Content);

            return response.Candidates[0].Content.Parts[0].Text;
        }
    }
}

Node.js

Antes de probar esta muestra, sigue las instrucciones de configuración de Node.js en la guía de inicio rápido de IA generativa para usar el SDK de Node.js. Si deseas obtener más información, consulta la documentación de referencia del SDK de Node.js para Gemini.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Respuestas de transmisión y sin transmisión

Puedes elegir si el modelo genera respuestas de transmisión o sin transmisión. Para las respuestas de transmisión, recibirás cada respuesta en cuanto se genere su token de salida. En el caso de las respuestas sin transmisión continua, recibes todas las respuestas después de que se generan todos los tokens de salida.

Para una respuesta de transmisión, usa el método generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Para una respuesta sin transmisión, usa el método generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Código de muestra

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function createStreamChat(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.5-flash-001'
) {
  // 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 chat = generativeModel.startChat({});
  const chatInput1 = 'How can I learn more about that?';

  console.log(`User: ${chatInput1}`);

  const result1 = await chat.sendMessageStream(chatInput1);
  for await (const item of result1.stream) {
    console.log(item.candidates[0].content.parts[0].text);
  }
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración de Java en la guía de inicio rápido de Vertex AI. Si deseas obtener más información, consulta la documentación de referencia del SDK de Java de Vertex AI para Gemini.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Respuestas de transmisión y sin transmisión

Puedes elegir si el modelo genera respuestas de transmisión o sin transmisión. Para las respuestas de transmisión, recibirás cada respuesta en cuanto se genere su token de salida. En el caso de las respuestas sin transmisión continua, recibes todas las respuestas después de que se generan todos los tokens de salida.

Para una respuesta de transmisión, usa el método generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Para una respuesta sin transmisión, usa el método generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Código de muestra

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ChatSession;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class ChatDiscussion {

  public static void main(String[] args) throws IOException {
    // 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";

    chatDiscussion(projectId, location, modelName);
  }

  // Ask interrelated questions in a row using a ChatSession object.
  public static void chatDiscussion(String projectId, String location, String modelName)
      throws IOException {
    // 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)) {
      GenerateContentResponse response;

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      // Create a chat session to be used for interactive conversation.
      ChatSession chatSession = new ChatSession(model);

      response = chatSession.sendMessage("Hello.");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("What are all the colors in a rainbow?");
      System.out.println(ResponseHandler.getText(response));

      response = chatSession.sendMessage("Why does it appear when it rains?");
      System.out.println(ResponseHandler.getText(response));
      System.out.println("Chat Ended.");
    }
  }
}

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración de Go en la guía de inicio rápido de Vertex AI. Si deseas obtener más información, consulta la documentación de referencia del SDK de Java de Vertex AI para Gemini.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Respuestas de transmisión y sin transmisión

Puedes elegir si el modelo genera respuestas de transmisión o sin transmisión. Para las respuestas de transmisión, recibirás cada respuesta en cuanto se genere su token de salida. En el caso de las respuestas sin transmisión continua, recibes todas las respuestas después de que se generan todos los tokens de salida.

Para una respuesta de transmisión, usa el método GenerateContentStream.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

Para una respuesta sin transmisión, usa el método GenerateContent.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

Código de muestra

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

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

func makeChatRequests(ctx context.Context, w io.Writer, projectID, region, modelName string) error {
	client, err := genai.NewClient(ctx, projectID, region)

	if err != nil {
		return fmt.Errorf("error creating client: %w", err)
	}
	defer client.Close()

	gemini := client.GenerativeModel(modelName)
	chat := gemini.StartChat()

	send := func(message string) error {
		r, err := chat.SendMessage(ctx, genai.Text(message))
		if err != nil {
			return err
		}
		rb, err := json.MarshalIndent(r, "", "  ")
		if err != nil {
			return err
		}
		fmt.Fprintln(w, string(rb))
		return nil
	}

	if err := send("Hello"); err != nil {
		return err
	}
	if err := send("What are all the colors in a rainbow?"); err != nil {
		return err
	}
	return send("Why does it appear when it rains?")
}

REST

Después de configurar tu entorno, puedes usar REST para probar una instrucción de texto. En el siguiente ejemplo, se envía una solicitud al extremo del modelo de publicador.

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

  • GENERATE_RESPONSE_METHOD: El tipo de respuesta que quieres que genere el modelo. Elige un método que genere cómo quieres que se muestre la respuesta del modelo:
    • streamGenerateContent: La respuesta se transmite a medida que se genera para reducir la percepción de latencia para un público humano.
    • generateContent: La respuesta se muestra después de que se genera por completo.
  • LOCATION: La región para procesar la solicitud. Las opciones disponibles incluyen las siguientes:

    Haz clic para expandir una lista parcial de regiones disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: El ID del proyecto.
  • MODEL_ID: el ID del modelo multimodal que deseas usar. Estas son algunas opciones:
    • gemini-1.0-pro-002
    • gemini-1.0-pro-vision-001
    • gemini-1.5-pro-002
    • gemini-1.5-flash
  • TEXT1
    Son las instrucciones de texto que se incluirán en la primera instrucción de la conversación de varios turnos. Por ejemplo: What are all the colors in a rainbow?
  • TEXT2
    Las instrucciones de texto que se incluirán en el segundo mensaje. Por ejemplo: Why does it appear when it rains?
  • TEMPERATURE: 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 aleatoriedad 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.

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

cat > request.json << 'EOF'
{
  "contents": [
    {
      "role": "user",
      "parts": { "text": "TEXT1" }
    },
    {
      "role": "model",
      "parts": { "text": "What a great question!" }
    },
    {
      "role": "user",
      "parts": { "text": "TEXT2" }
    }
  ],
  "generation_config": {
    "temperature": TEMPERATURE
  }
}
EOF

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

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:GENERATE_RESPONSE_METHOD"

PowerShell

Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

@'
{
  "contents": [
    {
      "role": "user",
      "parts": { "text": "TEXT1" }
    },
    {
      "role": "model",
      "parts": { "text": "What a great question!" }
    },
    {
      "role": "user",
      "parts": { "text": "TEXT2" }
    }
  ],
  "generation_config": {
    "temperature": TEMPERATURE
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Luego, ejecuta el siguiente comando para enviar tu solicitud de REST:

$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:GENERATE_RESPONSE_METHOD" | Select-Object -Expand Content

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Ten en cuenta lo siguiente en la URL para esta muestra:
  • Usa el método generateContent para solicitar que la respuesta se muestre después de que se haya generado por completo. Para reducir la percepción de latencia a un público humano, transmite la respuesta a medida que se genera; para ello, usa el método streamGenerateContent.
  • El ID del modelo multimodal se encuentra al final de la URL antes del método (por ejemplo, gemini-1.5-flash o gemini-1.0-pro-vision). Esta muestra también puede admitir otros modelos.

Console

Para usar Vertex AI Studio y enviar un mensaje de chat en la consola de Google Cloud, sigue estos pasos:

  1. En la sección Vertex AI de la consola de Google Cloud, ve a la página Vertex AI Studio.

    Ir a Vertex AI Studio

  2. En Iniciar una conversación, haz clic en Chat de texto.
  3. Opcional: Configura el modelo y los parámetros:

    • Modelo: selecciona Gemini Pro.
    • Región: selecciona la región que deseas usar.
    • Temperatura: Usa el control deslizante o el cuadro de texto para ingresar un valor de temperatura.

      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.

    • Límite de tokens de salida: Usa el control deslizante o el cuadro de texto para ingresar un valor para el límite máximo de salida.

      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.

    • Agrega una secuencia de detención: Opcional. Ingresa una secuencia de detención, que es una serie de caracteres que incluyen espacios. Si el modelo encuentra una secuencia de detención, la generación de respuesta se detiene. La secuencia de detención no se incluye en la respuesta y puedes agregar hasta cinco secuencias de detención.
  4. Opcional: Para configurar parámetros avanzados, haz clic en Avanzada y establece la configuración de la siguiente manera:

    Haz clic para expandir las configuraciones avanzadas.

    • K superior: Usa el control deslizante o el cuadro de texto con el fin de ingresar un valor para K superior.

      K superior cambia la manera en que el modelo selecciona tokens para la salida. K superior a 1 significa que el siguiente token seleccionado es el más probable entre todos los tokens en el vocabulario del modelo (también llamado decodificación voraz), mientras que el K superior a 3 significa que el siguiente token se selecciona de los tres tokens más probables mediante la temperatura.

      Para cada paso de selección de tokens, se muestran los tokens de K superior con las probabilidades más altas. Luego, los tokens se filtran según el superior con el token final seleccionado mediante el muestreo de temperatura.

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

    • P superior: Usa el control deslizante o el cuadro de texto con el fin de ingresar un valor de P superior. Los tokens se seleccionan del más probable al menos probable hasta que la suma de sus probabilidades sea igual al valor de Top-P. Para obtener los resultados menos variables, establece Top-P como 0.
    • Habilitar fundamentos: Agrega una fuente de puesta a tierra y una ruta para personalizar esta función.
  5. Ingresa tu mensaje de texto en el panel Mensaje. El modelo usa las instrucciones anteriores como contexto para las respuestas nuevas.
  6. Opcional: Para mostrar la cantidad de tokens de texto, haz clic en Ver tokens. Puedes ver los tokens o los IDs de token de tu mensaje de texto.
    • Para ver los tokens en el mensaje de texto que están destacados con diferentes colores que marcan el límite de cada ID de token, haz clic en ID de token a texto. No se admiten tokens multimedia.
    • Para ver los IDs de los tokens, haz clic en ID de token.

      Para cerrar el panel de herramientas del tokenizador, haz clic en X o haz clic fuera del panel.

  7. Haz clic en Enviar.
  8. Opcional: Para guardar el mensaje en Mis mensajes, haz clic en Guardar.
  9. Opcional: Para obtener el código de Python o un comando curl para tu mensaje, haz clic en Obtener código.
  10. Opcional: Para borrar todos los mensajes anteriores, haz clic en Borrar conversación .

Puedes usar instrucciones del sistema para dirigir el comportamiento del modelo según una necesidad o un caso de uso específicos. Por ejemplo, puedes definir un arquetipo o un rol para un chatbot que responda a las solicitudes de atención al cliente. Para obtener más información, consulta los ejemplos de código de instrucciones del sistema.

¿Qué sigue?