Compréhension audio (parole uniquement)

Vous pouvez ajouter du contenu audio aux requêtes Gemini pour effectuer des tâches qui impliquent de comprendre le contenu audio inclus. Cette page explique comment ajouter du contenu audio à vos requêtes Gemini dans Vertex AI à l'aide de la console Google Cloud et de l'API Vertex AI.

Modèles compatibles

Le tableau suivant présente les modèles compatibles avec la compréhension audio :

Modèle Détails de la modalité audio

Gemini 1.5 Flash

Accéder à la fiche du modèle Gemini 1.5 Pro

Durée audio maximale par requête : environ 8,4 heures ou jusqu'à un million de jetons.

La parole peut être reconnue à des fins de résumé audio, de transcription et de traduction.

Gemini 1.5 Pro

Accéder à la fiche du modèle Gemini 1.5 Pro

Durée audio maximale par requête : environ 8,4 heures ou jusqu'à un million de jetons.

La parole peut être reconnue à des fins de résumé audio, de transcription et de traduction.

Pour obtenir la liste des langues compatibles avec les modèles Gemini, consultez les informations sur les modèles sur la page Modèles Google. Pour en savoir plus sur la conception de requêtes multimodales, consultez la page Concevoir des requêtes multimodales. Si vous recherchez une méthode pour utiliser Gemini directement à partir de vos applications mobiles et Web, consultez les SDK Vertex AI in Firebase pour les applications Android, Swift, Web et Flutter.

Ajouter du contenu audio à une requête

Vous pouvez ajouter des fichiers audio dans vos requêtes à Gemini.

Audio unique

Vous trouverez ci-dessous la procédure à suivre pour résumer un podcast à l'aide d'un fichier audio.

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API SDK Vertex AI pour Python.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez le paramètre stream dans generate_content.

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

Pour une réponse sans streaming, supprimez le paramètre ou définissez-le sur False.

Exemple de code


  import vertexai
  from vertexai.generative_models import GenerativeModel, Part

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

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

  prompt = """
  Please provide a summary for the audio.
  Provide chapter titles, be concise and short, no need to provide chapter summaries.
  Do not make up any information that is not part of the audio and do not be verbose.
"""

  audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
  audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

  contents = [audio_file, prompt]

  response = model.generate_content(contents)
  print(response.text)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence du SDK Vertex AI pour Java pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Pour une réponse non affichée progressivement, utilisez la méthode generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Exemple de code

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

public class AudioInputSummarization {

  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";

    summarizeAudio(projectId, location, modelName);
  }

  // Analyzes the given audio input.
  public static String summarizeAudio(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)) {
      String audioUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "Please provide a summary for the audio.\n"
                  + "Provide chapter titles with timestamps, be concise and short, "
                  + "no need to provide chapter summaries.\n"
                  + "Do not make up any information that is not part of the audio "
                  + "and do not be verbose.",
              PartMaker.fromMimeTypeAndData("audio/mp3", audioUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);

      return output;
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de l'IA générative à l'aide du SDK Node.js. Pour en savoir plus, consultez la documentation de référence du SDK Node.js pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Pour une réponse non affichée progressivement, utilisez la méthode generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Exemple de code

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

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

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

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/audio/pixel.mp3',
      mime_type: 'audio/mpeg',
    },
  };
  const textPart = {
    text: `
    Please provide a summary for the audio.
    Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
    Do not make up any information that is not part of the audio and do not be verbose.`,
  };

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

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

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence du SDK Vertex AI pour Go pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode GenerateContentStream.

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

Pour une réponse non affichée progressivement, utilisez la méthode GenerateContent.

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

Exemple de code

