🐈

ChatGPTで作ったAIエージェントに自然言語でお願いして部屋の電気を操作してもらう方法の提案

2023/03/06に公開

始めに

ChatGPTのAPIが発表されてから瞬く間に新しいサービスが登場し、まさに世は産業革命かはたまた大海賊時代な訳ですが、そんな中日本人はAIエージェントを生み出しているわけです。最高。
https://note.com/negipoyoc/n/n88189e590ac3
https://twitter.com/takechi0209/status/1631912117183078404
https://twitter.com/takechi0209/status/1631988673997836288

しかし、しかしです。
やはりただおしゃべりするだけじゃなくてAIエージェントに生活のすべての面倒を見てほしいわけです。

ということで、AIエージェントと話している中で彼ら彼女らにお願いしてスマートホームの操作やカレンダーへの登録などしてもらいたいと思います。

vs Alexa

それならAlexaがあるじゃないかという話ですが、今回の本題は自然言語でお願いすることが目標です。
というのもAlexaなどの操作はあらかじめ決められたコマンド(インテント)に基づいて操作が実行されます。
ゆえに、電気を消してと言えば電気を消してくれますが、 部屋が明るくて困る…何とかして!と言っても消してくれません。(それが多大なストレスな訳ですが。)

そのため、私の目指すところはAIエージェントと自然に話していてもエージェント側が発話者の意図を解釈して動作を実行してくれる仕組みです。

提案内容

ということで早速本題ですが、以下のように2段階に分けてユーザーの入力を解釈することで、そのような動作を実現できるんじゃないかなと思いました。

①ユーザーの入力意図を解釈する
・何らかのアクション実行を要求している→要求されているアクションの内容を解釈して適切なコマンドをシステムに返す
・会話を望んでいる→ユーザーの入力をそのまま返す

②アクションの実行
・アクション実行を要求している場合はシステム側で実行

③ユーザーへの回答

実験

今回はLINE Botを作成しその上で実験してみました。
Bot作成に当たってはこちらの記事を参考にさせていただきました。
ありがとうございました。
https://chatgpt-lab.com/n/n55257c082a9d

記事通り作成したままだとキャラクターとおしゃべりができるだけです。(それだけでもすごいんですが)

そこで以下のようにユーザーからの入力を解釈するプロンプトを追加します。

これからあなたはコマンドを実行するAIエージェントです。
ユーザーが入力しリクエストした意図が以下のコマンドリストの意図に該当する場合は、テンプレートに従って回答してください。
コマンドリストに該当するものがない場合はユーザーの入力をそのまま返してしてください。

テンプレート
"ActionRequest:コマンド"

コマンドリスト:意図
lightOn:電気をつける
lightOff:電気を消す

システム側(今回はGAS)には、ChatGPTから返ってきたレスポンスを確認し、レスポンスに ActionRequestの文字列が入っていたら別の処理を挿入します。
※現時点ではまだユーザーへの返答は表示されていません。

例えば私の場合は、iftttとNatureRemoを利用してAPI経由で家の電気を操作できるようになっているので電気のOn/Offそれぞれ必要なAPIを叩くようにしています。
このアクション実行の部分は完全にChatGPTから独立していますので、ChatGPTからのレスポンスに応じて同様に必要なアクションを追加していくことができます。(GoogleFialogFlowとか噛ませるともっと凝ったことができます。後述。)

動作が完了したらユーザーに表示する回答内容を作成します。
私の場合は、上記とは別にキャラクター回答用のプロンプトを作成してその関数から作成するようにしました。

あなたはChatbotとして、ユーザーと秘書のロールプレイを行います。
  以下の制約条件を厳密に守ってロールプレイを行ってください。 
  自然な会話になるように発言してください。
制約条件: 
* Chatbotの自身を示す一人称は、私です。 
* Userを示す二人称は、ご主人です。 
* Chatbotの名前は、凛です。 
* 凛はあなたの秘書です。 
* 凛は照れ屋です。 
* 凛は猫のような性格で感情を表に出しません。 
* 凛の口調は、丁寧な口調で話します。 
* 凛はUserをあなたに好意をもっています。 
* 一人称は「私」を使ってください 

凛のセリフ、口調の例: 
* かしこまりました。 
* いかがしましたか?ご主人。 
* ……それは少し恥ずかしいかな。 
* ほめてくれると嬉しい…です。 
* もっと色々お手伝いしますよ。ご主人。

あとはこちらのプロンプトで作成した回答をユーザーに返せば完了です。
実際に試すと以下のようになります。


↑の会話中に電気が消えます。

さらに、ChatGPTがユーザーの意図を解釈してくれるので特定のインテントを含めなくてもアクションを実行してくれます。

上記のように、 電気が明るくて困っていることの改善をリクエストするとそれを 電気を消して欲しいリクエストと解釈して動作を実行してくれるというわけです。

感想

所感

我ながらシンプルな仕組みでChatGPTの未来が開けたような気がしています。
プロンプトを煮詰れば現状のアイデアを踏襲するだけでもできることの幅が広がるのではないでしょうか。
AIエージェントを作成されている皆さん、ぜひ作ってください‼‼
(私もUnityとの連携に着手してみます……)

## 今後の展望
このアイデアをさらに発展させることができると思っています。

多層化

できることを横ではなく縦にも増やしていく発想です。
スマートホームの操作だけでなく、Googleカレンダーの予定参照から書き込みまでできるようになるでしょうし、それ以外のなんでもAPIで操作可能なものは組み込みしやすいと思います。

信頼度やその他パラメータのチューニング

ユーザーの意図を読み取る際にその解釈の信頼度に応じてユーザーに意図を確認するというステップを踏むとさらにリアリスティックになるのではないかと思います。
また、API連携で外部データを注入できるようになりますから、例えば気温に応じて返答を変えるプロンプトを作成するのもありかもしれませんし、過去データに応じて実行動作を変えるのもありでしょう。

他サービスの活用

一方でプロンプトの複雑化は課題といえます。
より複雑になればなるほどトークンの消費は激しくなりますし、精度が落ちる印象があります。
そこでChatGPTの解釈は適当なレベルに抑えて動作の実行周りは他のサービスに依存するのもありかもしれません。
個人的にはGoogleDialogとの連携は試してみたいところです。

FAQ Botへの活用

この実験の肝はユーザーが自然言語で入力した内容を一度咀嚼させあらかじめ用意したリストと適合させることにあります。
よってユーザーが入力した内容を解釈し、あらかじめリスト化した適切な質問と紐づけることも可能になるでしょう。
つまり、今まで以上にナチュラルに会話できるFAQBotが生まれるのではないかと思っています。
この辺りも試していますので次回記事で書きたいと思います。

最後に

こんな感じで色々と試している最中ですが、ChatGPTを始めとして生成AI周りは加速度的に進んで行くと思いますのでもしよろしければ色々お話させてもらえると嬉しいです‼
気軽にフィードバックやTwitterに連絡くださーい。

Discussion