微调后的 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"
    }
  ],
}'