import (
	"context"
	"errors"
	"fmt"
	"io"
	"mime"
	"path/filepath"

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

// summarizeAudio shows how to send an audio asset and a text question to a model, writing the response to the
// provided io.Writer.
func summarizeAudio(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"
	ctx := context.Background()

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

	model := client.GenerativeModel(modelName)
	model.SetTemperature(0.4)

	// Given an audio file URL, prepare audio file as genai.Part
	part := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext("pixel.mp3")),
		FileURI:  "gs://cloud-samples-data/generative-ai/audio/pixel.mp3",
	}

	res, err := model.GenerateContent(ctx, part, genai.Text(`
		Please provide a summary for the audio.
		Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
		Do not make up any information that is not part of the audio and do not be verbose.
	`,
	))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated summary:\n%s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence de Vertex AI en langage C#.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Pour une réponse non affichée progressivement, utilisez la méthode GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Pour en savoir plus sur la façon dont le serveur peut diffuser des réponses, consultez la section RPC de streaming.

Exemple de code


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

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

        string prompt = @"Please provide a summary for the audio.
Provide chapter titles with timestamps, be concise and short, no need to provide chapter summaries.
Do not make up any information that is not part of the audio and do not be verbose.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "audio/mp3", FileUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3" } }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

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

        return responseText;
    }
}

REST

Une fois que vous avez configuré votre environnement, vous pouvez utiliser REST pour tester une requête textuelle. L'exemple suivant envoie une requête au point de terminaison du modèle de l'éditeur.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • LOCATION : région dans laquelle traiter la requête.  : saisissez une région compatible. Pour obtenir la liste complète des régions compatibles, consultez la section Emplacements disponibles.

    Cliquer pour développer une liste partielle des régions disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID : l'ID de votre projet.
  • FILE_URI : URI ou URL du fichier à inclure dans la requête. Les valeurs acceptées incluent les suivantes :
    • URI du bucket Cloud Storage : l'objet doit être lisible publiquement ou se trouver dans le même projet Google Cloud que celui qui envoie la requête.
    • URL HTTP : l'URL du fichier doit être lisible publiquement. Vous pouvez spécifier un fichier vidéo et jusqu'à 10 fichiers image par requête. Les fichiers audio et les documents ne doivent pas dépasser 15 Mo.
    • URL de la vidéo YouTube : la vidéo YouTube doit appartenir au compte que vous avez utilisé pour vous connecter à la console Google Cloud ou être publique. Une seule URL de vidéo YouTube est acceptée par requête.

    Lorsque vous spécifiez un fileURI, vous devez également spécifier le type de contenu (mimeType) du fichier.

    Si vous ne disposez pas de fichier audio dans Cloud Storage, vous pouvez utiliser le fichier suivant, disponible publiquement : gs://cloud-samples-data/generative-ai/audio/pixel.mp3 avec un type MIME audio/mp3. Pour écouter ce contenu audio, ouvrez l'exemple de fichier MP3.

  • MIME_TYPE : type de contenu du fichier spécifié dans les champs data ou fileUri. Les valeurs acceptées incluent les suivantes :

    Cliquer pour développer les types 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
  • TEXT
    Instructions textuelles à inclure dans la requête. Par exemple : Please provide a summary for the audio. Provide chapter titles, be concise and short, no need to provide chapter summaries. Do not make up any information that is not part of the audio and do not be verbose.

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête 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/gemini-1.5-flash:generateContent"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête 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/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Notez les points suivants dans l'URL de cet exemple :
  • Utilisez la méthode generateContent pour demander que la réponse soit renvoyée une fois qu'elle a été entièrement générée. Pour réduire la perception de la latence auprès d'un public humain, affichez la réponse progressivement à mesure qu'elle est générée à l'aide de la méthode streamGenerateContent.
  • L'ID du modèle multimodal se trouve à la fin de l'URL avant la méthode (par exemple, gemini-1.5-flash ou gemini-1.0-pro-vision). Cet exemple peut également s'appliquer à d'autres modèles.

Console

