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

Vous pouvez utiliser la mise en cache du contexte pour vos modèles Gemini affinés afin d'améliorer les performances et de réduire les coûts pour les requêtes qui incluent de grandes quantités de contexte. 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é.

Les opérations de gestion (Read, Update, Delete) du cache de contexte pour les modèles Gemini réglés restent cohérentes avec les modèles de base. Seules la création et l'inférence de contenu mis en cache nécessitent un ajustement spécifique, qui est détaillé ci-dessous.

Prérequis

Affinage d'un modèle Gemini : vous avez besoin d'un modèle Gemini affiné et déployé, basé sur un modèle de base compatible (consultez Présentation de la mise en cache du contexte). Pour savoir comment affiner un modèle Gemini, consultez Affiner un modèle Gemini. Pour obtenir le point de terminaison de votre modèle ajusté déployé, consultez Déployer un modèle ajusté.

Assurez-vous de disposer des informations suivantes :

  • ID et version du modèle Gemini ajusté
  • Nom de la ressource de point de terminaison pour le modèle affiné déployé

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

La procédure de création d'un cache de contexte pour un modèle affiné suit en grande partie les étapes décrites dans Créer un cache de contexte. Consultez la documentation associée pour connaître la procédure générale. Ce guide se concentre sur la différence de création d'un cache de contexte pour les modèles Gemini affinés.

Au lieu d'utiliser le modèle de base sous la forme projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL}, vous devez utiliser votre modèle affiné sous la forme projects/{PROJECT}/locations/{LOCATION}/models/{MODEL}@{VERSION}.

Les exemples suivants montrent 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é

La procédure d'utilisation d'un cache de contexte pour un modèle affiné suit en grande partie les étapes décrites dans Utiliser un cache de contexte. Consultez la documentation associée pour connaître la procédure générale. Ce guide se concentre sur la différence d'utilisation du cache de contexte pour les modèles Gemini affinés.

Au lieu d'envoyer la requête au point de terminaison du modèle de base sous la forme projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL}, vous devez l'envoyer au point de terminaison de votre modèle affiné déployé sous la forme projects/{PROJECT}/locations/{LOCATION}/endpoints/{ENDPOINT_ID}.

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

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

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

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, 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"
    }
  ],
}'