初めに...
皆さんこんにちは。
個人開発をしている、”好奇心のかたまり”と、申します。
今回は、僕が人間同士みたいに、対話をすることができるAIを作ろとしていた時に、思いついたアルゴリズムを紹介しようと思います。
注意:世界初じゃない可能性もあります。
「先に思いついていた!」「私のアルゴリズムだ!」
という方は、コメントで教えてください
突然ですが皆さん "AI(LLM)" 使ったことありますか?
まぁ、無い人なんてほぼいませんよね。
僕も、
- コーディング
- 調べ物
- ちょっとした相談
など、様々なことに使用しています。
ですが、一つ ”心残り” なことがあります。
それは、、
「AIからは話しかけてくれないこと」 です。
人との会話を思い浮かべてください。
私たちは、会話をする時、互いに話しかけます。
ですが、AIとの会話はどうでしょうか?
ChatGPT、Gemini、Claudeが、自らあなたに話しかけることはあるでしょうか?
いえ。ありません。
そこで、僕は考えました。
AIから話しかけてくるアルゴリズムはないのだろうか
既存のアルゴリズム達
僕は初めに、既存の、AIから話しかけてくれるアルゴリズムがないかを探しました。
すると、この、”2つのアルゴリズム”が存在しました。
1. トリガー連動型アルゴリズム(イベント駆動)
このアルゴリズムは非常に単純です。
条件を満たしたら、AIを動かす。
ただそれだけです。
例えば、
1.特定の時間になった時 → 「おはよう」 と言う
2.センサーが反応したとき → 「こんにちは」 と言う
3.特定の場所に到着したとき → 「到着しました」 と言う
などです。
今回の、AIに組み込む場合だと、1番が使えそうですね。
このアルゴリズムのメリットは以下のとおりです。
ですが、デメリットが大きいです。
AI(LLM)に組み込む場合だと、頻繁に自ら発言することは難しそうです。
そこで、もう一つの方法を見てみましょう。
自律型エージェント
このアルゴリズムも、考え方は単純です。
”常に”発言するべきかを考える
ただこれだけです。
このプログラムのメリットは以下の通りです。
ですが、このアルゴリズムのデメリットは、 ”激ヤバ” です
まぁコレぐらいならなんとかなりますが、
これが一番マズイです
僕みたいな個人開発者、ましてや中学生に24時間GPUをぶん回すお金などありませんっ
そこで、僕の考えたアルゴリズムの登場です。
このアルゴリズムなら、
といったことが可能になります。
名付けて、、
Secondary Keyword Scheduler 略してSKS
とでも呼ぶとしましょう。
コレは表向きの名前で本当は別の意味です^^
それでは、このアルゴリズムの説明をしましょう。
このアルゴリズムの肝は、
未来の発言を事前に用意(予約)しておくこと。
です。
どういうことかを説明しましょう。
例えば、自律型エージェントの例を見てみましょう。
User:ただいま
AI:おかえりなさい!今日もお疲れ様!
このような会話をしたとします。
しかし、今日のUserは、気分が落ち込んでて、いつもならAIとお喋りを楽しむところなのですが、一向に口を開きませんでした。
なので、AIのエージェントは口をひらきます。
AI:大丈夫?元気無い?
このような流れだったとします。
確かに、この自律型エージェントは、Userの変化に気づく事ができました。
しかし、この「沈黙の間」が問題です。
AIは「今話しかけるべきか?」を判断するためだけに、この間、何度も高価なGPUを起動して思考ループを回し続けているのです。
これでは電気代だけで破産してしまいます。
そこで、僕の考えたアルゴリズムが活躍します。
このアルゴリズムは、先程も言った通り
未来の発言を事前に用意(予約)しておく
アルゴリズムです。
具体的には、以下の流れになっています。
先程の例をなぞって見てみましょう。
User:ただいま
AI:おかえりなさい!今日もお疲れ様!
画面上の見た目は先ほどと全く同じですが、僕のアルゴリズムでは、この瞬間にすでに ”見えない圧倒的な差” が出ています。
それは、、
AIが「おかえりなさい!」と出力したまさにその一瞬(GPUが動いている間)に、裏で「未来の発言(大丈夫?元気ない?)」まで同時に生成し、確定させているのです。
未来の発言を確定させたあと、このアルゴリズムは驚くほど「エコ」になります。
やることは単純
1,GPUが「おかえりなさい!」と同時に
「もしn分反応がなければ:大丈夫?元気ない?」
と、発言するコードを生成。
2、生成したら、GPUを別のユーザーの処理や別の仕事へまわす。
3、n分経ったら、貧弱なCPUをつかったサーバーからメッセージを送信する
これが、このアルゴリズムの本当に美しいポイントです。
必要なのは、10円玉で動くような「貧弱なCPUのタイマー機能(タスクスケジューラー)」だけ。
CPU側は、裏で10分間のカウントダウンを始めるだけです。
この間、電気代を爆食いするGPUは1ミリも動きません。
そして、ここで運命の分岐点が訪れます。
パターンA:本当にユーザーが沈黙した場合(10分経過)
CPUがn分経ったことを検知します。
↓
CPUは「大丈夫?元気ない?」というテキストを、ユーザーに送信します。
↓
それを見てUserは、「AIが自分の沈黙を察して、自発的に話しかけてくれた!」と思う(?)
Happy End...(?)
というパターン。
もう一つは、、
パターンB:ユーザーがすぐ返信してきた場合
n分経つ前にUserが何かを発言した。
↓
セットしていたタイマーと発言を破棄する。
↓
「大丈夫?元気ない?」の発言記憶を消し去る
↓
和気あいあいと話す
Happy End...(2回目)
という感じです。僕のアルゴリズム、理解していただけたでしょうか?
SKSのメリット・デメリット
このSKSアルゴリズムのメリットは、以下のとおりです。
- 1,より自然なタイミングで発言が可能
- 2,トリガー連動型アルゴリズムと一緒に使える
- 3,プロンプト(Function Callingを追加)を変えるだけで実装可能(おそらく)
- 4,GPUコスト(電気代・サーバー代)が爆発的に安くなる(自律型エージェント比較)
コレだけ見ても、非常に理にかなっていることがわかるのでは無いでしょうか?
では、逆に、デメリットは何でしょう。
- 使用しないセリフまで生成してしまう。(話しかけの ON/OFF 機能の追加で対応可)
- 急な状況の変化に対応できない(地震情報など) ← (トリガー連動型アルゴリズムとの組み合わせで対応可)
- 未読スルーの理由を特定できない(電話中だったのに、「大丈夫?」とメッセージが送られてくる) ← (もっと汎用的なメッセージを考える(何してるの?など))
最後に...
僕の記事を閲覧くださり、ありがとうございました!
もし、なにか意見等ございましたら、ご連絡いただけますと助かります。
このアルゴリズムで、オープンソースが発展することを、心より願っています。
O P E N S O U R C E
W I L L P R E V A I L !
~オープンソースに栄光あれ~