Membuat cache konteks

Anda harus membuat cache konteks sebelum dapat menggunakannya. Konteks yang disimpan di cache {i>create<i} berisi data dalam jumlah besar yang dapat digunakan dalam beberapa permintaan model Gemini. Konten yang di-cache disimpan di region tempat Anda membuat untuk membuat cache.

Konten yang di-cache dapat berupa jenis MIME apa pun yang didukung oleh multimodal Gemini jaringan. Misalnya, Anda dapat meng-cache teks, audio, atau video dalam jumlah besar. Anda dapat menentukan lebih dari satu file untuk di-cache. Untuk informasi selengkapnya, lihat referensi berikut persyaratan media:

Anda menentukan konten yang akan di-cache menggunakan blob, teks, atau jalur ke file yang yang disimpan di bucket Cloud Storage. Jika ukuran konten yang Anda simpan dalam cache lebih besar dari 10 MB, maka Anda harus menentukannya menggunakan URI file yang yang disimpan di bucket Cloud Storage.

Konten yang di-cache memiliki masa aktif yang terbatas. Waktu habis masa berlaku default suatu konteks cache adalah 60 menit setelah dibuat. Jika Anda menginginkan waktu kedaluwarsa yang berbeda, Anda dapat menentukan waktu habis masa berlaku yang berbeda menggunakan ttl atau expire_time saat Anda membuat cache konteks. Anda juga dapat memperbarui tanggal habis masa berlaku untuk cache konteks yang belum habis masa berlakunya. Untuk informasi tentang cara menentukan ttl dan expire_time, lihat Memperbarui waktu habis masa berlaku.

Setelah kedaluwarsa, cache konteks tidak akan tersedia lagi. Jika Anda ingin merujuk konten dalam cache konteks yang kedaluwarsa di permintaan prompt mendatang, maka Anda perlu membuat ulang cache konteks.

Batas cache konteks

Konten yang Anda cache harus mematuhi batasan berikut:

Batas cache konteks

Ukuran cache minimum

32.769 token

Ukuran maksimum konten yang dapat di-cache menggunakan blob atau teks

10 MB

Waktu minimum sebelum cache berakhir setelah dibuat

1 menit

Waktu maksimum sebelum cache berakhir setelah dibuat

Tidak ada durasi cache maksimum

Membuat contoh cache konteks

Berikut ini cara membuat cache konteks.

Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk informasi selengkapnya, lihat Vertex AI SDK untuk Python dokumentasi referensi API.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau non-streaming. Untuk respons bertahap, Anda menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan parameter stream di generate_content.

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

Untuk respons non-streaming, hapus parameter, atau setel parameter ke False.

Kode contoh

import vertexai
import datetime

from vertexai.generative_models import Part
from vertexai.preview import caching

# TODO(developer): Update and un-comment below line
# project_id = "PROJECT_ID"

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

system_instruction = """
You are an expert researcher. You always stick to the facts in the sources provided, and never make up new facts.
Now look at these research papers, and answer the following questions.
"""

contents = [
    Part.from_uri(
        "gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf",
        mime_type="application/pdf",
    ),
    Part.from_uri(
        "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
        mime_type="application/pdf",
    ),
]

cached_content = caching.CachedContent.create(
    model_name="gemini-1.5-pro-001",
    system_instruction=system_instruction,
    contents=contents,
    ttl=datetime.timedelta(minutes=60),
    display_name="example-cache",
)

print(cached_content.name)

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Vertex AI panduan memulai. Untuk informasi lebih lanjut, lihat Vertex AI Go SDK untuk dokumentasi referensi Gemini.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

Respons streaming dan non-streaming

Anda dapat memilih apakah model akan menghasilkan respons streaming atau non-streaming. Untuk respons bertahap, Anda menerima setiap respons segera setelah token output-nya dibuat. Untuk respons non-streaming, Anda menerima semua respons setelah semua token output dibuat.

Untuk respons streaming, gunakan GenerateContentStream.

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

Untuk respons non-streaming, gunakan metode GenerateContent.

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

Kode contoh

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

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

// createContextCache shows how to create a cached content, and returns its name.
func createContextCache(w io.Writer, projectID, location, modelName string) (string, error) {
	// location := "us-central1"
	// modelName := "gemini-1.5-pro-001"
	ctx := context.Background()

	systemInstruction := `
    	You are an expert researcher. You always stick to the facts in the sources provided, and never make up new facts.
    	Now look at these research papers, and answer the following questions.
    `

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

	// These PDF are viewable at
	//   https://storage.googleapis.com/cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf
	//   https://storage.googleapis.com/cloud-samples-data/generative-ai/pdf/2403.05530.pdf

	part1 := genai.FileData{
		MIMEType: "application/pdf",
		FileURI:  "gs://cloud-samples-data/generative-ai/pdf/2312.11805v3.pdf",
	}

	part2 := genai.FileData{
		MIMEType: "application/pdf",
		FileURI:  "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
	}

	content := &genai.CachedContent{
		Model: modelName,
		SystemInstruction: &genai.Content{
			Parts: []genai.Part{genai.Text(systemInstruction)},
		},
		Expiration: genai.ExpireTimeOrTTL{TTL: 60 * time.Minute},
		Contents: []*genai.Content{
			{
				Role:  "user",
				Parts: []genai.Part{part1, part2},
			},
		},
	}

	result, err := client.CreateCachedContent(ctx, content)
	if err != nil {
		return "", fmt.Errorf("CreateCachedContent: %w", err)
	}
	fmt.Fprint(w, result.Name)
	return result.Name, nil
}

REST

Anda dapat menggunakan REST untuk membuat cache konteks menggunakan Vertex AI API untuk mengirim permintaan POST ke endpoint model penayang. Contoh berikut menunjukkan cara membuat cache konteks menggunakan file yang disimpan dalam Cloud Storage direktori VM dengan bucket.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Region untuk memproses permintaan dan tempat konten yang di-cache disimpan. Untuk daftar wilayah yang didukung, lihat Wilayah yang tersedia.
  • MIME_TYPE: Jenis MIME konten yang akan di-cache.
  • CONTENT_TO_CACHE_URI: URI Cloud Storage konten yang akan di-cache.

Metode HTTP dan URL:

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

Isi JSON permintaan:

{
  "model": "projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-pro-001",
  "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."
      }]
  }]
}

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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/v1beta1/projects/PROJECT_ID/locations/LOCATION/cachedContents"

PowerShell

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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/v1beta1/projects/PROJECT_ID/locations/LOCATION/cachedContents" | Select-Object -Expand Content

Anda akan menerima respons JSON yang mirip dengan yang berikut ini:

Contoh perintah curl

LOCATION="us-central1"
MODEL_ID="gemini-1.5-pro-001"
PROJECT_ID="test-project"
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}/publishers/google/models/${MODEL_ID}/cachedContents -d \
'{
  "model":"projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}",
  "contents": [
    {
      "role": "user",
      "parts": [
        {
          "fileData": {
            "mimeType": "${MIME_TYPE}",
            "fileUri": "${CACHED_CONTENT_URI}"
          }
        }
      ]
    }
  ]
}'

Langkah selanjutnya