AIじゃないよ

Googleの最新AI「Gemini Pro」の使い方:基礎からのAPIハンズオンガイド

当サイトはアフィリエイト広告を一部掲載しています。

Googleが開発する最新のAIである「Gemini Pro」 。OpenAIが開発するGPT-3.5を上回る性能とも謳われている。

リリースされたばかりながら、既にGoogle AI StudioというWebインターフェースや、APIを通じて、Gemini Proを利用することができるようになっている。

しかも、Google AI StudioもAPIも、現在はGemini Proが無料で提供されているので、1分間に60クエリまでというレート制限はあるが、個人で利用する場合にはほぼ超えることはなく、Googleの最新AIで自由に実験することができる。

将来的には有料版が提供されるようだが、1,000文字あたり0.025セントという激安価格なので、OpenAIが課金単位としている「トークン」では割高になりがちな日本語では、「文字」でカウントしてくれるGeminiは、特に重宝される可能性が高い。

この記事では、初めてGemini Proを利用したい人のために、Webインターフェース(Playground)であるGoogle AI StudioでのGemini Proの使い方、また、APIを使ってPythonコードでGemini Proとチャットをする方法を、ハンズオンで解説していく。

とりあえずサクッとGemini Proの概要を把握したいといったユーザーにおすすめだ。



Google Bardで日本からGemini Proを使う方法

なお、この記事では、Gemini Proをプログラムなどに組み込むためのAPI利用をしたいユーザーを前提にしている。

ChatGPTのようなチャット形式で、単にGemini Proを使ってみたい場合であれば、「Google Bard」を使えば良い。

Google Bardは、Googleが開発する言語モデルを利用したチャットサービスである。
元々はPalm2というモデルが実装されていたが、12月6日にGemini Proがリリースされてすぐ、Bardの中身もGemini Proにアップデートされた。

Google Bardの日本語版ではまだGemini Proは導入されていないが、英語版では2023年12月6日からGemini Proが利用できるようになっている。

Google Bardの英語版を日本から簡単に使う方法含め、Google Bardの使い方は以下の記事で紹介しているのでそちらも参考にしてほしい。

Google AI StudioとAPIでGemini Proを利用する方法

Google AI Studioへのアクセス方法

Geminiには、「Google AI Studio」というWebインターフェースが用意されており、そこでモデルの詳細をチューニングしたり、実際にモデルを使ってみたりできる。

また、そうして調整したモデルを、APIキーを組み込んだPythonコードなどとして簡単にエクスポートできるので、直感的に利用できるインターフェースでありながら、開発者が色々と実験するのに最適なPlaygroundとなっている。

Google AI StudioでGemini Proを利用するには、まずはGoogleのAI for Developersのページを開く。

2023年12月現在、フリープランのみが公開されているので、フリープランの「Get API」をクリックする。

これで、Google AI Studioにアクセスできるようになった。

3種類のプロンプトモード

Google AI Studioを開くと、いきなり中央に何もないスペースが表示される。

これは、「Freeform prompt」というGemini Proのテキストコンプリーションを利用することのできる画面である。

Google AI StudioでGemini Proを利用する際には、以下の3つのプロンプト形式がある。

画面左側の「Create new」を選択すると、これらのモードを切り替えることができる。

  • Freeform prompt:文章を書いている途中から、その文章の続きをGemini Proによってオートコンプリートさせる。
  • Structured prompt:表形式でプロンプトと回答の対照表を作成し、例に基づいた生成結果を得られる。
  • Chat prompt:ChatGPTのようなチャット形式のやり取りでGemini Proに回答を生成させる。

Freeformプロンプトの使い方

最初にGoogle AI Studioを開いた際に表示されているのがFreeform promptである。

例えば、「吾輩は猫である。名前は」までを書いた状態で、画面下部にある「Run」をクリックすると、Gemini Proがその続きを予想して、「まだ無い」を提案してくれた。

また、それぞれのプロンプトモードで、モデルを「Gemini Pro Vision」に設定すれば、いずれも画像を読み込ませることも可能である。

例えば、これはGoogle AI Studioのサンプルプロンプトであるが、コーヒーとアイスクリームの画像に基づいてポエムを生成してくれたものだ。

フリーフォームプロンプトでも、ChatGPTなどのチャット形式のやり取りとそれほど変わらない結果が得られる。
(ポエムを書け、という命令に基づいて、文章の続きとしてポエムを生成している)