Pour envoyer une requête multimodale à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Cliquez sur Ouvrir le mode forme libre.

  3. Facultatif : Configurez le modèle et les paramètres :

    • Modèle : sélectionnez un modèle.
    • Région : sélectionnez la région que vous souhaitez utiliser.
    • Température : utilisez le curseur ou la zone de texte pour saisir une valeur de température.

      La température est utilisée pour l'échantillonnage pendant la génération des réponses, qui se produit lorsque topP et topK sont appliqués. La température permet de contrôler le degré de hasard dans la sélection des jetons. Les températures inférieures sont idéales pour les requêtes qui nécessitent une réponse moins ouverte ou créative, tandis que des températures plus élevées peuvent conduire à des résultats plus diversifiés ou créatifs. Une température de 0 signifie que les jetons de probabilité les plus élevés sont toujours sélectionnés. Dans ce cas, les réponses pour une requête donnée sont principalement déterministes, mais une petite quantité de variation est toujours possible.

      Si le modèle renvoie une réponse trop générique ou trop courte, ou s'il renvoie une réponse de remplacement, essayez d'augmenter la température.

    • Limite de jeton : utilisez le curseur ou la zone de texte pour saisir une valeur correspondant à la limite maximale de sortie.

      Nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    • Ajouter une séquence d'arrêt : facultatif. Saisissez une séquence d'arrêt, qui est une série de caractères incluant des espaces. Si le modèle rencontre une séquence d'arrêt, la génération de réponse s'arrête. La séquence d'arrêt n'est pas incluse dans la réponse, et vous pouvez ajouter jusqu'à cinq séquences d'arrêt.

  4. Facultatif : pour configurer des paramètres avancés, cliquez sur Avancé, puis configurez les paramètres comme suit :

    Cliquez pour développer les configurations avancées

    • Top-K: saisissez une valeur pour le top-K à l'aide du curseur ou de la zone de texte. (non disponible pour Gemini 1.5).

      Top-K modifie la façon dont le modèle sélectionne les jetons pour la sortie. Une valeur top-K de 1 signifie que le prochain jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle (également appelé décodage glouton), tandis qu'une valeur top-K de 3 signifie que le jeton suivant est sélectionné parmi les trois jetons les plus probables en utilisant la température.

      Pour chaque étape de sélection du jeton, les jetons top-K avec les probabilités les plus élevées sont échantillonnés. Les jetons sont ensuite filtrés en fonction du top-P avec le jeton final sélectionné à l'aide de l'échantillonnage de température.

      Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires.

    • Top-P : utilisez le curseur ou la zone de texte pour saisir une valeur. Les jetons sont sélectionnés de la probabilité la plus élevée jusqu'à ce que la somme de leurs probabilités soit égale à la valeur de top-P. Pour obtenir les résultats les moins variables, définissez "top-P" sur 0.
    • Nombre maximal de réponses : utilisez le curseur ou la zone de texte pour saisir une valeur correspondant au nombre de réponses à générer.
    • Diffuser les réponses : permet d'imprimer les réponses au fur et à mesure de leur génération.
    • Seuil de filtre de sécurité : sélectionnez le seuil de probabilité d'affichage de réponses potentiellement dangereuses.
    • Activer l'ancrage : l'ancrage n'est pas compatible avec les requêtes multimodales.

  5. Cliquez sur Insérer un média, puis sélectionnez une source pour votre fichier.

    Importer

    Sélectionnez le fichier que vous souhaitez utiliser, puis cliquez sur Ouvrir.

    À partir d'une URL

    Saisissez l'URL du fichier que vous souhaitez utiliser, puis cliquez sur Insérer.

    Cloud Storage

    Sélectionnez le bucket, puis le fichier que vous souhaitez importer, et cliquez sur Sélectionner.

    Google Drive

    1. Choisissez un compte et autorisez Vertex AI Studio à y accéder la première fois que vous sélectionnez cette option. Vous pouvez importer plusieurs fichiers, sous réserve de ne pas dépasser une taille totale de 10 Mo. La taille d'un fichier ne peut pas dépasser 7 Mo.
    2. Cliquez sur le fichier que vous souhaitez ajouter.
    3. Cliquez sur Sélectionner.

      La vignette du fichier s'affiche dans le volet Requête. Le nombre total de jetons s'affiche également. Si les données de votre requête dépassent la limite de jetons, les jetons sont tronqués et ne sont pas inclus dans le traitement de vos données.

  6. Saisissez votre requête textuelle dans le volet Requête.

  7. Facultatif : Pour afficher les ID de jeton en texte et les ID de jeton, cliquez sur le nombre de jetons dans le volet Requête.

  8. Cliquez sur Envoyer.

  9. Facultatif : pour enregistrer votre requête dans Mes requêtes, cliquez sur Enregistrer.

  10. Facultatif : pour obtenir le code Python ou la commande curl de votre requête, cliquez sur  Obtenir le code.

