はじめてのGemini:テキスト生成をお願いする#

はじめに#

前回の記事では、Google Gemini APIを使用するための準備として、Google AI Studioでのアカウント作成とAPIキーの取得方法を解説しました。

今回は、いよいよPythonからGemini APIを使用して、テキスト生成を行ってみましょう。テキスト生成とは、AIに対して質問をしたり指示を出したりして、それに応じた文章を作成してもらうことです。

この記事を通じて、以下のことを学んでいきます。

  1. Gemini APIの基本的な使い方
  2. テキスト生成のためのコード
  3. プロンプト(AIへの指示)のポイント
  4. モデルパラメータの調整方法

Gemini APIを使うための準備#

新しいノートブックを作成した場合は、以下のコードを実行して、Gemini APIを使うための準備を行います(前回の記事と同様です)。

>
# 必要なライブラリをインストール
!pip install google-genai
>
# 必要なライブラリをインポート
from google import genai
from google.colab import userdata

# クライアントの初期化
api_key = userdata.get("GOOGLE_API_KEY")
client = genai.Client(api_key=api_key)

この記事では、「Gemini 2.0 Flash」を使用します。これからGemini APIにリクエストを送るたびにモデル名を指定する必要があるので、あらかじめ変数に格納しておきましょう。

>
# モデル名を変数に格納
model_name = "gemini-2.0-flash"

基本的なテキスト生成#

それでは、実際にテキスト生成を行ってみましょう。Gemini APIを使ったテキスト生成は非常にシンプルです。以下のコードを実行して、AIに質問や指示を与えます。

>
# テキスト生成のためのプロンプト(質問)
prompt = "Pythonプログラミングの魅力を3つ挙げて説明してください。"

# 生成を実行
response = client.models.generate_content(model=model_name, contents=[prompt])

# 結果を表示
print(response.text)

実行例(Geminiからの応答)は以下の通りです(実行するたびに異なる応答が得られます)。

Pythonプログラミングの魅力はたくさんありますが、特に際立つ3つを挙げると以下のようになります。

1. **読みやすく書きやすいシンプルな構文:**
   - Pythonは、英語に非常に近いシンプルな構文を持つため、プログラミング初心者でも理解しやすく、学習コストが低いことが魅力です。
   - 例えば、変数宣言が不要であったり、インデント(字下げ)によってコードの構造を表現するため、可読性が高く、バグの発見や修正が容易になります。
   - このシンプルな構文は、複雑な処理を記述する際にも、コードの可読性を維持し、開発効率を向上させるのに役立ちます。

2. **豊富なライブラリとフレームワーク:**
   - Pythonは、データ分析、機械学習、Web開発、自動化など、様々な分野に対応した豊富なライブラリとフレームワークを提供しています。
   - 例えば、データ分析ではNumPyやPandas、機械学習ではScikit-learnやTensorFlow、Web開発ではDjangoやFlaskといった強力なツールが利用可能です。
   - これらのライブラリやフレームワークを活用することで、複雑な処理を効率的に実装でき、開発期間を大幅に短縮することができます。
   - また、コミュニティが活発で、ドキュメントやサンプルコードも充実しているため、問題解決や情報収集も容易です。

3. **汎用性の高さと多様な分野での活用:**
   - Pythonは、Webアプリケーション開発、デスクトップアプリケーション開発、データ分析、機械学習、スクリプト作成、自動化など、非常に幅広い分野で利用されています。
   - 例えば、YouTube、Instagram、Spotifyといった有名なWebサービスもPythonで開発されています。
   - また、科学技術計算や金融工学などの分野でも広く利用されており、その汎用性の高さが魅力です。
   - Pythonを習得することで、様々な分野で活躍できる可能性が広がり、キャリアの選択肢も豊富になります。

これらの3つの魅力により、Pythonは初心者からプロフェッショナルまで、多くのプログラマーに愛される言語となっています。

このコードでは、次のことを行っています。

  1. prompt変数にAIに与える指示(質問)を格納します。
  2. client.model.generate_contentメソッドを使用して、Gemini APIにリクエストを送信します。このメソッドは、指定したモデル(ここではgemini-2.0-flash)を使用して、与えられたプロンプトに基づいてテキストを生成します。
  3. response.textで生成されたテキストを取得し、表示します。

Geminiは与えられた指示(「Pythonプログラミングの魅力を3つ挙げて説明してください」)に基づいて、Pythonの魅力を3つ挙げて説明しています。

様々な指示を試してみよう#

Geminiは非常に多様な指示に応えることができます。以下に、いくつかの例を示します。

例1:情報の要約#

>
prompt = """
以下のテキストを3行で要約してください。

地球温暖化は、大気中の温室効果ガスの増加によって引き起こされる地球の平均気温の長期的な上昇です。
主な原因は、化石燃料の燃焼、森林伐採、産業プロセス、農業などの人間活動です。
地球温暖化の影響には、極端な気象現象の増加、海面上昇、生物多様性の喪失、農業への影響などがあります。
科学者たちは、地球の平均気温の上昇を産業革命前のレベルから1.5〜2℃未満に抑えることが重要だと警告しています。
これを達成するには、大幅な温室効果ガスの削減が必要です。
"""

response = client.models.generate_content(model=model_name, contents=[prompt])
print(response.text)
地球温暖化は、人間活動による温室効果ガスの増加で地球の平均気温が上昇する現象。
その影響は極端な気象現象、海面上昇、生物多様性の喪失など多岐にわたる。
気温上昇を1.5〜2℃未満に抑えるには、大幅な温室効果ガス削減が不可欠。

例2:創作#

