はじめに
この記事では、VertexAIのGroundingをREST API仕様についてまとめています。
公式ドキュメントにはSDKを使った例は載っていたのですが、REST APIを使った例が古いAPI仕様に基づくものになっていたので、紹介します。
Groundingとは
Vertex AIの「Grounding」は、生成AIモデルの出力を信頼できる情報源に結びつけ、回答時に出典が明記したレスポンスを生成する機能です。
現状は、以下の2種類のGroundingが可能です。
-
Google 検索によるGrounding
-
ユーザー独自データでのGrounding
料金
VertexAI GroundingでGemini 2.0 Flashを使った場合の料金は以下のようになっています。
1日1500件までは無料ですが以降は1000件当たり、$35と割高
1日のリクエスト数 | 料金(米ドル | 備考 |
---|---|---|
~1,500件 | 無料 | 無料枠 |
1,501~1,000,000件 | $35 / 1,000件 | 従量課金 |
1,000,001件以上 | 要問い合わせ | アカウント担当者に要連絡 |
- 公式ページ: Vertex AI Pricing
ちなみに、AzureでGroundingをする場合も1000件当たり$35。
プラン名 | 最大コール数 | 料金 | 主な特徴 |
---|---|---|---|
Grounding with Bing Search | 1秒あたり150トランザクション1日あたり100万件 | $35 / 1,000トランザクション | - Bing Search APIを活用したグラウンディング- Azure AI Foundry Agentの知識ソースとして利用可 |
Grounding with Bing Custom Search | 1秒あたり150トランザクション1日あたり100万件 | $35 / 1,000トランザクション | - カスタム検索空間を指定してグラウンディング- Azure AI Foundry Agentの知識ソースとして利用可 |
Rest API
Rest APIの仕様は以下の通りです。
リクエストボディ
tools
に"googleSearch": {}
を設定することでGroundingの設定が可能です。
{
"contents": [
{
"role": "user",
"parts": [
{
"text": "Googleについて検索して"
}
]
}
],
"system_instruction": {
"parts": [
{
"text": "You are a helpful assistant."
}
],
"role": "model"
},
"generation_config": {
"maxOutputTokens": 4096,
"temperature": 0.1,
"frequencyPenalty": 0.1,
"presencePenalty": 0.1,
"topP": 0.1,
"thinkingConfig": {
"thinkingBudget": 4,
"includeThoughts": true
}
},
"tools": [
{
"googleSearch": {}
}
]
}
レスポンスボディ
groundingMetadata
配下にGroundingの結果が出力されます。
groundingMetadata
配下には、以下の情報が含まれています。
-
webSearchQueries
- 概要: モデルが情報を検索するために使ったクエリ(キーワード)のリスト
- 例: [“Google”, “Google 会社概要”, “Google サービス”]
-
searchEntryPoint
- 概要:
webSearchQueries
のキーワードをUIに表示する際のHTML要素
- 概要:
-
groundingChunks
- 概要: Groudingした情報源となるWEBサイトの情報(サイト名、urlなど)
-
groundingSupports
- 概要: 出力文のうち、どの部分がどの情報源に基づいているか、confidenceScores(情報の信頼度)を出力
{
"candidates": [
{
"content": {
"role": "model",
"parts": [
{
"text": "**Beginning the Search**\n\nI've started the process. My focus is on gathering general information about Google itself, so I'm conducting a Google search for the term Google....省略",
"thought": true
},
{
"text": "Google LLCは、インターネット関連のサービスと製品に特化したアメリカ合衆国の企業です。....省略"
}
]
},
"finishReason": "STOP",
"groundingMetadata": {
"webSearchQueries": [
"Google",
"Google 会社概要",
"Google サービス"
],
"searchEntryPoint": {
"renderedContent": "<style>\n.container {\n align-items: center;\n border-radius: 8px;\n display: flex;\n font-family: Google Sans, Roboto, sans-serif;\n font-size: 14px;\n line-height: 20px;\n padding: 8px 12px;\n}\n.chip {\n display: inline-block;\n border: solid 1px;\n border-radius: 16px;\n min-width: 14px;\n padding: 5px 16px;\n text-align: center;\n user-select: none;\n margin: 0 8px;\n -webkit-tap-highlight-color: transparent;\n}\n.carousel {\n overflow: auto;\n scrollbar-width: none;\n white-space: nowrap;\n margin-right: -12px;\n}\n.headline {\n display: flex;\n margin-right: 4px;\n}\n.gradient-container {\n position: relative;\n}\n.gradient {\n position: absolute;\n transform: translate(3px, -9px);\n height: 36px;\n width: 9px;\n}\n@media (prefers-color-scheme: light) {\n .container {\n background-color: #fafafa;\n box-shadow: 0 0 0 1px #0000000f;\n }\n .headline-label {\n color: #1f1f1f;\n }\n .chip {\n background-color: #ffffff;\n border-color: #d2d2d2;\n color: #5e5e5e;\n text-decoration: none;\n }\n .chip:hover {\n background-color: #f2f2f2;\n }\n .chip:focus {\n background-color: #f2f2f2;\n }\n .chip:active {\n background-color: #d8d8d8;\n border-color: #b6b6b6;\n }\n .logo-dark {\n display: none;\n }\n .gradient {\n background: linear-gradient(90deg, #fafafa 15%, #fafafa00 100%);\n }\n}\n@media (prefers-color-scheme: dark) {\n .container {\n background-color: #1f1f1f;\n box-shadow: 0 0 0 1px #ffffff26;\n }\n .headline-label {\n color: #fff;\n }\n .chip {\n background-color: #2c2c2c;\n border-color: #3c4043;\n color: #fff;\n text-decoration: none;\n }\n .chip:hover {\n background-color: #353536;\n }\n .chip:focus {\n background-color: #353536;\n }\n .chip:active {\n background-color: #464849;\n border-color: #53575b;\n }\n .logo-light {\n display: none;\n }\n .gradient {\n background: linear-gradient(90deg, #1f1f1f 15%, #1f1f1f00 100%);\n }\n}\n</style>\n<div class=\"container\">\n <div class=\"headline\">\n <svg class=\"logo-light\" width=\"18\" height=\"18\" viewBox=\"9 9 35 35\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M42.8622 27.0064C42.8622 25.7839 42.7525 24.6084 42.5487 23.4799H26.3109V30.1568H35.5897C35.1821 32.3041 33.9596 34.1222 32.1258 35.3448V39.6864H37.7213C40.9814 36.677 42.8622 32.2571 42.8622 27.0064V27.0064Z\" fill=\"#4285F4\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 43.8555C30.9659 43.8555 34.8687 42.3195 37.7213 39.6863L32.1258 35.3447C30.5898 36.3792 28.6306 37.0061 26.3109 37.0061C21.8282 37.0061 18.0195 33.9811 16.6559 29.906H10.9194V34.3573C13.7563 39.9841 19.5712 43.8555 26.3109 43.8555V43.8555Z\" fill=\"#34A853\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.6559 29.8904C16.3111 28.8559 16.1074 27.7588 16.1074 26.6146C16.1074 25.4704 16.3111 24.3733 16.6559 23.3388V18.8875H10.9194C9.74388 21.2072 9.06992 23.8247 9.06992 26.6146C9.06992 29.4045 9.74388 32.022 10.9194 34.3417L15.3864 30.8621L16.6559 29.8904V29.8904Z\" fill=\"#FBBC05\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.3109 16.2386C28.85 16.2386 31.107 17.1164 32.9095 18.8091L37.8466 13.8719C34.853 11.082 30.9659 9.3736 26.3109 9.3736C19.5712 9.3736 13.7563 13.245 10.9194 18.8875L16.6559 23.3388C18.0195 19.2636 21.8282 16.2386 26.3109 16.2386V16.2386Z\" fill=\"#EA4335\"/>\n </svg>\n <svg class=\"logo-dark\" width=\"18\" height=\"18\" viewBox=\"0 0 48 48\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"24\" cy=\"23\" fill=\"#FFF\" r=\"22\"/>\n <path d=\"M33.76 34.26c2.75-2.56 4.49-6.37 4.49-11.26 0-.89-.08-1.84-.29-3H24.01v5.99h8.03c-.4 2.02-1.5 3.56-3.07 4.56v.75l3.91 2.97h.88z\" fill=\"#4285F4\"/>\n <path d=\"M15.58 25.77A8.845 8.845 0 0 0 24 31.86c1.92 0 3.62-.46 4.97-1.31l4.79 3.71C31.14 36.7 27.65 38 24 38c-5.93 0-11.01-3.4-13.45-8.36l.17-1.01 4.06-2.85h.8z\" fill=\"#34A853\"/>\n <path d=\"M15.59 20.21a8.864 8.864 0 0 0 0 5.58l-5.03 3.86c-.98-2-1.53-4.25-1.53-6.64 0-2.39.55-4.64 1.53-6.64l1-.22 3.81 2.98.22 1.08z\" fill=\"#FBBC05\"/>\n <path d=\"M24 14.14c2.11 0 4.02.75 5.52 1.98l4.36-4.36C31.22 9.43 27.81 8 24 8c-5.93 0-11.01 3.4-13.45 8.36l5.03 3.85A8.86 8.86 0 0 1 24 14.14z\" fill=\"#EA4335\"/>\n </svg>\n <div class=\"gradient-container\"><div class=\"gradient\"></div></div>\n </div>\n <div class=\"carousel\">\n <a class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge1\">Google サービス</a>\n <a class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge2\">Google</a>\n <a class=\"chip\" href=\"https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge3\">Google 会社概要</a>\n </div>\n</div>\n"
},
"groundingChunks": [
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge1",
"title": "wikipedia.org",
"domain": "wikipedia.org"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge2",
"title": "about.google",
"domain": "about.google"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge3",
"title": "daijob.com",
"domain": "daijob.com"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge4",
"title": "globalpolicynetwork.org",
"domain": "globalpolicynetwork.org"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge5,
"title": "ec-create.jp",
"domain": "ec-create.jp"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge6,
"title": "isi-grp.co.jp",
"domain": "isi-grp.co.jp"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge7",
"title": "google.co.jp",
"domain": "google.co.jp"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge8",
"title": "google.com",
"domain": "google.com"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge9",
"title": "google.com",
"domain": "google.com"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge10,
"title": "about.google",
"domain": "about.google"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge11",
"title": "blog.google",
"domain": "blog.google"
}
},
{
"web": {
"uri": "https://vertexaisearch.cloud.google.com/grounding-api-redirect/hogehoge12",
"title": "google.com",
"domain": "google.com"
}
}
],
"groundingSupports": [
{
"segment": {
"startIndex": 357,
"endIndex": 476,
"text": "アメリカ合衆国の主要なIT企業の一つで、「ビッグ・テック」としても知られています。"
},
"groundingChunkIndices": [
0
],
"confidenceScores": [
1
]
},
{
"segment": {
"startIndex": 787,
"endIndex": 829,
"text": "として正式に設立されました。"
},
"groundingChunkIndices": [
0,
1
],
"confidenceScores": [
1,
1
]
}
// ...省略
],
"retrievalMetadata": {
}
}
}
],
"usageMetadata": {
"promptTokenCount": 10,
"candidatesTokenCount": 686,
"totalTokenCount": 781,
"trafficType": "ON_DEMAND",
"promptTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 10
}
],
"candidatesTokensDetails": [
{
"modality": "TEXT",
"tokenCount": 686
}
],
"thoughtsTokenCount": 85
},
"modelVersion": "gemini-2.0-flash",
"createTime": "2025-06-08T01:08:23.752284Z",
"responseId": "h-JEaJz1LeKdseMPraKn8AY"
}
おわりに
本記事では、Vertex AI GroundingのREST API仕様について、リクエスト・レスポンス例や主要なパラメータ、料金体系を整理しました。
SDK利用例が多い中、REST APIでの実装やGrounding結果の構造を把握したい場合の参考になれば幸いです。