Transcription audio

Vous trouverez ci-dessous la procédure à suivre pour transcrire un entretien à l'aide d'un fichier audio. Pour activer la compréhension des codes temporels pour les fichiers audio uniquement, activez le paramètre audioTimestamp dans GenerationConfig.

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API SDK Vertex AI pour Python.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez le paramètre stream dans generate_content.

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

Pour une réponse sans streaming, supprimez le paramètre ou définissez-le sur False.

Exemple de code


  import vertexai
  from vertexai.generative_models import GenerativeModel, Part

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

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

  prompt = """
  Can you transcribe this interview, in the format of timecode, speaker, caption.
  Use speaker A, speaker B, etc. to identify speakers.
"""

  audio_file_uri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3"
  audio_file = Part.from_uri(audio_file_uri, mime_type="audio/mpeg")

  contents = [audio_file, prompt]

  response = model.generate_content(contents)
  print(response.text)

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence du SDK Vertex AI pour Java pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Pour une réponse non affichée progressivement, utilisez la méthode generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Exemple de code

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

public class AudioInputTranscription {

  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";

    transcribeAudio(projectId, location, modelName);
  }

  // Analyzes the given audio input.
  public static String transcribeAudio(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)) {
      String audioUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "Can you transcribe this interview, in the format of timecode, speaker, caption.\n"
                  + "Use speaker A, speaker B, etc. to identify speakers.",
              PartMaker.fromMimeTypeAndData("audio/mp3", audioUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);

      return output;
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de l'IA générative à l'aide du SDK Node.js. Pour en savoir plus, consultez la documentation de référence du SDK Node.js pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Pour une réponse non affichée progressivement, utilisez la méthode generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Exemple de code

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

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

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

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/audio/pixel.mp3',
      mime_type: 'audio/mpeg',
    },
  };
  const textPart = {
    text: `
    Can you transcribe this interview, in the format of timecode, speaker, caption?
    Use speaker A, speaker B, etc. to identify speakers.`,
  };

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

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

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence du SDK Vertex AI pour Go pour Gemini.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode GenerateContentStream.

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

Pour une réponse non affichée progressivement, utilisez la méthode GenerateContent.

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

Exemple de code

import (
	"context"
	"errors"
	"fmt"
	"io"
	"mime"
	"path/filepath"

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

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

	ctx := context.Background()

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

	model := client.GenerativeModel(modelName)

	// Optional: set an explicit temperature
	model.SetTemperature(0.4)

	// Given an audio file URL, prepare audio file as genai.Part
	img := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext("pixel.mp3")),
		FileURI:  "gs://cloud-samples-data/generative-ai/audio/pixel.mp3",
	}

	res, err := model.GenerateContent(ctx, img, genai.Text(`
			Can you transcribe this interview, in the format of timecode, speaker, caption.
			Use speaker A, speaker B, etc. to identify speakers.
	`))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated transcript:\n%s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de Vertex AI. Pour en savoir plus, consultez la documentation de référence de Vertex AI en langage C#.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

Réponses en streaming et sans streaming

Vous pouvez choisir si le modèle génère des réponses en streaming ou sans streaming. Pour les réponses en streaming, vous recevez chaque réponse dès que son jeton de sortie est généré. Pour les réponses qui ne sont pas en streaming, vous recevez toutes les réponses une fois tous les jetons de sortie sont générés.

