Gemini APIでTool Use機能を使ってハルシネーションを防ぐ方法
はじめに
Gemini API、非常に便利です。自然な文章を書いてくれるし、JSONの構造化も得意だし、本当に色々なことができます。
でも、ちょっとニッチな話題とか最新の情報について聞くと、すごくもっともらしい顔をして誤った情報を生成することありませんか?
私も現在挑戦中のハッカソンで、日本のヒップホップ楽曲というニッチなジャンルのデータをJSON形式で生成しようとしたんですが、このハルシネーション問題に直面しました。
そこで試してみたことが。
Gemini API自身にGoogle検索させられない?
そう思って調べると、「Tool Use」という機能がありました。これがとても強力だったので、実装方法と工夫したポイントを共有します。
課題:AIの「記憶力」だけに頼る限界
最初は王道のアプローチを取りました。システムプロンプトを工夫して「あなたは音楽アナリストです」みたいな役割を与えて、AIの内部知識だけで回答させる方法です。
有名な楽曲ならそこそこうまくいきます。でも、インディーズのアーティストとか、最近リリースされた曲について聞くと、
- リリース年が平気で間違ってる
- 歌詞の内容を想像で書き始める
こんな感じで、ハルシネーションしてしまいす。
後段のベクトルDBに格納するデータとして使うつもりだったので、精度を担保したかったです。ですがプロンプトをどれだけ工夫しても、AIが「知らないこと」を知ってるフリして答えちゃう問題は解決できませんでした。
解決策:Geminiに「ググらせる」という発想の転換
そこで採用したのが、Tool Use(ツール使用)機能です。
これはシンプルな発想なのですが、AIが回答を生成する前に、必要に応じて自律的にGoogle検索を実行して、その検索結果をもとに回答を生成してくれます。
つまり、**AIに「知ってるフリ」をさせるのではなく、「調べて」**もらいます。
こうすることで、最新情報やニッチな情報について、より正確な回答が得られる可能性が高まります。
ただし、検索結果の質や、AIによる解釈の正確性には注意が必要です。
実装の2つのポイント
実際にどうやって実装したのか、工夫したポイントを2つに絞って解説します。
1. SDK google-genai を採用
まず使うライブラリですが、pip install google-genai でインストールできる比較的新しい公式SDKを使いました。
# Google GenAI SDK
from google import genai
from google.genai import types
google-generativeai という古いライブラリとは、インポート方法も書き方も違うので注意してください。
2. シンプルなコードでGoogle検索を有効化
AIにGoogle検索能力を与えるコード、とても短いです。
# 1. Google検索ツールをオブジェクトとして定義
google_search_tool = types.Tool(google_search=types.GoogleSearch())
# 2. 設定オブジェクトで使用ツールとして渡す
config = types.GenerateContentConfig(
tools=[google_search_tool]
)
これだけです。
自前でWebスクレイピングのロジック書いたり、Seleniumでブラウザ自動操作したり、そういう面倒なことは一切不要。types.Tool と types.GoogleSearch を組み合わせるだけで、AIがリアルタイムでWeb検索できるようになります。
まとめ
Gemini APIのハルシネーション対策として、Google検索ツール(Tool Use)を使う方法を紹介しました。
ポイントまとめ:
-
google-genaiSDK を使う -
types.Toolとtypes.GoogleSearchでシンプルに実装
このアプローチの一番いいところは、自前でWebスクレイピング実装するコストとリスクがゼロになることです。メンテナンスも不要だし、サイトの構造変更に怯える必要もありません。
AIにリアルタイムでWeb情報を参照させて、信頼性の高いデータを生成したい人には、おすすめです。
皆さんの開発の参考になれば嬉しいです!
Discussion