為精調的 Gemini 模型快取脈絡

您可以為精細調整的 Gemini 模型使用內容快取功能,改善提示的效能並降低費用,特別是當提示包含大量內容時。快取常用的脈絡,避免每次向精細調整的模型提出要求時,重複傳送大量資料。

經過調整的 Gemini 對應快取的管理作業 (ReadUpdateDelete) 與基礎模型一致。只有快取內容建立和推論作業需要進行特定調整,詳情請參閱下文。

支援的模型

針對從下列基礎模型微調的模型,支援內容快取功能:

  • gemini-2.0-flash-001

事前準備

微調 Gemini 模型:您需要部署微調的 Gemini 模型,並以支援的基礎模型為基礎 (請參閱「支援的模型」)。如要進一步瞭解如何微調 Gemini 模型,請參閱「微調 Gemini 模型」一文。如要取得已部署的調整後模型的端點,請參閱「部署調整後的模型」。

請確認您已備妥下列資訊:

  • 經過調整的 Gemini 模型 ID 和版本
  • 已部署的微調模型的端點資源名稱

為微調後的模型建立脈絡快取

支援的基礎模型列於「支援的模型」一節。

為精細調整的模型建立脈絡快取的程序,基本上會遵循「建立脈絡快取」一文所述的步驟。請參閱連結的說明文件,瞭解一般程序;本指南著重於為精細調整的 Gemini 模型建立內容快取的差異。

您必須使用以 projects/{PROJECT}/locations/{LOCATION}/models/{MODEL}@{VERSION} 為格式的微調模型,而非以 projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL} 為格式的基礎模型。

以下範例說明如何使用經過調整的 Gemini 模型建立內容快取。

REST

您可以使用 REST 建立內容快取,方法是使用 Vertex AI API 將 POST 要求傳送至發布者模型端點。下列範例說明如何使用儲存在 Cloud Storage 值區中的檔案建立內容快取。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的專案 ID
  • LOCATION:處理要求的區域,以及快取內容的儲存位置。如需支援的地區清單,請參閱「可用地區」。
  • MODEL_ID:微調的 Gemini 模型 ID。
  • MODEL_VERSION:精細調整過的 Gemini 模型版本。
  • CACHE_DISPLAY_NAME:有意義的顯示名稱,可用於描述並協助您識別每個內容快取。
  • MIME_TYPE:要快取的內容 MIME 類型。
  • CONTENT_TO_CACHE_URI:要快取的內容 Cloud Storage URI。

HTTP 方法和網址:

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

JSON 要求主體:

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

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$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

您應該會收到類似以下的 JSON 回應:

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

為微調後的模型使用脈絡快取

針對經過微調的模型使用脈絡快取的程序,基本上會遵循「使用脈絡快取」一文中列出的步驟。請參閱連結的說明文件,瞭解一般程序;本指南著重於針對精細調整的 Gemini 模型使用情境快取的差異。

請勿以 projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL} 的形式將要求傳送至基礎模型端點,而是必須以 projects/{PROJECT}/locations/{LOCATION}/endpoints/{ENDPOINT_ID} 的形式將要求傳送至已部署的微調模型端點。

以下程式碼範例說明如何搭配經過調整的 Gemini 模型使用內容快取。

使用內容快取時,您無法指定下列屬性:

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

REST

您可以使用 REST 指定帶有提示的內容快取,方法是使用 Vertex AI API 將 POST 要求傳送至發布者模型端點。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的專案 ID
  • LOCATION:處理建立脈絡快取要求的區域。
  • ENDPOINT_ID:微調模型的部署端點。
  • MIME_TYPE:提示要提交至模型的文字。

HTTP 方法和網址:

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

JSON 要求主體:

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

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

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

將要求主體儲存在名為 request.json 的檔案中,然後執行下列指令:

$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

您應該會收到類似以下的 JSON 回應。

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