您可以为微调后的 Gemini 模型使用上下文缓存,以提高性能并降低包含大量上下文的提示的费用。通过缓存常用上下文,您可以避免在每次向微调后的模型发送请求时重新发送大量数据。
调优后的 Gemini 的上下文缓存管理操作(Read
、Update
、Delete
)与基础模型保持一致。只有缓存内容创建和推理需要进行特定调整,具体如下所述。
支持的模型
从以下基础模型微调的模型支持上下文缓存:
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 请求。
在使用任何请求数据之前,请先进行以下替换:
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"
}
],
}'