REST API または Python SDK を使用して、生成 AI アプリケーションのコンテキスト キャッシュに保存されているコンテンツを参照できます。使用するには、まずコンテキスト キャッシュを作成する必要があります。
コードで使用するコンテキスト キャッシュ オブジェクトには、次のプロパティが含まれます。
name
- コンテキスト キャッシュのリソース名。形式はprojects/PROJECT_NUMBER/locations/LOCATION/cachedContents/CACHE_ID
です。コンテキスト キャッシュを作成すると、レスポンスにはそのリソース名が含まれます。プロジェクト番号はプロジェクトの固有識別子です。キャッシュ ID はキャッシュの ID です。コード内でコンテキスト キャッシュを指定する場合、完全なコンテキスト キャッシュ リソース名を使用する必要があります。以下に示すのは、キャッシュに保存されたコンテンツのリソース名をリクエスト本文で指定する方法です。"cached_content": "projects/123456789012/locations/us-central1/123456789012345678"
model
- キャッシュの作成に使用されるモデルのリソース名。形式はprojects/PROJECT_NUMBER/locations/LOCATION/publishers/PUBLISHER_NAME/models/MODEL_ID
です。createTime
- コンテキスト キャッシュの作成日時を指定するTimestamp
。updateTime
- コンテキスト キャッシュの最新更新時間を指定するTimestamp
。コンテキスト キャッシュが作成されてから更新されるまでの間、createTime
とupdateTime
は同じです。expireTime
- コンテキスト キャッシュの有効期限を指定するTimestamp
。デフォルトのexpireTime
はcreateTime
の 60 分後です。キャッシュに新しい有効期限を設定できます。詳細については、コンテキスト キャッシュを更新するをご覧ください。
有効期限が切れたキャッシュは削除対象としてマークされます。そうしたキャッシュは使用または更新できません。期限切れのコンテキスト キャッシュを使用する必要がある場合は、適切な有効期限を設定して再作成する必要があります。
コンテキスト キャッシュの使用制限
コンテキスト キャッシュの作成時に、次の機能を指定できます。リクエストで再度指定しないでください。
GenerativeModel.system_instructions
プロパティ。このプロパティは、モデルがユーザーから指示を受け取る前に、モデルへの指示を指定するために使用されます。詳細については、システム指示をご覧ください。GenerativeModel.tool_config
プロパティ。tool_config
プロパティは、関数呼び出し機能で使用されるツールなど、Gemini モデルで使用されるツールを指定するために使用されます。GenerativeModel.tools
プロパティ。GenerativeModel.tools
プロパティは、関数呼び出しアプリケーションを作成する関数を指定するために使用されます。詳細については、関数呼び出しをご覧ください。
コンテキスト キャッシュの使用例
コンテキスト キャッシュを使用するには、以下の方法があります。コンテキスト キャッシュを使用する場合は、これらのプロパティを指定できません。
GenerativeModel.system_instructions
GenerativeModel.tool_config
GenerativeModel.tools
Vertex AI SDK for Python のインストールまたは更新方法については、Vertex AI SDK for Python をインストールするをご覧ください。詳細については、Vertex AI SDK for Python API リファレンス ドキュメントをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、generate_content
で stream
パラメータを使用します。
response = model.generate_content(contents=[...], stream = True)
非ストリーミング レスポンスの場合は、パラメータを削除するか、パラメータを False
に設定します。
サンプルコード
このサンプルを試す前に、Vertex AI クイックスタートの Go の設定手順を実施してください。詳細については、Vertex AI Go SDK for Gemini リファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
ストリーミング レスポンスと非ストリーミング レスポンス
モデルがストリーミング レスポンスを生成するのか、非ストリーミング レスポンスを生成するのかについては、選択が可能です。ストリーミング レスポンスの場合、出力トークンが生成されるとすぐに各レスポンスが返されます。非ストリーミング レスポンスの場合、すべての出力トークンが生成された後にすべてのレスポンスが返されます。
ストリーミング レスポンスの場合は、GenerateContentStream
メソッドを使用します。
iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
非ストリーミング レスポンスの場合は、GenerateContent
メソッドを使用します。
resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
サンプルコード
REST を使用してプロンプトでコンテキスト キャッシュを使用するには、Vertex AI API を使用してパブリッシャー モデル エンドポイントに POST リクエストを送信します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_ID : 実際のプロジェクト ID。LOCATION : コンテキスト キャッシュの作成のリクエストが処理されたリージョン。MIME_TYPE : モデルに送信するテキスト プロンプト。
HTTP メソッドと URL:
POST https://LOCATION -aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID /locations/LOCATION /publishers/google/models/gemini-1.5-pro-002: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" } ], }
リクエストを送信するには、次のいずれかのオプションを選択します。
リクエスト本文を 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/v1beta1/projects/PROJECT_ID /locations/LOCATION /publishers/google/models/gemini-1.5-pro-002:generateContent"
リクエスト本文を 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/v1beta1/projects/PROJECT_ID /locations/LOCATION /publishers/google/models/gemini-1.5-pro-002:generateContent" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
レスポンス
{ "candidates": [ { "content": { "role": "model", "parts": [ { "text": "MODEL_RESPONSE " } ] }, "finishReason": "STOP", "safetyRatings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "probability": "NEGLIGIBLE", "probabilityScore": 0.21866937, "severity": "HARM_SEVERITY_NEGLIGIBLE", "severityScore": 0.19946389 }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "probability": "MEDIUM", "probabilityScore": 0.6880493, "severity": "HARM_SEVERITY_MEDIUM", "severityScore": 0.43374163 }, { "category": "HARM_CATEGORY_HARASSMENT", "probability": "NEGLIGIBLE", "probabilityScore": 0.4442634, "severity": "HARM_SEVERITY_LOW", "severityScore": 0.37903354 }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "probability": "NEGLIGIBLE", "probabilityScore": 0.10502681, "severity": "HARM_SEVERITY_LOW", "severityScore": 0.28170192 } ] } ], "usageMetadata": { "promptTokenCount": 55927, "candidatesTokenCount": 105, "totalTokenCount": 56032 } }
curl コマンドの例
LOCATION="us-central1"
MODEL_ID="gemini-1.5-pro-002"
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 \
'{
"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"
}
],
}'
- コンテキスト キャッシュの有効期限を更新する方法を確認する。
- 新しいコンテキスト キャッシュを作成する方法を確認する。
- Google Cloud プロジェクトに関連付けられているすべてのコンテキスト キャッシュに関する情報を取得する方法を確認する。
- コンテキスト キャッシュを削除する方法を確認する。