Colocação em cache de contexto para modelos do Gemini com ajuste fino

Pode usar o armazenamento em cache de contexto para os seus modelos Gemini com ajuste fino para melhorar o desempenho e reduzir os custos dos comandos que incluem grandes quantidades de contexto. Ao colocar em cache o contexto usado com frequência, evita o reenvio de grandes quantidades de dados com cada pedido ao seu modelo otimizado.

As operações de gestão (Read, Update, Delete) da cache de contexto para o Gemini otimizado permanecem consistentes com os modelos base. Apenas a criação e a inferência de conteúdo em cache requerem um ajuste específico, que é detalhado no seguinte.

Pré-requisitos

Ajustar um modelo Gemini: precisa de um modelo Gemini ajustado implementado com base num modelo base suportado (consulte a vista geral da colocação em cache de contexto). Para ver detalhes sobre como otimizar um modelo Gemini, consulte o artigo Otimize um modelo Gemini. Para obter o ponto final do modelo otimizado implementado, consulte o artigo Implemente um modelo otimizado.

Certifique-se de que tem as seguintes informações:

  • O ID e a versão do modelo do Gemini otimizado
  • O nome do recurso do ponto final para o modelo otimizado implementado

Crie uma cache de contexto para um modelo otimizado

O procedimento para criar uma cache de contexto para um modelo otimizado segue, em grande parte, os passos descritos no artigo Crie uma cache de contexto. Consulte a documentação associada para o processo geral. Este guia foca-se na diferença de criação de uma cache de contexto para modelos Gemini com ajuste fino.

Em vez de usar o modelo base no formato projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL}, tem de usar o modelo otimizado no formato projects/{PROJECT}/locations/{LOCATION}/models/{MODEL}@{VERSION}.

Os exemplos seguintes mostram como criar uma cache de contexto com um modelo do Gemini otimizado.

REST

Pode usar a REST para criar uma cache de contexto através da API Vertex AI para enviar um pedido POST para o ponto final do modelo do publicador. O exemplo seguinte mostra como criar uma cache de contexto usando um ficheiro armazenado num contentor do Cloud Storage.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o seu ID do projeto.
  • LOCATION: a região para processar o pedido e onde o conteúdo em cache é armazenado. Para ver uma lista das regiões suportadas, consulte o artigo Regiões disponíveis.
  • MODEL_ID: o ID do modelo do Gemini com ajuste fino.
  • MODEL_VERSION: A versão do modelo Gemini com ajuste fino.
  • CACHE_DISPLAY_NAME: Um nome a apresentar significativo para descrever e ajudar a identificar cada cache de contexto.
  • MIME_TYPE: o tipo MIME do conteúdo a colocar em cache.
  • CONTENT_TO_CACHE_URI: o URI do Cloud Storage do conteúdo a colocar em cache.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "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."
      }]
  }]
}

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/cachedContents"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/cachedContents" | Select-Object -Expand Content

Deve receber uma resposta JSON semelhante à seguinte:

Comando curl de exemplo

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

Use uma cache de contexto para um modelo otimizado

O procedimento para usar uma cache de contexto para um modelo otimizado segue, em grande parte, os passos descritos em Use uma cache de contexto. Consulte a documentação associada para ver o processo geral. Este guia foca-se na diferença da utilização da cache de contexto para modelos do Gemini otimizados.

Em vez de enviar o pedido para o ponto final do modelo base no formato projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL}, tem de o enviar para o ponto final do modelo otimizado implementado no formato projects/{PROJECT}/locations/{LOCATION}/endpoints/{ENDPOINT_ID}.

O exemplo de código seguinte mostra como usar uma cache de contexto com um modelo Gemini otimizado.

Quando usa uma cache de contexto, não pode especificar as seguintes propriedades:

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

REST

Pode usar o REST para especificar uma cache de contexto com um comando através da API Vertex AI para enviar um pedido POST para o ponto final do modelo do publicador.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o seu ID do projeto.
  • LOCATION: a região onde o pedido para criar a cache de contexto foi processado.
  • ENDPOINT_ID: o ponto final onde o modelo otimizado é implementado.
  • MIME_TYPE: o comando de texto a enviar para o modelo.

Método HTTP e URL:

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

Corpo JSON do pedido:

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

Para enviar o seu pedido, escolha uma destas opções:

curl

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:generateContent"

PowerShell

Guarde o corpo do pedido num ficheiro com o nome request.json, e execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/endpoints/ENDPOINT_ID:generateContent" | Select-Object -Expand Content

Deve receber uma resposta JSON semelhante à seguinte.

Comando curl de exemplo

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