Atualizar um cache de contexto

É possível atualizar quando um cache de contexto expira. O tempo de expiração padrão de um contexto de armazenamento em cache 60 minutos após o horário de criação. Um cache de contexto expirado excluídos durante um processo de coleta de lixo e não podem ser usados ou atualizados. Para atualizar o horário em que um cache de contexto não expirado expirar, atualizar um dos seguintes propriedades:

  • ttl: o número de segundos e nanossegundos que o cache permanece depois criado ou depois que o ttl for atualizado antes de expirar. Quando você define ttl, o expireTime do cache será atualizado.

  • expire_time: uma Timestamp que especifica a data e a hora absolutas em que o cache de contexto expira.

Atualizar o cache de contexto usando o parâmetro ttl

Este é um exemplo de um comando curl que atualiza seu prazo de validade em 3.600 segundos.

Python

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API SDK da Vertex AI para Python.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o parâmetro stream em generate_content.

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

Para uma resposta que não seja de streaming, remova o parâmetro ou defina-o como False.

Código de amostra

import vertexai
from datetime import datetime as dt
from datetime import timezone as tz
from datetime import timedelta

from vertexai.preview import caching

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# cache_id = "your-cache-id"

vertexai.init(project=PROJECT_ID, location="us-central1")

cached_content = caching.CachedContent(cached_content_name=cache_id)

# Option1: Update the context cache using TTL (Time to live)
cached_content.update(ttl=timedelta(hours=3))
cached_content.refresh()

# Option2: Update the context cache using specific time
next_week_utc = dt.now(tz.utc) + timedelta(days=7)
cached_content.update(expire_time=next_week_utc)
cached_content.refresh()

print(cached_content.expire_time)
# Example response:
# 2024-09-11 17:16:45.864520+00:00

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido da Vertex AI. Para mais informações, consulte a documentação de referência do SDK da Vertex AI para Go para Gemini.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o 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 uma resposta que não seja de streaming, use o método GenerateContent.

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

Código de amostra

import (
	"context"
	"fmt"
	"io"
	"time"

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

// updateContextCache shows how to update the expiration time of a cached content, by specifying
// a new TTL (time-to-live duration)
// contentName is the ID of the cached content to update
func updateContextCache(w io.Writer, contentName string, projectID, location string) error {
	// location := "us-central1"
	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()

	cachedContent, err := client.GetCachedContent(ctx, contentName)
	if err != nil {
		return fmt.Errorf("GetCachedContent: %w", err)
	}

	update := &genai.CachedContentToUpdate{
		Expiration: &genai.ExpireTimeOrTTL{TTL: 2 * time.Hour},
	}

	_, err = client.UpdateCachedContent(ctx, cachedContent, update)
	fmt.Fprintf(w, "Updated cached content %q", contentName)
	return err
}

REST

É possível usar REST para criar uma atualização do cache de contexto usando a a API Vertex AI para enviar uma solicitação PATCH ao endpoint do modelo do publisher. O o exemplo a seguir mostra como atualizar a data de validade usando a Parâmetro ttl.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto.
  • LOCATION: a região onde a solicitação para criar o cache de contexto foi processado.
  • CACHE_ID: o ID do cache de contexto. O ID do cache de contexto é retornado quando você o cria. Você também pode encontrar IDs de cache de contexto listando os caches de contexto de um projeto do Google Cloud usando. Para mais informações, consulte criar um cache de contexto e listar caches de contexto.
  • SECONDS: uma float que especifica o componente de segundos da duração antes de o cache expirar.
  • NANOSECONDS: uma float que especifica o componente de nanossegundos da duração antes do cache expirar.

Método HTTP e URL:

PATCH https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/cachedContents/CACHE_ID

Corpo JSON da solicitação:

{
  "seconds":"SECONDS",
  "nanos":"NANOSECONDS"
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

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

Você receberá uma resposta JSON semelhante a esta:

Exemplo de comando curl

PROJECT_NUMBER="PROJECT_NUMBER"
LOCATION="us-central1"
PROJECT_ID="PROJECT_ID"
CACHE_ID="CACHE_ID"

curl \
-X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"\
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${LOCATION}/cachedContents/${CACHE_ID}" -d \
'{
   "ttl": {"seconds":"3600","nanos":"0"}
}'

Atualizar o cache de contexto usando o parâmetro expire_time

Veja a seguir um exemplo de comando curl que usa a expire_time para atualizar o prazo de validade para as 9h em 30 de junho de 2024.

REST

É possível usar REST para criar uma atualização do cache de contexto usando a a API Vertex AI para enviar uma solicitação PATCH ao endpoint do modelo do publisher. O o exemplo a seguir mostra como atualizar a data de validade usando a Parâmetro expire_time.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

Método HTTP e URL:

PATCH https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/cachedContents/CACHE_ID

Corpo JSON da solicitação:

{
   "expire_time":"EXPIRE_TIME"
}

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

PowerShell

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

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

Você receberá uma resposta JSON semelhante a esta:

Exemplo de comando curl

PROJECT_NUMBER="PROJECT_NUMBER"
LOCATION="us-central1"
PROJECT_ID="PROJECT_ID"
CACHE_ID="CACHE_ID"

curl \
-X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"\
"https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_NUMBER}/locations/${LOCATION}/cachedContents/${CACHE_ID}" -d \
'{
   "expire_time":"2024-06-30T09:00:00.000000Z"
}' 

A seguir