はじめに
ある日、なんとなく生成AI関連のAPIを使ってみたくなったので、とりあえず無料で使えそうなGemini API
を利用してみることにしました。(ChatGPT API
も初回は数ドル分無料で使えるらしいですが、はじめに5ドル以上支払わなければいけないらしくやめました。)
今回はPython
を使ってそのAPIを簡単に動かしてみることにしました。
また、今回はGeminiのモデルとしてGemini-1.5-flash
を使用しました。
始め方
1,APIキーの取得
上記のサイトに移動したらGet API key
→APIキーを作成
と進んでください。これでキーの取得は完了です。キーは何度でも確認することはできますが、いちいちサイトを訪れるのも面倒なのでどこかにメモしておきましょう。
カード情報などを入力していない限り、使いすぎで請求がくるなんてことはないです。(多分)
2,PythonにGemini API用のPython SDK
をダウンロードする
Gemini API用のPython SDKは、google-generativeai
パッケージに含まれています。ターミナルで以下のコードを入力してください。
開発環境にPython 3.9以降がインストールされている必要があります。
pip install -q -U google-generativeai
リクエストを送信する
まずはじめにgoogle.generativeai
モジュールをimportします。ただ、モジュール名が長いので、公式でもgenai
と縮めて用いることが推奨されているようです。
次に、先ほど取得したAPIキーを下のコードの「"YOUR_API_KEY"」の部分に入力してください。
model
の部分については、前述したように今回はgemini-1.5-flash
にしたのでそれを記述します。
下のコードはGemini API
を利用するにあたって最低限必要なコードです。
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-1.5-flash")
では、generateContext
メソッドを使用して簡単なリクエストを送信してみます。以下のコードを実行してみましょう。リクエストの本文は英語でも日本語でも可です。
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content("簡単に自己紹介をして。")
print(response.text)
実行すると、多少の差異はあるものの、大抵は「私はGoogleによって訓練された、大規模言語モデルです。」のような返答が来ると思います。
返答のスタイルを指定する
モデルに送信するプロンプトは、モデルがレスポンスを生成する方法を制御するパラメータが含まれており、それらはGenerationConfig
を使用して構成することができます。
ただ、このオプションはモデルによって異なる場合があるそうです。
公式では以下のコードを用いて紹介しています。
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-1.5-flash")
response = model.generate_content(
"Tell me a story about a magic backpack.",
generation_config=genai.types.GenerationConfig(
# Only one candidate for now.
candidate_count=1,
stop_sequences=["x"],
max_output_tokens=20,
temperature=1.0,
),
)
print(response.text)
コードを見ていただけると分かりますが、GenerationConfig
はmodel.generate_content()
内に記述します。では、中身についてそれぞれ解説していきます。
candidateCount
には、返される生成された回答の数を指定します。現在、この値は 1 にのみ設定でき、指定しない場合はデフォルトで1になるので意識しなくても大丈夫だと思います。
maxOutputTokens
は、候補に含めるトークンの最大数を設定します。簡単にいえば「返答の長さ」です。
stopSequences
には、出力生成を停止する一連の文字列(最大 5 つ)を指定します。指定すると、stop_sequence が最初に出現した時点で API が停止します。
maxOutputTokens
で長さを指定すると文章が中途半端なところで終わりがちなので例えば「"."」や「"。"」とすることで出力中途半端にならないようにできます。
temperature
は出力のランダム性を制御します。より創造的な返答を生成する場合は大きい値を、より確定的なレスポンスを生成する場合は小さい値を使用します。値の範囲は0.0から2.0です。
generateContent
への個々の呼び出しを構成することもできます。
今紹介したmax_output_tokens
やtemperature
などの設定はモデルを初期化するときに指定し、プログラム内でその設定値がデフォルトの値となります。
しかし、generateContent
によってそれぞれの返答に対してその設定をすることが可能になるということです。
インタラクティブなチャットを構築する
複数回にわたる質問と回答を収集することもできます。これにより、回答に向けて段階的に進んだり、複数の部分からなる問題についてサポートを受けることができます。
公式では以下のコードを用いて紹介しています。
import google.generativeai as genai
genai.configure(api_key="YOUR_API_KEY")
model = genai.GenerativeModel("gemini-1.5-flash")
chat = model.start_chat(
history=[
{"role": "user", "parts": "Hello"},
{"role": "model", "parts": "Great to meet you. What would you like to know?"},
]
)
response = chat.send_message("I have 2 dogs in my house.")
print(response.text)
response = chat.send_message("How many paws are in my house?")
print(response.text)
model.start_chat()
メソッドを使って、チャットを開始します。history
にこれまでの会話履歴がリスト形式で渡され、この履歴はモデルに過去の会話の文脈を理解させるために使用されます。
{"role": "user", "parts": "Hello"}
では、はじめに「私たち」がモデルに対し「Hello.」と言ったことを、
{"role": "model", "parts": "Great to meet you. What would you like to know?"}
では、それに対し「モデル」が私たちに対し「Great to meet you. What would you like to know?」と言ったことを表します。
そして、1つ目のresponse
には「I have 2 dogs in my house.」に対する返答を、2つ目には「How many paws are in my house?」に対する返答を記録し、それぞれを出力します。
おわりに
今回の記事ではPython
を使ってGemini API
を簡単に動かしてみました。しかし、このままでは普通にGeminiを使うのと何ら変わりはありません(むしろこちらの方がかなり面倒)。もっとスキルを高めてAPIならではのことにも挑戦していきたいと思います、
では、今回の記事はこれで終わりです。最後までお読みいただきありがとうございました。
参考