Python入門の集大成:Geminiを使った実践#

はじめに#

これまでの記事を通してPythonの基礎から応用、そしてAIの活用方法まで学んできました。この記事はシリーズの最終回として、これまで学んだ知識を総動員して実践的なプロジェクトに取り組みます。

今回は、Geminiの力を使ったマルチターンチャットアプリケーションを作ります。このアプリケーションでは、以下の機能を実装します。

  • ユーザーからの入力を受け付ける
  • Gemini 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"

全体の設計#

今回作るチャットアプリケーションの流れを整理しておきましょう。

  1. ユーザーから入力を受け取る
  2. 特定のコマンドかどうかを確認する
    • 「reset」と入力されたら新しいチャットセッションを開始
    • 「quit」と入力されたらアプリケーションを終了
  3. 上記以外の入力はGeminiに送信して回答を得る
  4. 回答を表示する
  5. 1に戻る(ループ)

この流れを、関数を使って実装していきます。

実装#

それでは、チャットアプリケーションを実装していきましょう。コードを段階的に説明していきます。

1. チャットセッションを作成する関数#

まずは、Geminiとのチャットセッションを作成する関数を定義します。

>
def create_chat_session():
    """新しいチャットセッションを作成する"""
    # チャットを開始(システム指示付き)
    chat = client.chats.create(
        model=model_name,
        config={"system_instruction": "質問に対して短く簡潔に答えてください。"}
    )
    # 作成したチャットセッションを返す
    return chat

この関数では、システム指示を設定してGeminiとのチャットセッションを作成しています。

2. メッセージを送信する関数#

次に、チャットセッションにメッセージを送信して回答を取得する関数を定義します。

>
def send_message(chat, message):
    """チャットにメッセージを送信し、応答を取得する"""
    # メッセージを送信
    response = chat.send_message(message)
    # 応答を返す
    return response.text

この関数では、chat.send_message(message)を使ってメッセージを送信し、AIからの応答を取得しています。response.textで応答のテキスト部分を取り出しています。

3. メインのチャットループ関数#

最後に、上記の関数を使用して実際にチャットを行うメイン関数を定義します。

>
def run_chat():
    """メインのチャットループ"""
    print("===== Geminiチャットアプリケーション =====")
    print("「reset」と入力するとチャットをリセットします")
    print("「quit」と入力するとアプリケーションを終了します")
    print("=========================================")

    # 初期チャットセッションを作成
    chat = create_chat_session()

    while True:
        # ユーザーからの入力を受け取る
        user_input = input("\nあなた: ")

        # 入力に応じた処理
        if user_input.lower() == "quit":
            print("\nアプリケーションを終了します。またお話しましょう!")
            break
        elif user_input.lower() == "reset":
            chat = create_chat_session()
            print("\nチャットセッションをリセットしました。新しい会話を始めましょう!")
        else:
            # Geminiにメッセージを送信
            print("\nAI: ", end="")
            response = send_message(chat, user_input)
            print(response)

このメイン関数では、無限ループ(while True)を使用して、ユーザーからの入力を繰り返し受け付けています。入力内容に応じて以下の処理を行います。

  • 「quit」と入力された場合:breakでループを抜けて終了
  • 「reset」と入力された場合:新しいチャットセッションを作成
  • それ以外の入力:Geminiにメッセージを送信して回答を表示

4. プログラムの実行#

最後に、上記の関数を実行します。

>
# チャットアプリケーションを実行
run_chat()

実行例:

===== Geminiチャットアプリケーション =====
「reset」と入力するとチャットをリセットします
「quit」と入力するとアプリケーションを終了します
=========================================

あなた: 私はPythonを勉強しています。

AI: 素晴らしいですね!頑張ってください!


あなた: Pythonを勉強する上で心がけておいた方が良いことを教えてください。

AI: *   **継続**: 毎日少しずつでもコードを書く。
*   **実践**: 学んだことを実際に試す。
*   **質問**: 分からないことはすぐに質問する。
*   **読みやすいコード**: 他人が読めるように書く。
*   **エラーを楽しむ**: エラーは学びの機会。


あなた: reset

チャットセッションをリセットしました。新しい会話を始めましょう!

あなた: 生成AIとは何ですか?

AI: テキスト、画像、音声などを生成できるAIです。


あなた: quit

アプリケーションを終了します。またお話しましょう!

プログラムの解説#

このチャットアプリケーションは、これまで学んだPythonの概念を多く活用しています。以下でそれぞれの概念の活用方法を解説します。

1. 関数定義#

3つの関数(create_chat_sessionsend_messagerun_chat)を定義して、コードを整理しています。関数を使うことで、コードの再利用性を高め、メンテナンスしやすくなります。このように、処理ごとに細かく関数を分ける習慣をつけましょう。

2. 条件分岐#

run_chat関数内のif-elif-else文で、ユーザーの入力に応じて異なる処理を行っています。

3. 無限ループと制御#

while Trueで無限ループを作成し、特定の条件(「quit」と入力された場合)でbreakを使ってループから抜けています。

4. 文字列操作#

user_input.lower()を使って、入力された文字列を小文字に変換してから比較しています。これにより、大文字小文字を区別せずに「quit」や「reset」を認識できます。

5. 外部ライブラリの活用#

Gemini APIを使用するためのgoogle-genaiライブラリを活用しています。

まとめ#

この記事では、Pythonの総まとめとして、Gemini APIを使ったマルチターンチャットアプリケーションを作成しました。このプロジェクトを通して、これまで学んできたPythonの基本構文(変数、条件分岐、ループ、関数)からAPIの活用方法まで幅広く実践することができました。

ここで学んだ知識を応用して、さらに機能を追加したり、他のAPIと組み合わせたりして、独自のアプリケーションを作ることができます。Pythonプログラミングの世界は非常に広く、これからも様々なことに挑戦できるでしょう。

最後になりましたが、このシリーズを最後まで読んでいただき、ありがとうございました。これからのプログラミングの旅が実り多いものになることを願っています!