Google Geminiにチャット(マルチターン)を行わせよう
このGoogle Geminiのプログラムの説明を、私のnoteで紹介したところ、多くの方のアクセスを頂きました。ありがとうございます。これからも、少しづつ私のプログラミングの体験を書いていきたいと思います。
さて、今回は、Google Geminiのマルチターンと呼ばれる、いわゆるチャットの機能を使ってみようと思います。
なお、このマルチターンは、Google Geminiで指定できるAIモデルのうち、"gemini-pro"でしか使えません。つまり、画像の分析などに使える、"gemini-pro-vsion"モデルでは使えない機能になります。
また、チャットといっても、Webを使ったプログラミングではないので、出力は一方的ですしかし、出力は、以前の分析よりも、会話形式になっていて、以前のものよりも長文になっている点が違いになります。
いつもの初期設定から、スタート
では、Google Colabを使って、いつものGoogle Geminiの初期設定からスタートしましょう。
Google Colabのテキスト欄を開けて、
# 初期設定
Gemini利用の
* SDKの導入
* パッケージのインストール
* API KEYの導入
を行います。
と入力。
次に、コード欄を開けて、
!pip install -q -U google-generativeai
import pathlib
import textwrap
import google.generativeai as genai
from IPython.display import display
from IPython.display import Markdown
def to_markdown(text):
text = text.replace('•', ' *')
return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))
# Used to securely store your API key
from google.colab import userdata
# Or use `os.getenv('GOOGLE_API_KEY')` to fetch an environment variable.
GOOGLE_API_KEY=userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)
と入力します。ここまでは、いつもと同じです。
マルチターン会話のプログラミングを書いてみよう
いよいよ、マルチターンの会話のプログラムを書いてみましょう。
テキスト欄を開けて、
### マルチターン会話
`genai.ChatSession` クラスは多くのユースケースを扱うことができますが、いくつかの仮定があります。あなたのユースケースがこのチャット実装に当てはまらない場合、 `genai.ChatSession` は `GenerativeModel.generate_content` のラッパーに過ぎないことを覚えておくと良いでしょう。単一のリクエストに加えて、複数ターンの会話を扱うことができます。
個々のメッセージは、前のセクションで見たように `glm.Content` オブジェクトまたは互換性のある辞書です。辞書として、メッセージは `role` と `parts` のキーを必要とする。会話における `role` はプロンプトを提供する `user` またはレスポンスを提供する `model` のいずれかである。
Glm.Content` オブジェクトのリストを渡すと、マルチターンチャットとして扱われる:
と入力しておきましょう。
次に、コード欄を開けて、
model = genai.GenerativeModel('gemini-pro')
messages = [
{'role':'user',
'parts': ["幼い子供にコンピューターの仕組みを簡単に説明して。"]}
]
response = model.generate_content(messages)
to_markdown(response.text)
と入力しましょう。
マルチターン会話では、前の指定に続いて、追加の質問ができる!
ここからが、今回の重要な部分です。マルチターンでは、前の分析に指定した条件に、追加いの会話(質問)を行うことが可能です。その部分をプログラミングしてみましょう。
テキスト欄を開けて、
会話を続けるには、応答と別のメッセージを追加します。
注:複数回にわたる会話では、リクエストごとに会話履歴全体を送信する必要があります。APIはステートレスです。
と入力。ここで出てくるステートレスとは、前の入力・出力を覚えていない状態です。今回のマルチターンでは、前回の状況を覚えているので、ステートフルと呼んだりします。
次にコード欄を開けて、
messages.append({'role':'model',
'parts':[response.text]})
messages.append({'role':'user',
'parts':["では、高校生にもっと詳しく説明するのはどうだろう?"]})
response = model.generate_content(messages)
to_markdown(response.text)
と、入力します。これで、今回のプログラミングは終了です。
Google Geminiのマルチターンの実行
では、いつものように、コード欄の左にある「三角」マークを、上から順番に実行していきましょう。
私の実行イメージは、以下のようになりました。
マルチターンでない実行は、「Google Colabで、Google Gemini(AI)のプログラミング解説、初心者用(#2)」で作成しました。この時の出力は、前の分析は、次の分析に関係泣くないっています。このマルチターンでは、質問を続けて行うことが可能になっています。
なんか、ここまで来ると、ようやく生成系AIを使いこなしているように思えるのは、私だけですかね。😆
Comments