>
prompt = "短い童話を書いてください。テーマは「プログラミングを学ぶロボット」です。"

response = client.models.generate_content(model=model_name, contents=[prompt])
print(response.text)
昔々、チカという小さなロボットがいました。チカは他のロボットとは違っていました。掃除や料理をするのではなく、世界について学びたかったのです。特に、人間がいつも話している「プログラミング」というものに興味がありました。

ある日、チカは古いコンピューターを見つけました。ホコリを払い、電源を入れると、画面がチカチカと光りました。「こんにちは、チカ」とコンピューターが言いました。「私はコンピだよ。プログラミングを学びたいの?」

チカは興奮して「はい!お願いします!」と答えました。

...(略)

例3:説明#

>
prompt = "再帰関数とは何ですか?初心者にもわかるように説明してください。"

response = client.models.generate_content(model=model_name, contents=[prompt])
print(response.text)
再帰関数とは、**自分自身を呼び出す関数**のことです。

例えるなら、**ドミノ倒し**のようなものです。

1. **最初のドミノを倒す** (これが再帰関数の最初の処理)
2. **倒れたドミノが次のドミノを倒す** (これが自分自身を呼び出す再帰)
3. **最後のドミノが倒れるまで続く** (これが終了条件)

...(略)

安全フィルター#

Gemini APIには安全フィルターが組み込まれており、有害または不適切なコンテンツの生成を制限しています。以下のようなコンテンツは生成が拒否される可能性があります。

  • 違法活動や暴力を促すコンテンツ
  • 差別や偏見を助長するコンテンツ
  • 性的に露骨なコンテンツ
  • 危険な行為の指示

AIの応答は毎回変わる:創造性の理解#

Geminiを含む現代のAIモデルには、興味深い特徴があります。同じ質問や指示を与えても、毎回異なる応答が返ってくることです。これを実際に確認してみましょう。

>
# 同じプロンプトを複数回実行して結果を比較
prompt = "生成AIのメリットを3行で説明してください"

print("1回目の応答:")
response1 = client.models.generate_content(model=model_name, contents=[prompt])
print(response1.text)

print("\n2回目の応答:")
response2 = client.models.generate_content(model=model_name, contents=[prompt])
print(response2.text)
1回目の応答:
*   **創造性と効率性の向上:** 人間の発想を刺激し、コンテンツ作成やアイデア出しを加速します。
*   **パーソナライズされた体験の提供:** 個々のニーズに合わせた情報提供やサービスを可能にします。
*   **複雑な問題解決への貢献:** 大量のデータを分析し、新たな発見や解決策を生み出します。


2回目の応答:
*   **創造性と効率性の向上:** 人間の創造性を刺激し、アイデア出しやコンテンツ作成を効率化します。
*   **高度な分析と予測:** 大量のデータを分析し、将来のトレンドやリスクを予測、意思決定を支援します。
*   **自動化とパーソナライズ:** ルーチンワークを自動化し、顧客体験をパーソナライズすることで、業務効率と顧客満足度を高めます。

上記のように、まったく同じ指示を出しても、Geminiは毎回異なる回答を生成します。これは、AIモデルが「確率的」に動作しているためです。簡単に言うと、AIは「次にどの単語が来る可能性が高いか」を計算し、その確率に基づいて単語を選んでいます。この「多様性」が人工知能の魅力的な特徴の一つです。

結果を安定させる方法#

もし特定のタスクで結果の一貫性が必要な場合、「temperature」というパラメータを調整することで、AIの「創造性」を制御できます。

>
# temperatureを0に設定して、より一貫性のある応答を得る
prompt = "生成AIのメリットを3行で説明してください"

print("temperature=0 の1回目の応答:")
response1 = client.models.generate_content(model=model_name, contents=[prompt], config={"temperature": 0})
print(response1.text)

print("\ntemperature=0 の2回目の応答:")
response2 = client.models.generate_content(model=model_name, contents=[prompt], config={"temperature": 0})
print(response2.text)
temperature=0 の1回目の応答:
*   **創造性と効率性の向上:** 新しいアイデアの創出やコンテンツ作成を支援し、作業時間を大幅に短縮できます。
*   **データ分析と予測の高度化:** 大量のデータを解析し、隠れたパターンや将来のトレンドを予測することで、より良い意思決定をサポートします。
*   **パーソナライズされた体験の提供:** 個々のニーズに合わせた情報提供やサービスを提供し、顧客満足度を向上させます。


temperature=0 の2回目の応答:
*   **創造性と効率性の向上:** 新しいアイデアの創出やコンテンツ作成を支援し、作業時間を大幅に短縮できます。
*   **データ分析と予測の高度化:** 大量のデータを解析し、隠れたパターンや将来のトレンドを予測することで、より良い意思決定をサポートします。
*   **パーソナライズされた体験の提供:** 個々のニーズに合わせた情報提供やサービスを提供し、顧客満足度を向上させます。

temperatureが0に近いほど、応答は予測可能で一貫性があります。一方、temperatureが高いと、より多様で創造的な応答が生成されますが、一貫性は下がります。gemini-2.0-flashではtemperatureは最大2.0まで設定可能です。temperatureを指定しない場合のデフォルト値は1.0です。

まとめ#

この記事では、Google Gemini APIを使用したテキスト生成の基本について学びました。

  • Gemini APIの基本的な使い方
  • 様々なタイプの指示(要約、創作、説明)
  • 同じプロンプトでも結果が変わる理由と制御方法

これらの知識を活用することで、様々なタスクに合わせてGemini APIを活用することができます。次回は、Geminiとの会話(マルチターンのチャット)について学んでいきましょう。