Geminiと会話:マルチターンのチャット#

はじめに#

前回の記事では、Google Gemini APIを使用したテキスト生成の基本について学びました。AIに質問や指示を出して回答を得る方法や、効果的なプロンプトの書き方、そしてモデルパラメータの調整方法などを解説しました。

今回は、さらに一歩進んで「マルチターンのチャット」について学びます。マルチターンとは、AIとの会話を1回で終わらせるのではなく、複数回のやり取りを続ける方法です。これにより、人間同士の会話のように文脈を保ったまま対話を続けることができます。

マルチターンチャットとは?#

私たちが日常で行う会話は、通常「マルチターン」です。例えば、友人と次のような会話をしたとします。

  • あなた:「明日は何をする予定?」
  • 友人:「映画を見に行くよ」
  • あなた:「何の映画?」
  • 友人:「アクション映画だよ」

この会話では、2回目の質問「何の映画?」は、前の質問と回答の文脈を前提としています。もし友人が前の会話を覚えていなければ、「映画って何?」と聞き返すことになるでしょう。

AIとの対話でも同じことが言えます。前回の記事で学んだ単発のテキスト生成では、毎回の質問は独立したものとして扱われます。一方、マルチターンチャットでは、AIが以前のやり取りを記憶し、文脈を理解した上で回答を生成します。

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)

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

前回までの方法#

前回までの方法では、テキスト生成を行うために以下のようなコードを書きました。

>
# 生成を実行
response = client.models.generate_content(
    model=model_name,
    contents=["こんにちは!私はPythonを勉強中です"]
)
# 結果を表示
print(response.text)
こんにちは!Pythonの勉強をされているんですね、素晴らしいです!何かお手伝いできることはありますか?

...(略)

この方法では、AIに対して1回の質問を投げかけ、その回答を得るという形でした。次の質問をする場合は、再度プロンプトを指定して新たに生成を行う必要があります。

このような方法では、AIは前の会話を覚えていないため、文脈を踏まえた回答ができません。例えば、次のように質問を続けると、AIは前の質問を忘れてしまいます。

>
# 続けて質問
response = client.models.generate_content(
    model=model_name,
    contents=["ほかにおすすめの言語はありますか?"]
)
# 結果を表示
print(response.text)
おすすめの言語は、あなたの目的や興味によって大きく変わります。いくつか質問させてください。

1.  **何をしたいですか?**
    *   Webサイトを作りたい
    *   スマホアプリを作りたい

...(略)...

これらの情報があると、より具体的なおすすめができます。

以下に、よくおすすめされる言語と、その簡単な説明を記載します。

*   **Python:**
    *   初心者にも学びやすく、汎用性が高い。
    *   Web開発、データ分析、AI、自動化など幅広い分野で使われる。
    *   ライブラリが豊富。

...(略)

この場合、AIは最初の会話の「Pythonを勉強中」という情報を踏まえることなく、単独の質問に対して回答します。そのため、AIとの会話がスムーズに続かず、まるで別の人と話しているような印象を受けます。

チャットの作成方法#

Gemini APIでは、マルチターンチャットを実現するための「チャット」機能が用意されています。この機能を使うことで、AIとの会話をより自然に続けることができます。Gemini APIでマルチターンチャットを行うには、以下のようにコードを書きます。

>
# チャットを開始
chat = client.chats.create(model=model_name)

このコードで、チャットのセッションが開始されます。次に、メッセージを送信します。

>
# 最初のメッセージを送信
response = chat.send_message("こんにちは!私はPythonを勉強中です")

# AIの応答を表示
print(response.text)
こんにちは!Pythonの勉強、素晴らしいですね!何かお手伝いできることはありますか?

...(略)

これで最初のメッセージが送信され、AIからの応答が表示されました。続けて次のメッセージを送信します。

>
# 続けて質問
response = chat.send_message("ほかにおすすめの言語はありますか?")

# AIの応答を表示
print(response.text)
Python以外にもおすすめの言語はたくさんあります。どんなことに興味があるか、どんなものを作りたいかによって、おすすめの言語は変わってきます。いくつか例を挙げて、それぞれの特徴とどんな人におすすめかを紹介します。

**1. JavaScript:**

*   **特徴:** Webブラウザ上で動作する言語。Webサイトに動きをつけたり、インタラクティブなコンテンツを作ったりできます。Node.jsという環境を使えば、サーバーサイドの開発も可能です。
*   **おすすめ:** Webサイト制作、Webアプリケーション開発に興味がある人。フロントエンドエンジニア、バックエンドエンジニアを目指す人。

...(略)

このように、AIは前の会話(Pythonを勉強していることを伝えた)を覚えていて、それを踏まえた上で回答をしています。これが「マルチターンチャット」の特徴です。

会話履歴の活用方法#

チャットの会話履歴を確認すると、これまでのやり取りを見ることができます。

>
# 会話履歴を表示
history = chat.get_history()

print("===== 会話履歴 =====")
for message in history:
    role = "あなた" if message.role == "user" else "AI"
    print(f"{role}: {message.parts[0].text[:50]}...")  # 最初の50文字だけ表示
===== 会話履歴 =====
あなた: こんにちは!私はPythonを勉強中です...
AI: こんにちは!Pythonの勉強、素晴らしいですね!何かお手伝いできることはありますか?

例えば、以...
あなた: ほかにおすすめの言語はありますか?...
AI: Python以外にもおすすめの言語はたくさんあります。どんなことに興味があるか、どんなものを作りたい...

会話履歴はチャットの文脈を維持するために自動的に利用されます。過去のやり取りを踏まえて、AIがより文脈に沿った回答をします。

システム指示を使ったチャットの作成#

チャットの動作をカスタマイズするために、「システム指示」を使うことができます。これは、AIに対してどのような役割や振る舞いをすべきかを指定するものです。

>
# システム指示付きでチャットを開始
chat = client.chats.create(
    model=model_name,
    config={"system_instruction": "小学生にもわかるように簡単な言葉で説明してください。"}
)

# 質問を送信
response = chat.send_message("素数とは何ですか?")

# AIの応答を表示
print(response.text)
素数っていうのはね、特別な数字のことなんだ。

*   **1より大きい** 数字で、
*   **自分自身**と**1**でしか割り切れない

数字のことだよ。

例えば、

*   2は、1と2でしか割れないから素数。

...(略)

システム指示を使うことで、AIの応答スタイルや専門性を調整できます。上の例では、小学生にもわかりやすく説明するよう指示しました。

まとめ#

この記事では、Google Gemini APIを使ってマルチターンチャットを実現する方法について学びました。

  • マルチターンチャットの基本概念
  • チャットの作成と会話の継続方法
  • 会話履歴の活用
  • システム指示を使った応答のカスタマイズ

マルチターンチャットを使うことで、より自然な対話ができ、文脈を踏まえた応答を手に入れることができます。これはチャットボットや対話型アプリケーションの作成に非常に役立ちます。