Menggunakan cache konteks

Anda dapat menggunakan REST API atau Python SDK untuk mereferensikan konten yang disimpan dalam konteks di aplikasi AI generatif. Sebelum dapat digunakan, Anda harus terlebih dahulu membuat cache konteks.

Objek cache konteks yang Anda gunakan dalam kode menyertakan properti berikut:

  • name - Nama resource cache konteks. Formatnya adalah projects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID. Saat Anda membuat cache konteks, Anda bisa menemukan nama resource-nya berada di yang dihasilkan. Nomor project adalah ID unik untuk project Anda. Tujuan ID cache adalah ID untuk cache Anda. Bila Anda menentukan {i> cache<i} konteks di kode ini, Anda harus menggunakan nama resource cache konteks lengkap. Berikut adalah contoh yang menunjukkan cara Anda menentukan nama resource konten yang di-cache dalam permintaan isi:

    "cached_content": "projects/123456789012/locations/us-central1/123456789012345678"
    
  • model - Nama resource untuk model yang digunakan untuk membuat cache. Formatnya adalah projects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID.

  • createTime - Timestamp yang menentukan waktu pembuatan konteks {i>cache<i}.

  • updateTime - Timestamp yang menentukan waktu update terbaru dari cache konteks. Setelah cache konteks dibuat, dan sebelum diperbarui, createTime dan updateTime sama.

  • expireTime - Timestamp yang menentukan kapan cache konteks berakhir. Tujuan expireTime default adalah 60 menit setelah createTime. Anda dapat memperbarui cache dengan waktu habis masa berlaku yang baru. Untuk informasi selengkapnya, lihat Update cache konteks.
    Setelah kedaluwarsa, cache akan ditandai untuk dihapus dan Anda jangan berasumsi bahwa data itu dapat digunakan atau diperbarui. Jika Anda perlu menggunakan {i> cache<i} konteks yang kedaluwarsa, Anda harus membuatnya kembali dengan waktu kedaluwarsa yang sesuai.

Pembatasan penggunaan cache konteks

Fitur berikut dapat ditentukan saat Anda membuat cache konteks. Anda tidak boleh menentukannya lagi dalam permintaan Anda:

  • Properti GenerativeModel.system_instructions. Properti ini digunakan untuk menentukan instruksi ke model sebelum model menerima instruksi dari seorang pengguna. Untuk informasi selengkapnya, lihat Petunjuk sistem.

  • Properti GenerativeModel.tool_config. Tujuan Properti tool_config adalah yang digunakan untuk menentukan alat yang digunakan model Gemini, seperti alat yang digunakan fitur panggilan fungsi.

  • Properti GenerativeModel.tools. Properti GenerativeModel.tools digunakan untuk menentukan fungsi guna membuat aplikasi pemanggil fungsi. Untuk selengkapnya informasi, lihat Panggilan fungsi.

Menggunakan contoh cache konteks

Berikut ini cara menggunakan cache konteks. Saat Anda menggunakan cache konteks, Anda tidak dapat menentukan properti berikut:

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

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

from vertexai.preview.generative_models import GenerativeModel
from vertexai.preview import caching

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

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

cached_content = caching.CachedContent(cached_content_name=cache_id)

model = GenerativeModel.from_cached_content(cached_content=cached_content)

response = model.generate_content("What are the papers about?")

print(response.text)

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"
	"errors"
	"fmt"
	"io"

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

// useContextCache shows how to use an existing cached content, when prompting the model
// contentName is the ID of the cached content
func useContextCache(w io.Writer, contentName string, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-pro-001"
	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()

	model := client.GenerativeModel(modelName)
	model.CachedContentName = contentName
	prompt := genai.Text("What are the papers about?")

	res, err := model.GenerateContent(ctx, prompt)
	if err != nil {
		return fmt.Errorf("error generating content: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated response: %s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

REST

Anda dapat menggunakan REST untuk menggunakan cache konteks dengan perintah menggunakan Vertex AI API untuk mengirim permintaan POST ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_ID: Project ID Anda.
  • LOCATION: Wilayah tempat permintaan untuk membuat cache konteks telah diproses.
  • MIME_TYPE: Perintah teks untuk dikirim ke model.

Metode HTTP dan URL:

POST https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-pro-001:generateContent

Isi JSON permintaan:

{
  "cached_content": "projects/PROJECT_NUMBER/locations/LOCATION/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"
      }
  ],
}

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/publishers/google/models/gemini-1.5-pro-001:generateContent"

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/publishers/google/models/gemini-1.5-pro-001:generateContent" | Select-Object -Expand Content

Anda akan melihat respons JSON yang mirip seperti berikut:

Contoh perintah curl

LOCATION="us-central1"
MODEL_ID="gemini-1.5-pro-001"
PROJECT_ID="test-project"

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}:generateContent" -d \
'{
  "cached_content": "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"
    }
  ],
}'