また、プロンプト文の中に変数を設定し、その変数に複数の異なる単語を入れた場合に、アウトプットがどのように変化するかを確認する機能もある。

例えば、「りんごはフルーツですか?野菜ですか?」というテキストを入力し、「りんご」を選択した状態で画面上部にある「Test input」をクリックすると、「りんご」の部分を他の単語に入れ替える表が画面下部に現れる。

りんご、みかん、ピーマンの3つを入力してみた上で、「Run 3」(3回生成するため3という数字が表示されている)ボタンをクリックすると、ピーマンのみがアウトプット結果が「野菜」になった。

Structuredプロンプトの使い方

Structuredプロンプトは、表形式で複数の例を示すことで、それと同じパターンをGemini Proに再現させるようなプロンプトの方法だ。

画面上部で、「食べ物の名前」列をインプットとして、「種別」列をアウトプットとする例を作成する。
ここでは、Input「りんご」に対して、Output「フルーツ」という種別判定の例を3つ示した。

そして、「ほうれん草」「にんじん」「いちご」という3つのインプット列だけを与え、Gemini Proにアウトプット列を予測させると、野菜かフルーツかが正確に判定された。

通常、ChatGPTなどでチャット形式でプロンプトを与えるとすると、「以下の食べ物の名前から、その食べ物がフルーツか野菜かを答えてください」といったプロンプトになるが、Structured promptでは、例をAIに与えることで、それと同じ法則を予測させるという使い方ができる。

例えば、過去に販売した商品の名前をインプット列とし、アウトプット列にそれらの商品の広告に使用したキャッチコピーを入力すれば、過去の例に基づいて、新商品のキャッチコピーを生成させる、といったことが可能だ。

Chatプロンプトの使い方

Chatプロンプトは、ChatGPTなどで使い慣れている人も多いであろう、ユーザーとAIのチャット形式のやり取りである。

例えば特定の文体を使ったAIによる回答例を示しておくと、新しい質問をした場合にも、その文体に倣って回答が生成される。
APIでChat promptを利用するときには、このようなチャット例を「Chat History(チャット履歴)」としてモデルに与える。

画面左側でチャット例を設定できるので、「りんごはフルーツですか、野菜ですか。」というユーザーの質問に対して、「りんごはフルーツだにゃん!」という猫風の語尾をつけて回答する例を示してみた。

その上で、画面右側で新たな質問をしてみると、Gemini Proが一貫して語尾が「にゃ」というネコAIになってくれた。

ここでは極端な例を示したが、コールセンター代わりのAIチャットボットで、適切に敬語を用いて丁寧に対応して欲しい場合などは、ここで対応の例を複数示しておくことで、その文体に従った挙動をするチャットボットが作成できる。

Gemini ProのAPIでの利用(Python編)

ここまではGoogle AI StudioのWebインターフェースを用いてGemini Proを使用してきたが、同様のことは、APIを使ってPythonコード上などで実現することができる。

APIを使うことで、プログラムの中にGemini Proを組み込むことなどが可能になるため、Webサイトの問い合わせ窓口にGemini Proを実装したり、AIと会話できるアプリを開発したりといった場合には、APIを用いることになる。

以下では、Google AI Studioで言うところの「Chat prompt」形式で、Gemini ProとAPIを通してチャットをするコードを、順に解説していく。

なお、この記事では、Pythonを用いてGemini Proを実装する。

APIキーの発行

まずは、Gemini Proを利用するためのAPIキーを発行する必要がある。画面左メニューから「Get API key」をクリックする。

ここで発行するGeminiのAPIキーは、必ずGoogle Cloudのいずれかのプロジェクトと紐付くことになる。
APIキーの利用量などは、Google Cloudにログインして、該当のプロジェクトを開くと、詳細を確認することができる。

「Create API key in new project」をクリックすると、Google Cloudに新しいプロジェクトを作成して、Gemini ProのAPIキーがそのプロジェクトに紐付けられる。

作成が完了すると、画面にAPIキーがポップアップで表示され、そこでコピーしておく必要がある。

作成したAPIキーは、「Get API key」のページの一覧に表示される。
削除はできるが、過去のAPIキーを表示することはできないので、必ず作成した際に控えておく必要がある。

ライブラリのインストール

Gemini ProをPython上で使用するには、まずはコマンドライン上でgoogle-generativeaiというライブラリをインストールしておく必要がある。

