DX開発事業部の西田です。

先日書いた記事でGrounding with Google Search in Vertex AIを紹介しました。

DX開発事業部 モダンエンジニアリングセクションの西田です。先週ラスベガスで開催されていたGoogle Cloud Next ’24で発表された「Grounding with Google Search in Vertex AI」を早速プレビュー申請して触ってみました!Google検索で根拠づけVertex AI Studioから使...

その後無事GAされ、正式にVetex AI経由で呼び出したGeminiなどのLLMに対して、問い合わせ内容のGoogle検索による根拠づけが行えるようになりました!
これによりファインチューニングやRAGを行わなくてもWeb上の情報を加味した回答をGeminiに行わせることができ、より使いやすくなりました。

とはいえ所謂Webブラウジング機能がついたわけではないようで、使っているとGeminiが考えた回答に対して後から検索による裏付け、補正などを行っているような動きをしているように感じます。

このため、

「https://iret.media/100974」
このURLの内容を教えて

たとえばこのようなプロンプトを与えても、

申し訳ありませんが、私はウェブページの内容を分析したり、要約したりすることはできません。私はインターネットに接続しておらず、ウェブサイトにアクセスして内容を取得することはできません。
このURLの内容について知りたい場合は、ブラウザで開いて確認してください。

という返事が返ってきます。
プロンプト次第では微妙に調べてくれてるような挙動をしますがデリケートで指示が難しいです(憶測ですが)。

コンシューマ版(という呼び方であっているのかわかりませんが)のGeminiではWebブラウジングを行ったうえで回答してくれてそうなので、こちらの挙動に近くなるとよりうれしいですね!

Custom Search JSON APIを使ったGeminiへのグラウンディング

ここから本題。

Vertex AIでできないならば、Geminiの圧倒的な入力トークン容量を利用して、別途Google検索した結果をプロンプトから与えるためにCustom Search APIを使ってグラウンディングを行ってみます!

まずは「プログラム可能な検索エンジン」の定義を作成します。
検索対象サイトを絞り込むなどの設定が行えますが一旦デフォルトで作成します。

これ自体は検索ウィジェットとしてウェブサイトに埋め込んだりできますが、今回はAPIで使うので「検索エンジンID」をプログラムで使うために控えます。

さらに対象Google CloudプロジェクトでAPIキーを発行しておきます。

APIキーを発行することで1日あたり100クエリの制限を超えて1日あたり1万クエリまで呼び出すことができます(その代わり別途課金が発生するので注意してください)。

準備ができたので以下のコードをGoogle Colabで実行します。
(ちなみにLangChainでエージェントにわたすツールとしてもGoogle Search APIを使うことができます)

#@title 環境設定
#@markdown ## 自身の環境に合わせて変更
#@markdown ### ※Google Cloudへの権限を持ったGoogleアカウントで実行してください
PROJECT_ID = 'your-project-id' # @param {type:'string'}
LOCATION = 'asia-northeast1'  # @param {type:'string'}
GOOGLE_CSE_ID = 'your-cse-id' # @param {type:'string'}
GOOGLE_API_KEY = 'your-api-key' # @param {type:'string'}
#@title ライブラリのインストール
!pip install --upgrade --quiet google-api-python-client==2.131.0 google-cloud-aiplatform==1.53.0
#@title 認証を通す
from google.colab import auth
auth.authenticate_user()
#@title Grounding with Google Search API
from googleapiclient.discovery import build
import vertexai
from vertexai.generative_models import GenerativeModel, Part, FinishReason
import vertexai.preview.generative_models as generative_models

search_word = """https://iret.media/100974""" # 検索ワード

search = build('customsearch', 'v1', developerKey=GOOGLE_API_KEY)

# キーワードで10件検索結果を取得
search_result = search.cse().list(q=search_word, cx=GOOGLE_CSE_ID, num=10).execute()
if 'spelling' in search_result: # 「もしかして」の結果があれば再検索
  search_word = search_result['spelling']['correctedQuery']
  search_result = search.cse().list(q=search_word, cx=GOOGLE_CSE_ID, num=10, start=1).execute()

# Googleの検索結果を付与してプロンプトを作成
prompt = f"""
{search_word}
上記のワードでGoogleを検索し
{search_result}
上記の実行結果が返ってきました。

この検索結果から得られたURLの遷移先も調べて、「{search_word}」の内容を詳しく説明してください。
"""

vertexai.init(project=PROJECT_ID, location=LOCATION)
model = GenerativeModel(
  "gemini-1.5-pro-001",
)

# Geminiへの問い合わせを実行
responses = model.generate_content(
    [prompt],
    generation_config={
        "max_output_tokens": 8192,
        "temperature": 0,
        "top_p": 0.95,
    },
    stream=False
)
print(responses.text)

上記のコードを実行して得られた結果がこんな感じです。

「https://iret.media/100974」の内容説明

このURLは、クラウドサービス事業などを手がける株式会社アイレットのオウンドメディア「iret.media」の記事に遷移します。

記事タイトルは「【Google Cloud Next ’24】Grounding with Google Search in Vertex AIを早速使ってみた🔍✨」です。

記事の概要

この記事は、Google Cloud Next ’24で発表されたGoogle CloudのAIプラットフォームであるVertex AIの新機能「Grounding with Google Search」を実際に試してみたという内容です。

筆者はアイレット株式会社のDX開発事業部 モダンエンジニアリングセクション所属の西田駿史氏です。

Grounding with Google Searchとは

Grounding with Google Searchは、大規模言語モデルが生成した回答の信頼性を高めるための機能です。具体的には、生成された回答を裏付ける根拠をGoogle検索の結果から探し出し、引用元とともに提示します。

記事の内容

記事では、Grounding with Google Searchを使って以下の3つのユースケースを試しています。

  1. 最新の情報に基づいた回答を得る
    • 過去の情報で学習したモデルでも、Grounding with Google Searchを使うことで最新の情報に基づいた回答を得られることを確認しています。
  2. 回答の引用元を確認する
    • 生成された回答がどの情報源に基づいているのかを確認することで、回答の信頼性を評価できることを示しています。
  3. 回答の根拠となる情報を詳しく調べる
    • 引用元を辿ることで、回答の根拠となる情報をより深く理解できることを示しています。

記事では、それぞれのユースケースについて具体的な例を挙げながら、Grounding with Google Searchの利点や使い方を分かりやすく解説しています。

まとめ

この記事は、Google Cloud Next ’24で発表されたVertex AIの新機能「Grounding with Google Search」について、実際に試してみた感想やユースケースを交えながら紹介しています。

Grounding with Google Searchは、大規模言語モデルの信頼性を高めるための画期的な機能であり、今後のAI技術の発展に大きく貢献することが期待されます。

先ほどはできなかったURLの内容を読み取ってGeminiに説明させることができました!
このパターンならGoogle Search APIでなくてもWebスクレイピングのツールと組み合わせるでも良いかもしれません。

Google Search APIと組み合わせることで、膨大なWebの情報からGoogle検索でヒットした関連性の高い情報をプロンプトに付与した状態でGeminiに回答してもらうことができますし、それだけでなく検索条件を特定のサイトやキーワードなどを縛ったうえで検索を実行させることもできます。

人間がググって最終的に下すような判断をGeminiに実行させることができるので色々と活用の幅がありそうです!