キャラチャットで同じプロンプトで3つ台詞だして、良いのをfunction calling的に選択させるプロンプト、効果が多少あるかな程度で、応答速度を犠牲にするまでのものかは疑問。結局は評価も同じモデルでやるから、うまく最良の選択ができてない感じ。論理エラーの検出が一番したいことなのに、それが一番苦手な感じ。ちょっと戦略を立てよう。
https://x.com/EzoeRyou/status/1858130187407519808
そりゃ世界中をくまなく探索するんだよ。当時は探索の楽しみがあったよなぁ。
ただし、問題点はある。
「はい、よろこんで、やらせていただきます。」
と、
「はい、」「よろこんで、やらせていただきます。」
は別の台詞なので、TTSでは後者は不自然な発声になることがある。
これの解決方法も一応ある。
「はい、」を生成、再生したあと、「はい、よろこんで、やらせていただきます。」を生成し、「よろこんで…」から再生すればOK。ただ、特にAI音声合成だとタイムスタンプが得られない(おそらくだいたいは)ので、「はい、」の再生時間を取得し、「はい、よろこんで、やらせていただきます。」からその再生時間の前後で無音領域を検索し、無音領域の後部分だけ再生する、みたいな工夫がいる。そこまでするのはちょい面倒。
LLMキャラチャットのTTS応答速度を上げる方法をちょっと考えていた。
フィラーを自動挿入する方法はありがちなんだけど、フィラーを含めての台詞生成だろ、と思うのでそれは避けたい。
そこで、「生成された台詞の最初の句読点までをフィラーと見做して、先に音声合成する」という案(実は以前から考えてた)を実装した。
「はい、よろこんで、やらせていただきます。」
という台詞がLLMで生成されたなら、
「はい、」の音声をまず生成し、「よろこんで、やらせていただきます。」を音声生成キューに入れる感じ。
これはまあまあイイ感じだ。ストリーム生成される台詞をストリームのままTTSに送る仕組みに今はなってないんで、これでは若干の遅延はあるけど、それでも台詞生成が律速だから十分効果ある。採用。
この場合だと「はい、」という音声データを生成したらキャッシュして次回からキャッシュを利用することで、応答速度を更に上げることも考えられるけど、TTS側が決定論的に音声を生成するならまだしも、AI生成なら毎回違う音声データが得られるんだし、キャッシュしない方が良いと思う。