Google ColabなどのJupyter環境の場合、冒頭にびっくりマークをつけて!pipとすれば、同じくライブラリをインストールできる。

pip install google-generativeai

Geminiモデルの設定(API, Temperature, Top-K, Top-P)

Gemini Proには、回答の創造性・ランダム性を制御するパラメータや、回答の長さを制御するパラメータなどが用意されている。

まずは、先ほどインストールしたライブラリをgenaiとしてインポートし、生成時の各種設定項目を指定していく。

それぞれの項目の意味も以下で解説する。

# ライブラリのインポート
import google.generativeai as genai

# Google AIのGemini Pro APIを設定
genai.configure(api_key="YOUR_API_KEY")

# モデルの設定
generation_config = {
  "temperature": 0.9,  # 生成するテキストのランダム性を制御
  "top_p": 1,          # 生成に使用するトークンの累積確率を制御
  "top_k": 1,          # 生成に使用するトップkトークンを制御
  "max_output_tokens": 2048,  # 最大出力トークン数を指定
}

APIキーは、genai.configure(api_key=“あなたのキー”)として設定する。

max_output_tokensで回答の長さを指定できる。あまりに長すぎる回答が返ってくると、無駄にAPIの利用量が増えてしまうので、ユースケースに応じて適当な長さを指定する。

Gemini APIにおけるtemperaturetop_ptop_kパラメータは、モデルがテキストを生成する際の創造性・ランダム性を制御するパラーメータである。

Geminiのような生成AIは、テキストを生成するにあたって、あるトークン(単語)の次に来るトークンは、どれが一番もっともらしいかを考え、一番「それっぽい」トークンを順に並べて回答の文章を生成している。

例えば、「吾輩は」の次に来る言葉は、「猫である」が80%、「犬である」が10%、その他諸々が数%なので、一番もっともらしい「吾輩は猫である」というテキストを生成する、という具合だ。

「Top K」は、こうした単語のチョイスの際に、上位何番目の候補トークンまでを考慮に入れるかを制御する。
上記の例でK=1なら、最も確率の高い「猫である」のみを考慮する。K=2なら、「猫である」「犬である」のどちらかから選ぶ、といった具合である。

「Top P」は、同じく単語のチョイスの際に、確率の合計がPになるまでの候補を考慮に入れるよう指定する。
上記の例でP=0.8(80%)なら「猫である」のみを考慮する。P=0.9(90%)なら、猫である(80%)+犬である(10%)のどちらかから選ぶ、ということになる。

Temperatureは、候補トークン同士の差を広げたり縮めたりする。高ければ高いほど、滅多に現れないトークン(ex. 吾輩はプリンである)が候補に入り込みやすくなる。低ければ低いほど、有力な候補だけに絞られる。

したがって、回答の創造性・ランダム性が高い組み合わせは、Top K, Top P, TEmparatureパラメータがいずれも大きい時になる。
この3つが小さくなればなるほど、回答のランダム性は減っていく。

出力の安全フィルターに関する設定

Gemini Proでは、回答結果にフィルターをかけ、ヘイトスピーチなどの生成を防ぐことができる。

4つの項目でモデルを制御でき、Harassment(ハラスメント)、Hate speech(ヘイトスピーチ)、Sexually explicit(露骨な性表現)、Dangerous(危険な表現)でそれぞれフィルターの強さを設定できる。

# セーフティ設定
safety_settings = [
  {
    "category": "HARM_CATEGORY_HARASSMENT",  # ハラスメントに関する内容を制御
    "threshold": "BLOCK_MEDIUM_AND_ABOVE"     # 中程度以上のハラスメントをブロック
  },
  {
    "category": "HARM_CATEGORY_HATE_SPEECH",  # ヘイトスピーチに関する内容を制御
    "threshold": "BLOCK_MEDIUM_AND_ABOVE"      # 中程度以上のヘイトスピーチをブロック
  },
  {
    "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",  # 性的に露骨な内容を制御
    "threshold": "BLOCK_MEDIUM_AND_ABOVE"            # 中程度以上の性的内容をブロック
  },
  {
    "category": "HARM_CATEGORY_DANGEROUS_CONTENT",  # 危険な内容を制御
    "threshold": "BLOCK_MEDIUM_AND_ABOVE"            # 中程度以上の危険な内容をブロック
  }
]

APIリクエストで設定できるフィルターの強弱は、以下5種類がある。

