ChatGPT APIによる会話蓄積・文脈理解型のチャットボットをPower Automateを使ってMicrosoft Teamsに実装した気づき
前回ChatGPT APIで試せなかった部分の検証を進めていきます。
gpt-3.5-turboでは、userとassistantの会話を積み重ねることができるような構造になっており、チャットボット開発を簡単にできるようにAPIが設計されています。
会話の内容を蓄積するロジック
リファレンスの通りmessages配列には以下の順にデータを格納してきます。
systemへの命令文を格納する
userの質問を格納する
assistantの回答を格納する
新たなユーザーの質問を格納する
3~4を所定の回数繰り返す。
# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openai
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
机上では比較的簡単そうに見えますね。実装は今回もPower Automateでやっていきます。前回同様HTTP REQUESTを行うので有償扱いです。(試すなら開発環境・試用版でOK)
チャットボットのペルソナは英雄王に
チャットボットとして利活用されるには人格・愛着が必要です。今回も深津氏式の人格をお借りし、ウルクの王にご登場いただきます。
キャラクターとして想像しやすいのはありがたいですね。今から目に浮かびます。
ワークフローの設計
以下のような感じで構成していきます。今回はTeamsを入力インターフェイスにするため、親メッセージに対して(アダプティブカードを使わないと)返信できないなど、使えるアクションが限定されます。また、投稿した質問内容がわかりません。
メンションすると質問に回答してくれる(Teamsのトリガーとする)
会話内容を蓄積するため、質問と回答を配列変数に追加し、都度POSTする
繰り返し回数に上限を設ける(Do Untilを使用する)
上限になったら怒って質問を受け付けなくなる(終了時の処理を加える)
実際に質問してみる
開発内容はあとにして、実現した結果はこんな感じです。
解説
まず全体の流れをご覧ください。変数でゴリゴリ初期値を作っていきます。
初期化するもの
繰り返し使う値を初期化していきます。
API Key
TeamID
ChannelID
ChatGPTのモデル(gpt-3.5-turbo)
systemのcontent(ギルガメッシュの人格注入)
message配列に格納するsystem用のobject
userのcontent(ユーザーの質問文)※初回のみHTMLをテキストに変換
message配列に格納するuser用のobject
message配列に格納する各objectの入れ物のarray
ループの初期値
スコープの中身
まず、HTTP REQUESTでAPIに質問を投げます。arrMessageにはsystemとuserのオブジェクトが格納されています。assistantの回答は同じようにmessage配列にobjectとして格納されていますので、1行のみ抽出してarrMessage配列に追加します。
続いてギルガメッシュの回答をチャンネルに投稿します。回答内容は上記objectのcontentに格納されています。
続いてアダプティブカードでユーザーの質問を受け付けます。回答内容はmyTextに格納されるようにします。カードはエディターで作成できますので、任意形式で作成ください。
変数に順番に格納していきます。
アダプティブカードからのmyTextをuserのcontentに格納する
userのobjectに質問を格納する
arrMesageにuserのobjectを追加する
ループをカウントアップする
1の際にループ終了時の処理を加えておきます。
ループを抜けた後のスコープでは、HTTP REQUEST後、RESPONSEをTeamsに投稿するのみ行います。
作ってわかったこと
Power Automateで実装するメリット
Microsoft 365のインターフェイスを使えるのでバックエンドだけでほぼOK
デメリット
自動トリガーの待機時間が発生するため、チャットボットらしくない
ロジックが長くなると作業しづらい
文脈理解型の入力方法に制約がある(カードかアプリが必要)
〆
アダプティブカードを使ったらエルキドゥの存在感が薄れてしまいましたが、履歴を蓄積していることの確認は取れました。ギルガメッシュの人格が強すぎて文脈理解した回答かは、ちょっと判断つきませんが、乱立するAIチャットの裏側がわかってきました。プロンプトインジェクション対策や蓄積のリセット機能は共通化してきそうですね。
この記事が気に入ったらサポートをしてみませんか?