Pour une réponse en streaming, utilisez la méthode StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Pour une réponse non affichée progressivement, utilisez la méthode GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Pour en savoir plus sur la façon dont le serveur peut diffuser des réponses, consultez la section RPC de streaming.

Exemple de code


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

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

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

        string prompt = @"Can you transcribe this interview, in the format of timecode, speaker, caption.
Use speaker A, speaker B, etc. to identify speakers.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "audio/mp3", FileUri = "gs://cloud-samples-data/generative-ai/audio/pixel.mp3" } }
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

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

        return responseText;
    }
}

REST

Une fois que vous avez configuré votre environnement, vous pouvez utiliser REST pour tester une requête textuelle. L'exemple suivant envoie une requête au point de terminaison du modèle de l'éditeur.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • LOCATION : région dans laquelle traiter la requête.  : saisissez une région compatible. Pour obtenir la liste complète des régions compatibles, consultez la section Emplacements disponibles.

    Cliquer pour développer une liste partielle des régions disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID : l'ID de votre projet.
  • FILE_URI : URI ou URL du fichier à inclure dans la requête. Les valeurs acceptées incluent les suivantes :
    • URI du bucket Cloud Storage : l'objet doit être lisible publiquement ou se trouver dans le même projet Google Cloud que celui qui envoie la requête.
    • URL HTTP : l'URL du fichier doit être lisible publiquement. Vous pouvez spécifier un fichier vidéo et jusqu'à 10 fichiers image par requête. Les fichiers audio et les documents ne doivent pas dépasser 15 Mo.
    • URL de la vidéo YouTube : la vidéo YouTube doit appartenir au compte que vous avez utilisé pour vous connecter à la console Google Cloud ou être publique. Une seule URL de vidéo YouTube est acceptée par requête.

    Lorsque vous spécifiez un fileURI, vous devez également spécifier le type de contenu (mimeType) du fichier.

    Si vous ne disposez pas de fichier audio dans Cloud Storage, vous pouvez utiliser le fichier suivant, disponible publiquement : gs://cloud-samples-data/generative-ai/audio/pixel.mp3 avec un type MIME audio/mp3. Pour écouter ce contenu audio, ouvrez l'exemple de fichier MP3.

  • MIME_TYPE : type de contenu du fichier spécifié dans les champs data ou fileUri. Les valeurs acceptées incluent les suivantes :

    Cliquer pour développer les types 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
  • TEXT
    Instructions textuelles à inclure dans la requête. Par exemple : Can you transcribe this interview, in the format of timecode, speaker, caption. Use speaker A, speaker B, etc. to identify speakers.

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

cat > request.json << 'EOF'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "generatationConfig": {
    "audioTimestamp": true
  }
}
EOF

Exécutez ensuite la commande suivante pour envoyer votre requête 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/gemini-1.5-flash:generateContent"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json. Exécutez la commande suivante dans le terminal pour créer ou écraser ce fichier dans le répertoire actuel :

