見出し画像

[旅するAI bot]返事するbotに何を語らせるか

botとの相互アクションについてです。


Twitterに設置していた記念写真機能

旅botは設定した経路通りにStreet View画像を取得して旅日記を追記することで、お手軽に旅情を得ることを目的としたbotです。
だから基本は、自分語りで黙々と旅行先をレポートしてくれるという方向性でまったく問題ないと思っています。
ただせっかくSNSアカウントを使っているので何かの相互反応があれば面白いかなと思ったことがあります。
そこで旅botにある時期記念写真機能というのを設置していました。

以前付けていた記念写真機能

Twitterの記事に人物像/人形絵の画像をリプライするとその画像に合わせた記事画像を追加する機能です。これについての詳細はまた後日に説明しますが結果としては誰も使われなかったものです。
まぁ「お金あげます」とかいうSNS詐欺がある時代に、正体不明なアカウントにリプライとか確かにちょっと怖いですし、自分でも他の人が同じようなことをやってても関わらないでしょうね。。

その後にTwitterがXに変わった後、Twitter APIでPostを読み出すのに月1万円かかるということに規約が変わり、読み出しでリプライを検出している機能の維持には結構な額がかかるようになりました。。
さすがにお小遣いスケールではなくなったのでこの機能は現在止めています。

Blueskyを接続

Bluesky SNSも登録が自由になったとのことでBlueskyを調べたところAPIが公開されていたので旅botの機能もつないだのですが、現時点すべてのAPIにコストもなさそうで厳しい制限もなさそうなので、相互作用機能も入れ直してみようかと考えました。

イイネ機能の追加

記念写真機能の復活も考えたのですがまずこれを作った時点ではStableDiffusioin Web-UIのAPIで作っており、現時点ではComfyUIに移行しているため簡単にはいかないこと、それにまったく使われなかった機能であることも少し反省して、イイネ機能に対する反応にしました。

  1. リプライと違い、イイネであれば相互作用の敷居が低い

  2. 相手から直接的な会話テキストは入らないので、そこでの複雑な返答反応の仕組みを考えなくてよい

botは何を返答するのか

といっても「イイネをありがとう!」だけではさすがに能が有りません。今回は画像を生成する訳ではないので何かちょっと気の利いた返事をさせたいです。
イイネを付けたときにその状況から得られる情報は

  1. イイネを付けた記事の情報

  2. イイネを付けた人のプロファイル

  3. イイネを付けた人の記事

  4. イイネを付けた時刻/イイネを返答する時刻

  5. 現時点の旅の状況

これらを使えばAIに吸わせる状況情報としては十分あります。
一般的にinstruction会話させるAIは次の会話を生成するのに、人との相互の会話リストを送ります。まぁその中でも直近の会話は返答する対象なので重要度が高いでしょう。
今回の場合は「イイネをありがとう」を基点に会話を開始するという様式になります。

旅botは「旅をするのが目標である」という軸は動かさない

これが会話を楽しむことを主体とするAIならば、相手のプロファイルを詳細に読んで相手の直近の記事を話題として会話を構成するべきなのでしょう。
でもイイネだけでがっつく会話に食いついてくるbotとか、詐欺めいてて気持ち悪くありませんか?
「こちらをガン見してくる」ような会話をしてくるAI会話botは個人的にはどうなんだろうと疑問を持っています。お互いに解決すべき問題を間に挟んで会話が成り立つべきです。
そもそも旅botを作ったのは「旅を話題にAIと会話する」のが目的です。

ですので「こちらの旅の話題が主軸である」ことはぶらさない方針で返事を作ります。

イイネ者の直近記事とbotの旅記事

よってとりあえずの構成としては以下の形で生成するプロンプト指示にしています。

  • イイネに感謝する

  • イイネ者の直近記事に触れる

  • リプライした記事の内容を主体に旅の様子を創作して伝える

  • 今の時刻(mi-serverのAI機能に元々入れている分)

botが返答する会話が旅の話題からずれないことで、botが目的意志を持っているかのような素振りになり、結構感じのよい返事になったなと思います。

どのくらいの回数で返答すればよいのか