最も弱い場合は、フィルター無し、最も強い場合は、危険な確率が低くてもブロックする、という設定が用意されている。

閾値 (Google AI Studio)閾値 (API)説明
Block noneBLOCK_NONE危険なコンテンツの確率に関係なく常に表示する
Block fewBLOCK_ONLY_HIGH危険なコンテンツの確率が高い場合にブロックする
Block someBLOCK_MEDIUM_AND_ABOVE危険なコンテンツの確率が中程度以上の場合、または高確率の場合にブロックする
Block mostBLOCK_LOW_AND_ABOVE危険なコンテンツの確率が低、中程度、または高確率の場合にブロックする
HARM_BLOCK_THRESHOLD_UNSPECIFIED閾値が指定されていない場合、デフォルト閾値を使用してブロックする

自分だけで利用している場合には、特にフィルタリングの必要もないのでBLOCK_NONEを用いておけば良いと思われるが、製品に組み込む場合などには、フィルターを強くかけておいた方が安心だろう。

モデルの初期化(以上の設定の読み込み)

モデル名は、画像を読み込ませるか否かによって選択肢があり、テキストのみの場合はgemini-proを指定、画像を読み込ませる場合にはgemini-pro-visionを指定する。

また、上記で作成したtemperatureなどを指定したgeneration_configと、フィルタの強度を指定したsafety_settingsを、それぞれモデルに渡す。

# Gemini Proモデルを初期化
model = genai.GenerativeModel(model_name="gemini-pro",
                              generation_config=generation_config,
                              safety_settings=safety_settings)

チャット履歴は辞書のリスト形式で定義する

チャットの履歴を辞書のリストとして記述する。

APIでリクエストを送る場合、サーバー側には会話の履歴が残らないため、こちらで過去の履歴を保存しておいて、過去の履歴ごとサーバーに送信する必要がある。

この辺りのコードは、GPT-3.5やGPT-4をAPIで利用する場合と類似している。

# チャット履歴を設定
convo = model.start_chat(history=[
  {
    "role": "user",   # ユーザーの役割を指定
    "parts": "りんごはフルーツですか、野菜ですか。"  # ユーザーの入力を指定
  },
  {
    "role": "model",  # モデルの役割を指定
    "parts": "りんごはフルーツだにゃん!"  # モデルの応答を指定
  }
])

ここでは、上記の例と同じく、フルーツか否かの判定を、「にゃん」という語尾で返しているチャット履歴を設定しておく。

チャット履歴は、この後に生成されるAIの回答にも影響を与える。
APIを使った場合でも、履歴さえ渡しておけば、新しい果物や野菜の名前を伝えると、「にゃん」という語尾でそれがフルーツかどうかを返してくれるようになるはずだ。

新しいチャットのやり取りを生成させる

ここまでのコードでGemini Proを使う準備は完了だ。

convo.send_message("オレンジは?")でユーザーによる新しいメッセージをGemini Proに送信できる。

これを受けて、Gemini Proによる回答がチャット履歴の最後に加わるはずなので、convo.last.textで最後のメッセージを表示する。

# ユーザーの入力を送信
convo.send_message("オレンジは?")
# 最後のモデルの応答を表示
print(convo.last.text) 

すると、無事オレンジをフルーツとして判定してくれた。
また、チャット履歴で定義した通り、語尾が「にゃん」になっている。

convo.send_message()を繰り返せば、このまま会話を続けていくことができる。例えば、新たに「アスパラ」という野菜の名前を与えると、ちゃんと「野菜だにゃん」という回答が得られた。

Google AI Studioでコードを表示する方法

Google AI Studioでは、画面の右側にある「Run settings」からモデルの選択、Temperature, Top-k, Top-p, フィルターの設定などを行うことができる。

コードを書くのは面倒なので、Google AI Studioのインターフェース上でこれらの設定を行なってしまった方が楽だ。

一通り設定を終えたら、右上にある「Get code」をクリックすると、その設定内容をPython, JavaScript, cURL, Swift, Android(Katlin)形式のコードに落とし込んだものを表示できる。

ここから、コードをコピペできるほか、「Open in Colab」を選択すると、無料のPython環境であるGoogle Colabノートブックとして開くこともできる。

Chatプロンプトの場合には、Gemini Proの挙動を左右するチャット履歴をGoogle AI Studioの画面上で作成して、それをそのままコードとしてコピーできるので、より便利だ。



Make a comment

*
*
* (公開されません)