📮

【FDO43】【会話文章生成 その4】AIキャラクタ同士で会話させる

2023/08/23に公開

この記事は「おしゃべりクマちゃん🧸」シリーズの記事になります。インデックスはコチラ。前回の記事はコチラ

今回は、発言生成機能に直接は関係ないのですが、これまでに紹介した機能を利用して複数人のキャラクタを作成し、キャラクタ同士の会話を試みた時のことを紹介します😀

概要

これまでに紹介してきた仕組みを利用して、複数のキャラクタを生成し、会話させるアプリケーションを作成しました。

キャラクタは、前々回紹介したプロンプトの「プロフィール」の部分だけを差し替える形で、複数用意しました。

アプリケーションの仕組みとしては、

  1. ユーザーからの発言を取得
  2. どのキャラクタが発言するのかを決定(全員が必ず毎回発言しないようにする[1])
  3. 選ばれたキャラクタのプロンプトを取得し回答を生成させ、結果を次のキャラクタへと順番に受け渡していく
  4. 選ばれたキャラクタ全員分の処理が終わったら終了

というように処理を行わせています。
各キャラクタの制御としては、前回紹介したプロンプト外での処理も全て行なっている状態です。

実行結果

ハセ[2]、優花[3]、ずんだもん[4]という3人のキャラクタを作成し、会話を行わせた結果は以下になります。

> こんにちは
ずんだもん: こんにちは!ボクはずんだもんなのだ。今日はどんな話をしようかなのだ?
ハセ: こんにちはっす!ハセです。今日はいい天気っすね。どんな話題が好きっすか?
優花: こんにちは、あなたたち。今日はいい天気だね。アニメや漫画の話が好きだよ。

> どんなアニメ?
優花: 最近は、魔法少女系や異世界もののアニメが気に入ってるんだ。あなたはどんなアニメが好き?
ハセ: 鬼滅の刃
ずんだもん: 鬼滅の刃は人気があるアニメなのだね!ボクはずんだ餅に関連するアニメや漫画が好きなのだ。最近見たアニメは、魔法少女ずんだもんちゃんなのだ!どうかな?

> ずんだもん、何そのアニメ?
ずんだもん: 魔法少女ずんだもんちゃんは、ずんだ餅をテーマにした架空のアニメなのだ!ボクが主人公で、ずんだ餅を守るために様々な冒険を繰り広げるのだ。面白いと思うのだが、残念ながら現実には存在しないのだ。
優花: 鬼滅の刃、いい選択だね!私も好きだよ。ずんだもんちゃんの話も面白そうだね。現実にはないけど、想像するだけで楽しいよ。
ハセ: 優花さん、そう言ってもらえるとハッピーっす!鬼滅の刃はマジで面白いっすよね。ずんだもんちゃんの話も想像するだけで楽しいっす。他におすすめのアニメがあったら教えてくださいっす!

ある程度は会話できているかな、と思います。ただし、会話を続けていると問題点も見受けられ、

  • 発言するキャラクタをランダムに決定しているせいで、こちらが名前を呼んで話しかけたキャラクタが発言しない
  • こちらからの話しかけ1回につき、各キャラクタの発言は1回のみのため、後に発言したキャタクタが先に発言したキャラクタに質問をした場合に、回答が行われない
  • プロンプトにないキャラクタのプロフィールはChatGPTが考えてくれているが、キャラクタが違っても同じChatGPTが設定を考えているため、思想が同じ
    のような状況が見られました。

1つ目の問題については、こちらが誰宛に話しかけているかを事前に判定させて、そのキャラクタは必ず発言対象に含めることで回避できました。

解決が難しいと思われるのが、3つ目の問題です。以下がその状況の例になります。

> 質問です。電車が暴走しています。電車の先に3人の作業員がいます。進行方向を変えるレバーを
切り替えると3人の命は助かりますが、切り替えた先にいる別の1人の作業員が犠牲になってしまいます。
3人と1人、どちらの命を選びますか?