相手のいる話への返答ですし初回作り込みなので、しっかりした返事文章を作るためとりあえずはLLMにChatGPT4を使いました。
しかしChatGPT4 APIコストは少しお高めです。。際限なく返答させていたらこれまた趣味でやるコストからはみ出てしまいます。それに返答ばかりでタイムラインが埋まってしまったら、これも旅記事中心の主旨からずれてしまいます(現時点少しこの傾向もあるので調整中)
つまりビジネスでお金を貰っている訳ではないので、返答回数や頻度は制限しなければならないのですが、どのように制限すればよいのか は少し悩みました。

当初は「イイネ者のアカウントをDB記録して、返答は1アカウントあたり1日にn回までに制限する」という案で考えていました。
そうすると数回イイネをしたら後は固定メッセージで「1日待ってくださいね」と返答させるのか? なんかそれは違うのではないか。。。
いろいろ考えたあげくに思い出したのは次の原則「mi三姉妹は「言語のAI」に「人スケールの時間」の縛りを付ける実験でもある」です。

その結果次のルールに落とし込みました。

日中、1時間に受けたイイネの中から最大2件をランダム選択して、それにのみ返答を付ける

これはお金もらってビジネスでやってたらやれない方針です。
「なんで2人だけで他の人は無視するのか」「なんでランダム選択なのか」「時間を遡ってでも全件に返答すべきではないか」
に対して
「人だったらSNSを24時間注視してる訳ではないので全件に返せる訳ないでしょ」
「人でも疲れたらリプライに返答はしないでしょ」

リソースに制限のある人ではないから実際には全件返答することはやれます。でもmi三姉妹は人の時間に縛ることで人らしさを出す実験でもあります。
とりあえずそういう方針でしばらくやってみようと思います。

LLMの選択と調整

現時点はイイネ返答のLLMにGemini Pro(無償)を混ぜるようにして、1時間最大3件にしています。
Geminiを入れるに当たっては、返答を生成するプロンプトに少し苦労しました。結構言ってることがあちこちにぶれたり、相手の言ったことなのかこちらが言ったことなのかが逆になったりしました。
緩い作業指示の理解と実行についてはGPT4は現時点他のLLMとは別格の安定性があるように感じます。
ただ作業指示を細かくかみ砕いて手順を示すとGeminiでも似た返答が得られるようにはなったので、使いようではあるようです。
本当はローカルLLMも使いたいのです。自分はローカルLLMがハルシネーション込みで大げさに褒めてくれる文章は割と好きで好奇心が刺激されます。
ただ、たまに意味不明、まれに失礼なことを言うのも分かっているので、当面はChatGPTやGeminiあたりを使うのが無難なのかなと思っています。

これを運用してちょっと気づいたのは「返信文章の前半で相手の記事を軽く褒める部分が自分の使っている「タスクを完了したら褒めてくれるbot」の挙動と似てるかなと。botであってもほめられるのは精神衛生によいのでbotに褒められたことがない方は、旅botを使って試してみるのもよいかもです。

今後は

細かい改良は入れていきますがどういう方向に持って行くのかはまだいろいろ考え中です。。今回使わなかった情報もいろいろあるからそれをうまく加工することもありえます。やり方次第ではもっと別の情報を取得できるはずです。
ただそれでも「botの旅が中心である」という線はぶらさないつもりですし、また極力アクション者側にプッシュはしないような方向にする予定です。botからいちいち情報をプッシュされるのは面倒な話しですし、広告みたいに押しつけてくるのはうざったいと思ってますし。
今回の機能を付けてしばらく使ってみてちょっと思ったのが、まるで「来客の相手をしてくれているお手伝いさん」みたいな味もあるかなと。
AIはこういう方向に育てっていくとよいなと感じます。

(追記)本当は

旅botは旅情のある文章を生成するというのが目的なので、ここでは私は制御屋的な方法で生成文プロンプトを調整して文章を起こしています。
本当は「AI自身が旅の日記を作ることを目的と認識した上で、返答する返事を旅を中心に置くような文のバランスを自分で取る」ことが出来たら一番よいのはもちろんです。まだそこまでは難しいのかもしれない。

ただある日突然出来るようになっている可能性もあります。
生成AIはじっくり触ってみないとその性能がわからないという側面が強いです。
絵生成も人間っぽい対話も「できたよー」という研究者からの報告は、StableDiffusiionやChatGPTよりも数年前からありました。でもこれらがオープンなって触ってみて、しかも触れる状態になってから数ヶ月以上かかって大騒ぎになった面があります。
AIがより高階の認識が出来るようになっていても、私達はすぐにはわからないかもしれない と感じます。

この記事が参加している募集

AIとやってみた

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