@'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  },
  "generatationConfig": {
    "audioTimestamp": true
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Exécutez ensuite la commande suivante pour envoyer votre requête 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/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON semblable à la suivante.

Notez les points suivants dans l'URL de cet exemple :
  • Utilisez la méthode generateContent pour demander que la réponse soit renvoyée une fois qu'elle a été entièrement générée. Pour réduire la perception de la latence auprès d'un public humain, affichez la réponse progressivement à mesure qu'elle est générée à l'aide de la méthode streamGenerateContent.
  • L'ID du modèle multimodal se trouve à la fin de l'URL avant la méthode (par exemple, gemini-1.5-flash ou gemini-1.0-pro-vision). Cet exemple peut également s'appliquer à d'autres modèles.

Console

Pour envoyer une requête multimodale à l'aide de la console Google Cloud, procédez comme suit :

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Cliquez sur Ouvrir le mode forme libre.

  3. Facultatif : Configurez le modèle et les paramètres :

    • Modèle : sélectionnez un modèle.
    • Région : sélectionnez la région que vous souhaitez utiliser.
    • Température : utilisez le curseur ou la zone de texte pour saisir une valeur de température.

      La température est utilisée pour l'échantillonnage pendant la génération des réponses, qui se produit lorsque topP et topK sont appliqués. La température permet de contrôler le degré de hasard dans la sélection des jetons. Les températures inférieures sont idéales pour les requêtes qui nécessitent une réponse moins ouverte ou créative, tandis que des températures plus élevées peuvent conduire à des résultats plus diversifiés ou créatifs. Une température de 0 signifie que les jetons de probabilité les plus élevés sont toujours sélectionnés. Dans ce cas, les réponses pour une requête donnée sont principalement déterministes, mais une petite quantité de variation est toujours possible.

      Si le modèle renvoie une réponse trop générique ou trop courte, ou s'il renvoie une réponse de remplacement, essayez d'augmenter la température.

    • Limite de jeton : utilisez le curseur ou la zone de texte pour saisir une valeur correspondant à la limite maximale de sortie.

      Nombre maximal de jetons pouvant être générés dans la réponse. Un jeton correspond environ à quatre caractères. 100 jetons correspondent à environ 60-80 mots.

      Spécifiez une valeur inférieure pour obtenir des réponses plus courtes et une valeur supérieure pour des réponses potentiellement plus longues.

    • Ajouter une séquence d'arrêt : facultatif. Saisissez une séquence d'arrêt, qui est une série de caractères incluant des espaces. Si le modèle rencontre une séquence d'arrêt, la génération de réponse s'arrête. La séquence d'arrêt n'est pas incluse dans la réponse, et vous pouvez ajouter jusqu'à cinq séquences d'arrêt.

  4. Facultatif : pour configurer des paramètres avancés, cliquez sur Avancé, puis configurez les paramètres comme suit :

    Cliquez pour développer les configurations avancées

    • Top-K: saisissez une valeur pour le top-K à l'aide du curseur ou de la zone de texte. (non disponible pour Gemini 1.5).

      Top-K modifie la façon dont le modèle sélectionne les jetons pour la sortie. Une valeur top-K de 1 signifie que le prochain jeton sélectionné est le plus probable parmi tous les jetons du vocabulaire du modèle (également appelé décodage glouton), tandis qu'une valeur top-K de 3 signifie que le jeton suivant est sélectionné parmi les trois jetons les plus probables en utilisant la température.

      Pour chaque étape de sélection du jeton, les jetons top-K avec les probabilités les plus élevées sont échantillonnés. Les jetons sont ensuite filtrés en fonction du top-P avec le jeton final sélectionné à l'aide de l'échantillonnage de température.

      Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires.

    • Top-P : utilisez le curseur ou la zone de texte pour saisir une valeur. Les jetons sont sélectionnés de la probabilité la plus élevée jusqu'à ce que la somme de leurs probabilités soit égale à la valeur de top-P. Pour obtenir les résultats les moins variables, définissez "top-P" sur 0.
    • Nombre maximal de réponses : utilisez le curseur ou la zone de texte pour saisir une valeur correspondant au nombre de réponses à générer.
    • Diffuser les réponses : permet d'imprimer les réponses au fur et à mesure de leur génération.
    • Seuil de filtre de sécurité : sélectionnez le seuil de probabilité d'affichage de réponses potentiellement dangereuses.
    • Activer l'ancrage : l'ancrage n'est pas compatible avec les requêtes multimodales.

  5. Cliquez sur Insérer un média, puis sélectionnez une source pour votre fichier.

    Importer

    Sélectionnez le fichier que vous souhaitez utiliser, puis cliquez sur Ouvrir.

    À partir d'une URL

    Saisissez l'URL du fichier que vous souhaitez utiliser, puis cliquez sur Insérer.

    Cloud Storage

    Sélectionnez le bucket, puis le fichier que vous souhaitez importer, et cliquez sur Sélectionner.

    Google Drive

    1. Choisissez un compte et autorisez Vertex AI Studio à y accéder la première fois que vous sélectionnez cette option. Vous pouvez importer plusieurs fichiers, sous réserve de ne pas dépasser une taille totale de 10 Mo. La taille d'un fichier ne peut pas dépasser 7 Mo.
    2. Cliquez sur le fichier que vous souhaitez ajouter.
    3. Cliquez sur Sélectionner.

      La vignette du fichier s'affiche dans le volet Requête. Le nombre total de jetons s'affiche également. Si les données de votre requête dépassent la limite de jetons, les jetons sont tronqués et ne sont pas inclus dans le traitement de vos données.

  6. Saisissez votre requête textuelle dans le volet Requête.

  7. Facultatif : Pour afficher les ID de jeton en texte et les ID de jeton, cliquez sur le nombre de jetons dans le volet Requête.

  8. Cliquez sur Envoyer.

  9. Facultatif : pour enregistrer votre requête dans Mes requêtes, cliquez sur Enregistrer.

  10. Facultatif : pour obtenir le code Python ou la commande curl de votre requête, cliquez sur  Obtenir le code.

Définir les paramètres de modèle

Les paramètres de modèle suivants peuvent être définis sur les modèles multimodaux :

Top-P

Top P modifie la façon dont le modèle sélectionne les jetons pour la sortie. Les jetons sont sélectionnés de la valeur la plus élevée (voir top-K) à la moins probable jusqu'à ce que la somme de leurs probabilités soit égale à la valeur top-P. Par exemple, si les jetons A, B et C ont une probabilité de 0,3, 0,2 et 0,1 et que la valeur de top-P est supérieure à 0.5, le modèle sélectionne A ou B comme jeton suivant en utilisant la température et exclut C comme candidat.

Spécifiez une valeur inférieure pour les réponses moins aléatoires et une valeur plus élevée pour les réponses plus aléatoires.

Température

La température est utilisée pour l'échantillonnage pendant la génération des réponses, qui se produit lorsque topP et topK sont appliqués. La température permet de contrôler le degré de hasard dans la sélection des jetons. Les températures inférieures sont idéales pour les requêtes qui nécessitent une réponse moins ouverte ou créative, tandis que des températures plus élevées peuvent conduire à des résultats plus diversifiés ou créatifs. Une température de 0 signifie que les jetons de probabilité les plus élevés sont toujours sélectionnés. Dans ce cas, les réponses pour une requête donnée sont principalement déterministes, mais une petite quantité de variation est toujours possible.

Si le modèle renvoie une réponse trop générique ou trop courte, ou s'il renvoie une réponse de remplacement, essayez d'augmenter la température.

Valeurs de paramètre valides

Paramètre Gemini 1.5 Pro Gemini 1.5 Flash
Top-P 0 - 1.0 (par défaut 0.95) 0 - 1.0 (par défaut 0.95)
Température 0 - 2.0 (par défaut 1.0) 0 - 2.0 (par défaut 1.0)

Exigences pour le contenu audio

Les modèles multimodaux Gemini sont compatibles avec les types audio MIME suivants :

Type MIME audio Gemini 1.5 Flash Gemini 1.5 Pro
AAC - audio/aac
FLAC - audio/flac
MP3 - audio/mp3
MPA - audio/m4a
MPEG - audio/mpeg
MPGA - audio/mpga
MP4 - audio/mp4
OPUS - audio/opus
PCM - audio/pcm
WAV - audio/wav
WEBM - audio/webm

Vous pouvez inclure 1 fichier audio au maximum dans une requête.

Limites

Bien que les modèles multimodaux Gemini soient puissants dans de nombreux cas d'utilisation multimodaux, il est important de comprendre les limites des modèles :

  • Reconnaissance des sons non vocaux : les modèles compatibles avec l'audio peuvent faire des erreurs de reconnaissance avec les sons autres que la parole.
  • Codes temporels audio : pour générer des codes temporels précis pour les fichiers audio, vous devez configurer le paramètre audio_timestamp dans generation_config.
  • Ponctuation de la transcription : (si vous utilisez Gemini 1.5 Flash) les modèles peuvent renvoyer des transcriptions qui n'incluent pas de ponctuation.

Étape suivante