Mise en cache du contexte pour les modèles Gemini ajustés

Ce guide explique comment utiliser la mise en cache du contexte avec vos modèles Gemini affinés pour améliorer les performances et réduire les coûts pour les requêtes qui incluent de grandes quantités de contexte. Cette page décrit les éléments suivants :

En mettant en cache le contexte fréquemment utilisé, vous évitez de renvoyer de grandes quantités de données à chaque requête envoyée à votre modèle affiné.

Le processus de gestion (Read, Update, Delete) d'un cache de contexte est le même pour les modèles Gemini de base et ceux affinés. Cette page se concentre sur les étapes spécifiques à la création et à l'utilisation d'un cache avec un modèle affiné.

Modèles compatibles

La mise en cache du contexte est compatible avec les modèles affinés à partir du modèle de base suivant :

  • gemini-2.0-flash-001

Prérequis

Avant de commencer, vous avez besoin des éléments suivants :

  • Un modèle affiné déployé : vous avez besoin d'un modèle Gemini affiné déployé, basé sur un modèle de base compatible. Pour en savoir plus, consultez Ajuster un modèle Gemini.
  • Informations sur le modèle :
    • ID et version du modèle Gemini ajusté.
    • Nom de la ressource de point de terminaison pour le modèle affiné déployé. Pour obtenir le point de terminaison, consultez Déployer un modèle ajusté.

Créer un cache de contexte pour un modèle affiné

Le processus de création d'un cache de contexte pour un modèle affiné est semblable à celui d'un modèle de base. Pour connaître la procédure générale, consultez Créer un cache de contexte.

La principale différence est que vous devez spécifier la version de votre modèle affiné dans le champ model au lieu du modèle de base. Utilisez le format projects/{PROJECT}/locations/{LOCATION}/models/{MODEL}@{VERSION}.

L'exemple suivant montre comment créer un cache de contexte avec un modèle Gemini ajusté.

REST

Vous pouvez utiliser REST pour créer un cache de contexte à l'aide de l'API Vertex AI afin d'envoyer une requête POST au point de terminaison du modèle de l'éditeur. L'exemple suivant montre comment créer un cache de contexte à l'aide d'un fichier stocké dans un bucket Cloud Storage.

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

  • PROJECT_ID : ID de votre projet.
  • LOCATION : région dans laquelle traiter la requête et où le contenu mis en cache est stocké. Pour obtenir la liste des régions compatibles, consultez Régions disponibles.
  • MODEL_ID : ID du modèle Gemini affiné.
  • MODEL_VERSION : version du modèle Gemini affiné.
  • CACHE_DISPLAY_NAME : nom significatif à afficher pour décrire et identifier chaque cache de contexte.
  • MIME_TYPE : type MIME du contenu à mettre en cache.
  • CONTENT_TO_CACHE_URI : URI Cloud Storage du contenu à mettre en cache.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/cachedContents

Corps JSON de la requête :

{
  "model": "projects/PROJECT_ID/locations/LOCATION/models/MODEL_ID@MODEL_VERSION",
  "displayName": "CACHE_DISPLAY_NAME",
  "contents": [{
    "role": "user",
      "parts": [{
        "fileData": {
          "mimeType": "MIME_TYPE",
          "fileUri": "CONTENT_TO_CACHE_URI"
        }
      }]
  },
  {
    "role": "model",
      "parts": [{
        "text": "This is sample text to demonstrate explicit caching."
      }]
  }]
}

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, puis exécutez la commande suivante :

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/cachedContents"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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/cachedContents" | Select-Object -Expand Content

Vous devriez recevoir une réponse JSON de ce type :

Exemple de commande curl

LOCATION="us-central1"
MODEL_ID="model-id"
PROJECT_ID="test-project"
MODEL_VERSION=1
MIME_TYPE="video/mp4"
CACHED_CONTENT_URI="gs://path-to-bucket/video-file-name.mp4"

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}/cachedContents -d \
'{
  "model":"projects/${PROJECT_ID}/locations/${LOCATION}/models/${MODEL_ID}@${MODEL_VERSION}",
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "fileData": {
            "mimeType": "${MIME_TYPE}",
            "fileUri": "${CACHED_CONTENT_URI}"
          }
        }
      ]
    }
  ]
}'

Utiliser un cache de contexte pour un modèle affiné

Le processus d'utilisation d'un cache de contexte avec un modèle affiné est semblable à celui d'un modèle de base. Pour connaître la procédure générale, consultez Utiliser un cache de contexte.

La principale différence est que vous envoyez la requête au point de terminaison de votre modèle affiné déployé (.../endpoints/{ENDPOINT_ID}) au lieu du point de terminaison du modèle de base (.../publishers/google/models/{MODEL}).

Lorsque vous utilisez un cache de contexte, vous ne pouvez pas spécifier les propriétés suivantes dans votre requête :

  • GenerativeModel.system_instructions
  • GenerativeModel.tool_config
  • GenerativeModel.tools

L'exemple de code suivant montre comment utiliser un cache de contexte avec un modèle Gemini ajusté.

REST

Vous pouvez utiliser REST pour spécifier un cache de contexte avec une requête en envoyant une requête POST au point de terminaison du modèle de l'éditeur à l'aide de l'API Vertex AI.

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

  • PROJECT_ID : ID de votre projet.
  • LOCATION : région dans laquelle la requête de création de cache de contexte a été traitée.
  • ENDPOINT_ID : point de terminaison où le modèle affiné est déployé.
  • MIME_TYPE : requête textuelle à envoyer au modèle.

Méthode HTTP et URL :

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:generateContent

Corps JSON de la requête :

{
  "cachedContent": "projects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID",
  "contents": [
      {"role":"user","parts":[{"text":"PROMPT_TEXT"}]}
  ],
  "generationConfig": {
      "maxOutputTokens": 8192,
      "temperature": 1,
      "topP": 0.95,
  },
  "safetySettings": [
      {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "threshold": "BLOCK_MEDIUM_AND_ABOVE"
      },
      {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "threshold": "BLOCK_MEDIUM_AND_ABOVE"
      },
      {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "threshold": "BLOCK_MEDIUM_AND_ABOVE"
      },
      {
          "category": "HARM_CATEGORY_HARASSMENT",
          "threshold": "BLOCK_MEDIUM_AND_ABOVE"
      }
  ],
}

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, puis exécutez la commande suivante :

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/endpoints/ENDPOINT_ID:generateContent"

PowerShell

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

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

Exemple de commande curl

LOCATION="us-central1"
PROJECT_ID="test-project"
ENDPOINT_ID=987654321

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}/endpoints/${ENDPOINT_ID}:generateContent" -d \
'{
  "cachedContent": "projects/${PROJECT_NUMBER}/locations/${LOCATION}/cachedContents/${CACHE_ID}",
  "contents": [
      {"role":"user","parts":[{"text":"What are the benefits of exercise?"}]}
  ],
  "generationConfig": {
      "maxOutputTokens": 8192,
      "temperature": 1,
      "topP": 0.95,
  },
  "safetySettings": [
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    }
  ],
}'