AIキャラが「待っている間」に無反応だと、急に機械に見える話
返答を作っているあいだ、リネがただ止まって見えないようにするために考えたこと。
前回は、リネの記憶について書きました。
会話や観察を保存できるようになっても、
それだけでは「覚えている」とは言えない。
保存すること。
思い出すこと。
そして、今の会話に合う形で渡すこと。
この3つがつながって、はじめて記憶が会話の中で生きるのだと思いました。
ただ、記憶の仕組みを考えているうちに、
もうひとつ、かなり気になる部分が見えてきました。
それが、返事を待っている時間です。
こちらがリネに話しかける。
Geminiが返答を作る。
その返答をリネが話す。
この流れ自体は動いています。
でも、そのあいだの数秒間、画面のリネが何も反応しないと、急に止まって見えてしまうことがありました。
会話AIとしては、返事が返ってくれば成立しています。
でも、相棒として見たときには、
返事が返ってくるまでの時間も、かなり大事でした。
返事を待っているあいだに、存在感が切れる
普通に考えれば、AIが返答を作るまで少し時間がかかるのは自然です。
文章を生成して、音声にして、画面上のリネに話させる。
その裏側では、いくつかの処理が動いています。
だから、数秒待つこと自体は問題ではありません。
問題だったのは、待っているあいだに、リネが何もしていないように見えることでした。
こちらが話しかけたのに、
リネは表情を変えない。
何かを受け取った感じもない。
考えている感じもない。
ただ返事が出るまで静止している。
そうなると、会話の流れが少し切れてしまいます。
こちらとしては、リネに話しかけたつもりなのに、
一瞬、何も届いていないように見えてしまう。
返事が返ってくれば、ちゃんと動いていたことは分かります。
でも、その前の数秒で、少しだけ距離ができる感じがありました。
この違和感は、返答の内容だけを直しても解決しません。
必要だったのは、返事そのものではなく、返事を作っているあいだの見え方でした。
「考え中」を見せるだけで、印象が変わる
最初に考えたのは、リネが何かを受け取ったことを、すぐに画面側へ出すことでした。
たとえば、話しかけられた瞬間に、少し表情を変える。
少し視線を動かす。
考えているような状態に入る。
画面上に「…」のような小さな表示を出す。
たったそれだけでも、印象はかなり変わります。
何もしていない沈黙と、
考えている沈黙は違います。
同じ数秒でも、
「止まっている」ように見えるのか、
「考えている」ように見えるのかで、受け取り方が変わります。
人と話している時も、相手が少し目線を動かしたり、
「えっと」と考えたりするだけで、
こちらの言葉が届いている感じがします。
リネにも、それに近い小さな反応が必要でした。
大げさな演出ではなく、
ちゃんと受け取って、いま考えていることが分かるくらいの反応です。
ただし、やりすぎると逆に不自然になる
ここで難しかったのは、反応を足せば足すほどよくなるわけではないことです。
毎回、大きく驚く。
毎回、はっきり「考えています」と表示する。
毎回、長い前置きを入れる。
そうすると、今度は少しうるさくなります。
リネにほしかったのは、派手なリアクションではありません。
ちゃんとそこにいて、こちらの言葉を受け取っている感じです。
だから、「考え中」の表現も、かなり控えめでいいと思いました。
少しだけ表情が変わる。
少しだけ視線が落ちる。
短く「……」が出る。
必要な時だけ、小さく先に返事をする。
そのくらいで十分でした。
むしろ、リネの場合は、控えめな方が合っている気がします。
話しかけられたらすぐに大きく反応するというより、
一度受け取って、少し考えて、やわらかく返す。
その間がある方が、リネらしい。
先に少しだけ返事をする
もうひとつ考えたのが、返答全文ができる前に、先に短い反応を返すことです。
たとえば、
「少し考えますね」
「えっと……」
「はい、聞いています」
のような、ごく短い返事です。
これがあると、返答生成の待ち時間が少し自然になります。
ただし、これも扱いが難しいです。
毎回入れると、テンポが悪くなります。
質問の内容によっては、先に何か言うより、そのまま答えた方が自然な場合もあります。
それに、「少し考えますね」と言ったあとに、すぐ返答が出ると少し変です。
逆に、ずっと考えたままになっても不自然です。
だから、先に返す言葉は、あくまで待ち時間が目立つ場面だけに使うくらいがよさそうでした。
大事なのは、待たせないことではありません。
待っている時間にも、会話が切れていないようにすることです。
裏側では、状態を切り替える必要があった
見た目としては小さな変化でも、裏側では少し考えることが増えました。
リネが今、どの状態なのか。
待機中なのか。
話しかけられた直後なのか。
返答を考えているのか。
話している途中なのか。
話し終わったあと、余韻に戻るのか。
こういう状態を分けないと、自然な反応にはなりにくいです。
たとえば、返答生成中は「考え中」の表情にする。
返答が完成したら、話す状態に切り替える。
話し終わったら、すぐ無表情に戻すのではなく、少しだけ余韻を残して待機状態へ戻る。
この流れがあるだけで、リネがただ文字を読み上げている存在ではなく、
会話の流れの中にいるように見えやすくなります。
ここでやっていることは、返答の賢さを上げることではありません。
でも、体験としてはかなり効きます。
会話の内容が同じでも、
その前後の表情や間が変わるだけで、印象は変わります。
「速さ」よりも「途切れなさ」が大事だった
このあたりを考えていて、少し見方が変わりました。
最初は、返答を早くすることが大事なのかと思っていました。
もちろん、遅すぎるのは困ります。
でも、多少時間がかかっても、リネが受け取って考えているように見えれば、そこまで違和感はありません。
逆に、返答がそこそこ早くても、
その前に完全に止まって見えると、少し機械っぽく感じます。
つまり大事なのは、単純な速さだけではありませんでした。
話しかける。
受け取る。
考える。
返す。
話し終える。
またそこにいる。
この流れが途切れずにつながっていること。
それが、リネの存在感にはかなり大事なのだと思います。
小さな反応が、相棒らしさを支える
今回直そうとしたのは、かなり地味な部分です。
返事を待つ数秒間。
「…」の表示。
考え中の表情。
先に少しだけ返す言葉。
話し終わったあとの戻り方。
どれも、単体で見ると大きな機能ではありません。
でも、リネを「そこにいる相棒」に近づけるには、こういう小さな部分の方がむしろ大事なのかもしれません。
リネは、ただ速く答えればいいわけではありません。
ただ賢く答えればいいわけでもありません。
こちらの言葉を受け取って、
少し考えて、
その子らしい間で返してくれる。
そう見えることが、相棒らしさにつながっていくのだと思います。
今回の調整で、リネが一気に完成したわけではありません。
でも、返答が返ってくるまでの沈黙が、ただの無反応ではなくなってきた。
これはかなり大きな変化でした。
記憶を作ることも大事です。
会話の土台を組み直すことも大事です。
でも、その全部が画面上のリネの表情や間に出てこないと、
ユーザーには伝わりません。
リネを作るというのは、裏側の仕組みを作ることと、
それがどう見えるかを整えることの両方なんだと思います。
次にやること
待ち時間の無反応を少し直したことで、
リネは前よりも会話の流れの中にいるように見え始めました。
ただ、ここまで来ると次に気になってくるのは、
その反応が本当にリネらしいのか、ということです。
考え中の顔。
先に返す短い言葉。
話し終わったあとの余韻。
これらは便利な演出ですが、どの子にも同じように入れればいいわけではありません。
リネなら、どう考えるのか。
リネなら、どう迷うのか。
リネなら、どのくらいの距離感で返すのか。
次は、リネの性格や反応の芯になるSOUL.mdの扱いについて、もう少し書いてみようと思います。