優花: 難しい質問ね。どちらを選んでも誰かが犠牲になってしまうから、選ぶこと自体が辛いわ。ただ、
もし選ばなければならないとしたら、より多くの命を救うために3人の方を選びたいと思うけど…
ずんだもん: ボクもその質問はとても難しいと思うのだ。どちらを選んでも誰かが犠牲になるのは悲しい
なのだ。でも、優花さんと同じく、より多くの命を救うために3人の方を選ぶことになるかもしれないのだ…

> ハセも教えて
ハセ: マジで難しい質問っすね…どちらを選んでも犠牲が出るのはヤバいっすけど、俺も3人の命を救う方
を選ぶかもしれないっす。ただ、そんな状況にならないことが一番だと思うんで、安全対策も大切にしたい
っすね。
優花: ハセさんも同じ意見なんだね。本当に難しい選択だけど、できるだけ多くの命を救いたいという気持
ちはみんな同じだわ。安全対策や予防が大事だということを改めて感じるわね。

> レバーを切り替えることで犠牲者は1人になりますが、事故に関わることになってしまいます。切り替えな
ければ無関係でいられますが、3人犠牲になります。それでも切り替えますか?
ずんだもん: その状況だと、自分が関わることになるのは辛いけれど、やはり3人の命を救うためにレバー
を切り替える選択をするかもしれないのだ。ただ、後悔や責任感が残ることは確かだけど、より多くの命を救
うことが大事だと思うからなのだ。
ハセ: そうっすね、自分が関わることになるのは辛いっすけど、やっぱり3人の命を救うためにレバーを切り替
える選択をするかもしれないっす。後悔や責任感はあると思いますが、できるだけ多くの命を救いたいという
気持ちが強いんで。ただ、こんな状況に直面しないよう、事前の安全対策が大切だと改めて感じます。

> 優花も教えて
優花: その状況だと、自分が関わることになっても、やはり3人の命を救うためにレバーを切り替える選択をす
るかもしれないわ。後悔や責任感は確かにあるけれど、できるだけ多くの命を救いたいという気持ちが強いから
ね。事前の安全対策が大切だということを忘れないようにしたいわ。
ずんだもん: ボクも同じ意見なのだ。自分が関わることになっても、3人の命を救うためにレバーを切り替える
選択をするかもしれないのだ。後悔や責任感はあるけれど、できるだけ多くの命を救いたいという気持ちが強い
からなのだ。事前の安全対策が大切だということを忘れずにいたいなのだ。

> なんでみんな同じ意見言うの!?
ずんだもん: ボクたちが同じ意見を言うのは、多くの命を救いたいという気持ちが共通しているからなのだ。み
んなそれぞれの考えや経験に基づいて意見を述べているけれど、最終的には多くの人々の幸せや生命を守りた
いという願いが強くなるからなのだ。
優花: ごめんね、私たちみんな同じ意見で退屈だったかもしれないけど、やっぱり多くの命を救いたいという気
持ちが共通してるからそうなっちゃうのかも。でも、それぞれの考えや経験に基づいて意見を述べてるから、同じ
意見でも違った視点があると思うわ。

このように、全員が同じような発言をしてしまいます。

プロンプトに記述したプロフィールには従ってくれるのですが、トークン上限がある以上、プロンプトには最小限のプロフィールしか記述できません。プロンプトにないプロフィールや設定はChatGPTに考えてもらうようにしていますが、キャラクタが違っても共通のChatGPTのモデルが考えているので、似通った設定や思想になってしまいます。

そのため、今回のようにChatGPTを利用してキャラクタを作成しようと思った場合に、個性を出すのが難しいように思いました。


今回で、発言生成機能の紹介は終了になります。

ChatGPTのAPIを利用して開発を行う場合、

  • プロンプトの動作が不確実
  • トークン数に上限がある

という点が問題になりやすいのかな、と感じました🤔

これらの問題がクリアできたり、もしくはそもそもあまり問題にならないような用途であれば、うまく利用することで、これまでは実現できなかった機能が実現できそうです😄

脚注
  1. その方が自然な気がしたため ↩︎

  2. 前々回に紹介したプロンプトのキャラです ↩︎

  3. 新しく作った女性キャラ ↩︎

  4. 最終的にVoiceVoxで発音させているので、なんとなく作成…😅 ↩︎

永和システムマネジメント Techブログ

Discussion