見出し画像

初めてのgoogle Gemini(履歴付きCHAT)

前回の記事でgoogle Gemini Proを使って、簡単なチャットを作ったという記事を書きましたが、これは正しくは質問応答を繰り返すプログラムでした。記事の中で会話履歴を保持しているか微妙だとコメントしていたのですが、本来のCHAT用関数がgoogleで用意されており、これを使うと普通に履歴付きの会話ができるようなので、早速試してみました。

準備

Gemini Pro APIを使うための準備は前回記事を参照してください。

CHATの実装とお試し結果

実装


それでは、早速コード全体です。前回の質問応答プログラムとの違いは、
モデル gemini-proを利用して、chat = model.start_chat(history=[])を始めるだけです。
ユーザー入力 promptを逐次chat.send_messageすることで、会話が成立します。会話が終了したら、確認のためにhistoryの中身を書き出しています。

import os

import google.generativeai as genai

GEMINI_API_KEY=os.getenv('GEMINI_API_KEY')
genai.configure(api_key=GEMINI_API_KEY)

print("サポートしているモデル")
for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)


model = genai.GenerativeModel('gemini-pro')

# chat model
chat = model.start_chat(history=[])
while True:
  prompt=input('なにか話してください: ')
  if prompt == 'exit':
    break
  response = chat.send_message(prompt)
  print(response.text)
  
print(chat.history)

結果 会話例



なにか話してください: あなたの最新の知識はいつのものですか

私の最新の知識は、2022年4月まで更新されています。その後入ってきた情報は把握できていません。正確で最新の情報を得るには、インターネット検索を利用するか、信頼できる情報源に当たることをお勧めします。

なにか話してください: では、明日の天気を知る方法について教えて下さい。

明日の天気を知る方法をいくつかご紹介します。

* **気象庁のウェブサイトやアプリを利用する。** 気象庁のウェブサイトやアプリでは、全国の天気予報や警報・注意報の情報を確認することができます。地域や時間帯を指定して、明日の天気を調べることができます。
* **民間の気象予報サービスを利用する。** ウェザーニュース、ウェザーマップ、tenki.jpなど、民間の気象予報サービスでも、明日の天気を調べることができます。これらのサービスでは、気象庁の予報データに加えて、独自の予報モデルや観測データに基づいた予報を提供しているところもあります。
(中略)

なにか話してください: それらの各種情報は同じものですか

気象庁のウェブサイトやアプリ、民間の気象予報サービス、テレビやラジオの天気予報、スマートフォンやパソコンの天気予報アプリなどの各種情報は、すべて同じではありません。
(中略)

なにか話してください: スマホで簡易に使えるアプリを紹介してください。

スマホで簡易に使える天気予報アプリをいくつかご紹介します。

* **気象庁アプリ**
気象庁が提供する天気予報アプリです。全国の天気予報や警報・注意報の情報を確認することができます。また、現在地の天気や週間予報、雨雲レーダーなども見ることができます。
(中略)

なにか話してください: ありがとう。今までの会話 要約してください。
**会話の要約**

* あなたの最新の知識は、2022年4月まで更新されている。
* 明日の天気を知る方法としては、気象庁のウェブサイトやアプリ、民間の気象予報サービス、テレビやラジオの天気予報、スマートフォンやパソコンの天気予報アプリなどがある。
* 各種情報は、予報の更新頻度や予報モデルが異なる。
* 天気予報はあくまでも予測であり、100%正確ではない。
* スマホで簡易に使える天気予報アプリとしては、気象庁アプリ、tenki.jp、ウェザーニュース、Yahoo!天気、Google天気などがある。

以上が、これまでの会話の要約です。

こんな感じで、天気予報を題材に会話を繰り返してみましたが、質問が履歴を前提として省略されているにも関わらず、ちゃんと会話になっていました。また、最後に会話の要約を試みましたが、これもまあまあでした。

履歴の確認

先程の会話履歴の内容の一部です。

[parts {
text: "あなたの最新の知識はいつのものですか"
}
role: "user"
, parts {
text: "私の最新の知識は、2022年4月まで更新されています。その後入ってきた情報は把握できていません。正確で最新の情報を得るには、インターネット検索を利用するか、信頼できる情報源に当たることをお勧めします。"
}
role: "model"
,
(以下繰り返し)

こんな構造みたいですね。userとmodelのロールの会話テキストが順番に入っています。

履歴の整形
chat.historyから必要な情報を抜き出して、表示します。
これなら、保存も二次利用も簡単にできそうですね。
もちろん、二次利用するときはファクトチェックは大切ですよ。

 #chat  history
for message in chat.history:
  result = f'{message.role} : {message.parts[0].text}'
  print(result)
  

user : 日本一大きい湖は
model : 琵琶湖
user : では世界一は
model : カスピ海

カスピ海は、世界で最も大きい湖です。面積は約371,000平方キロメートルで、日本の国土面積の約1.2倍に相当します。カスピ海は、アゼルバイジャン、イラン、カザフスタン、ロシア、トルクメニスタンの5カ国に囲まれています。カスピ海には、チョウザメやオオチョウザメなど、貴重な魚が生息しています。
user : 日本で二番目は
model : 霞ヶ浦

霞ヶ浦は、茨城県にある湖です。面積は約168平方キロメートルで、琵琶湖に次いで日本で2番目に大きい湖です。霞ヶ浦は、常陸川、鬼怒川、小貝川などの河川が流れ込む、淡水湖です。霞ヶ浦には、コイ、フナ、ワカサギなどの魚が生息しています。また、霞ヶ浦は、野鳥の生息地としても知られており、多くの野鳥が飛来します。

まとめ

google Gemini ProのCHAT機能を実装して見ました。

CHAT機能には、最初から履歴機能が増備されているため、langchainなどのメモリを利用する非通用はありませんでした。
履歴の形式を確認し、読みやすいように整形して出力しました。

お試しはできたので、実用性を高めるためには、以下のような対応が必要になるかもしれません。機会があれば、紹介します。

  • 履歴の外部ディスクへの保存と書き戻し
    履歴の扱える限界も要検証です。

  • ロール設定(キャラ付け)の組み込み
    システムプロンプトなどの活用方法を考えないとですね。

  • エラーハンドリングを追加する。

  • ユーザーが入力したメッセージを検証する。

  • チャットボットの応答をより自然にする。

  • チャットボットの学習機能を追加する。

  • また、他のLLM(GPT4など)と自動会話してもらってもいいかもしれません。

おまけ タイトル画像の説明 by GPT-4V

このカラフルなイラストでは、一人の若い男性と小さなロボットが描かれています。男性は驚きと喜びを表しているように見え、青いシャツを着ていて、口をあけて笑っています。ロボットは二つの大きな青い目を持ち、愛らしく賢そうな表情をしています。それらはコミュニケーションを取り合っているかのようで、背景にはチャットバブルが表示されています。全体的にフレンドリーでテクノロジーをテーマにしたデザインが印象的です。


この記事が気に入ったらサポートをしてみませんか?