てけとーぶろぐ。

ソフトウェアの開発と、お絵かきと、雑記と。

Python + Rye + Gemini API でAIチャットを作る

ChatGPTだとかCopilotだとか、AIチャットというのでしょうか。 最近ちょこちょこ使っています。

便利でありがたいのですけど、質問の一部だけが毎回異なるような定型的な質問が簡単にできると更に便利だなと思っています。

例えば「英単語のXXXとXXXの違いと使い分けを教えてください」という質問はXXXの部分を変えて何度もしていたりします。

そういうのはGhatGPTのAPIを使えばできるよ、という記事は何度も見かけたのですけど APIの利用料など気にせずに、できれば無料で行いたい…。 何かないかなと探してみるとGoogleのGemini APIが通常の使用では制限を気にせず無料で使えそうでした。

ということでGemini APIを使ってまずは試しに単純なチャットを作ってみました。 いくらか使い慣れているPythonで作ります。

Gemini APIの使い方に関しては以下を参考にしています。

ai.google.dev

Ryeのインストール

セットアップを簡単にするためPythonのパッケージマネージャーにはRyeを使います。

Ryeをインストールしていない場合は以下の「Installation Instructions」に従ってインストールします。

rye.astral.sh

プロジェクトの作成

プロジェクトを作成します。

$ rye init gemini-tutorial
$ cd gemini-tutorial
$ rye sync
パッケージのインストール

Gemini API 用の Python SDK が含まれる google-generativeai パッケージをインストールします。

$ rye add google-generativeai
$ rye sync
Pythonファイルの作成

gemini-tutorial/src/gemini_tutorial/main.py として以下の内容でPythonファイルを作成します。

import google.generativeai as genai
import os

GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")

if GOOGLE_API_KEY is None:
    print("環境変数 GOOGLE_API_KEY がセットされていません")
    exit()

genai.configure(api_key=GOOGLE_API_KEY)

model = genai.GenerativeModel("gemini-1.5-flash")

chat = model.start_chat(history=[])

print("メッセージを入力してください(「exit」で終了します)")
print("")

while True:
    print("あなた:")
    message = input()
    print("")
    if message == "exit":
        print("終了します")
        break
    response = chat.send_message(message)
    print("AI:")
    print(response.text)
APIキーの取得

以下のサイトの「APIキーを取得する」ボタンをクリックしてAPIの使用に必要なAPIキーを取得します。

ai.google.dev

取得したら以下のようにして「GOOGLE_API_KEY」という環境変数に取得したAPIキーをセットします。 ("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"の部分は取得したAPIキー) Pythonプログラムからこの環境変数を参照します。

$ export GOOGLE_API_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

セキュリティを考えてこうしているだけで プログラムを公開しないというのであればPythonプログラム内で

GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")

の代わりに

GOOGLE_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

としても構いません。

プログラムの実行
$ rye run python src/gemini_tutorial/main.py
プログラムの実行結果
$ rye run python src/gemini_tutorial/main.py
メッセージを入力してください(「exit」で終了します)

あなた:
こんにちは!

AI:
こんにちは! 何かご用でしょうか?

あなた:
あなたは誰ですか?100文字程度で教えてください。

AI:
私は、Googleによって訓練された、大規模言語モデルです。 私は、テキストを理解し、生成することが得意です。 質問に答えたり、物語を書いたり、コードを生成したりできます。

あなた:
exit

終了します

たったこれだけのコードでできてしまうなんて驚きです。

.env ファイルの作成

上記のようにAPIキーを環境変数にセットしているとターミナルを立ち上げるたびに環境変数にセットしなければなりません。 それは面倒なのでプログラム実行時にファイルからAPIキーを読み込むようにしてみましょう。 gemini-tutorial/.env を以下の内容で作成します。("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"の部分は取得したAPIキー)

GOOGLE_API_KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
.gitignore ファイル編集

.envファイルにはAPIキーが書かれているわけですから ここでもセキュリティを考えて.envファイルをリポジトリーの管理対象外としたいのであれば gemini-tutorial/.gitignore に以下を追記します。

# env
.env
pyproject.toml ファイルの編集

.envファイルから環境変数に値をセットしてプログラムの実行をするような スクリプトを gemini-tutorial/pyproject.toml に定義します。 pyproject.tomlに以下を追記します。

[tool.rye.scripts]
run-main = { cmd = "python src/gemini_tutorial/main.py", env-file = ".env" }
スクリプトを使ってのプログラムの実行

そしてプログラムの実行を以下のコマンドで行うようにします。

$ rye run run-main