為精調的 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}/endpoints/{ENDPOINT_ID}),而非傳送至基礎模型端點 (格式為 projects/{PROJECT}/locations/{LOCATION}/publishers/google/models/{MODEL})。

下列程式碼範例說明如何搭配微調的 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"
    }
  ],
}'