春告げ抹茶ホイップ

LLM で AI キャラクターとか、その記憶システムとか

個人的に AI キャラクターみたいなのが気になっている。 ここで言う気になっているのは、アプリとしてリリースされている AI キャラクターと会話する系のものではなくで、自分で AI キャラクターを実装してみたりしてみたいという話である。

AI をキャラクターとして扱って、人類の友達になれる AI というのを考えるのは楽しい。 今後、AI をパートナーとするようなそういうことが行われるようになっていくなら、その AI は個性をもってキャラクターとして親しみ深いものだとよいと思う。

LLM が平均的な当たり障りない回答をすることに対して、ちゃんと外部から情報を与えるともう少しマシな文章を作りそうだ、という話を以前に記事に書いた[1]

LLM にキャラ付けをするのは ChatGPT がでた当初からプロンプトで命令してワンショットでキャラ付けみたいなのはよくやられていた。 しかし上記を踏まえると、キャラクターを決定づけるのは、そういうアニメっぽい口調の調整とかもあるだろうけれども、それとは別にメモリー機能的な経験を積み重ねることではないかとも思う。 経験をどのように保存し、どのように引き出せるようにするかというのは、そのキャラクターらしさを作る上で重要そうな気がする。

そのキャラクターが手に入れた経験などの情報から回答を作った方が、何もなしに LLM から回答を引き出すより人間味が感じられる回答になりそうな気がする。 そのキャラクターはどういうことを経験したか、どういう会話を過去にして、どういうことを考えたか、みたいなのの積み重ねこそが、LLM の平均的な回答しかしないという不気味さに対する解決策になるのではないだろうか? 記憶を積み重ねてユーザーと様々な体験をしていて、それらの体験を元に応答を作れば、一般の LLM が作り出した応答よりはるかに人間味を感じられるかもしれない。


自分だったら AI キャラクターをどうやって作るかな、というのを考えたりするのが楽しくて適当な妄想を繰り広げたりしている。 例えば 1 つの LLM 上で AI キャラクターを動かし続けないで複数の LLM で 1 つのキャラクターを構築するという仕組みを考えたりしている。

具体的には、深層意識の LLM と表層の応答用 LLM みたいなのを分けて、応答用 LLM はユーザーの入力のほかに、深層意識が持ち上げてきた意識や記憶を元に応答を作成するようにする。 深層意識は、表層で行われている会話を常にチェックして非同期でベクトル検索を投げ続けて、メモリーに入っている記憶を検索し続けて、その中からある程度のランダム性も含めつつ現在の会話に関係しそうなことを表層意識に送りつける。 みたいなことを考えている。 うまくいくかは知らないが。 こうやると、1 つのチャット履歴でひとりで Chain of thought 的な独り言を言わせて思考をさせるだけでなく、記憶がふと思い出させられる感じとか作れたりしないだろうか。

現状の ChatGPT とか、あるいは OSS の Claude Code にメモリー機能を持たせる系はいろいろあるけど、RAG 的なので検索してくるとか、そのメモリーをグラフ的な構造にするとか、保存方法が色々練られていたりするようではある。 さらにそれを LLM 側が要求したときに関連することを検索するだけではなく、関係しそうなことを外部から注入するようにしつつ、関係するかの判断をメインのコンテキストを汚さないようにしつつ裏で LLM を使って別途判断するようなイメージ。

まあ、こういう個人がサクッと思いつくアイデアは誰かが試してそうである。 後で似たようなシステムを考えている研究とかが見当たらないかは調べてみよう。


LLM の記憶系で調べた記事とかをメモしておく。 Mem0 とか A-Mem とか、LLM に長期記憶を与えるための試みは色々なされている。


世界の理解とかについて。

「世界モデル」って用語は強化学習とかの文脈で、報酬から完全に自発的に学ばせるのではなく、外の報酬を与えてくる世界がどうなっているかについて理解させるためのレイヤーを持たせた深層強化学習システムとかで聞いたことあるワードな気がするけど、ここで言う「世界モデル」はそれの話かなあ。


上記で議論した記憶だけではなく、口調とか性格的なキャラクターも色々な試みがなされている。 キャラクター性という意味ではワンショットのプロンプトだけでなく LoRA とかその派生も色々あるようだ。


AI キャラクターとかを LLM で作り出すと、自分で LLM に独自のアライメントとかかけたり LoRA で色々弄りたくなるかもしれない。 DGX Spark 的なのが欲しくなるかなあと思っていたけど、OSS モデルに追加の LoRA とかのトレーニングをしたいだけならひとまずクラウドサービスでもよさそう。

Together AI とかだと SFT とか DPO とかをかけたりできる。 LoRA で学習させるとかもできそう。 OSS のオープンウエイト系のモデルに追加の解答の傾向とかを追加で訓練させる、みたいなことはクラウド上で良い感じにやってくれそう。

もちろん個人の PC 上で動くというのはクラウドで動かすのとは別の良さがあって、勝手に削除されたりしないだろうしそういうのは良いと思うのだけど、普通に DGX Spark はなんだかんだ計算速度は遅そうだしなあ。


ベクトル検索データベースにもいろいろある。

https://qiita.com/syukan3/items/8ebc7e185ff79b937957 https://zenn.dev/kun432/scraps/ed65b4ba464ef8

以下のシリーズの記事がベクトル検索について用語とか簡単な中身含めて分かりやすくよかった。


いつか LLM で AI キャラクター的なのを自分でも作ってみたい気もするので、色々調べているが、まあちょっとすればすぐにどんどんいろんな研究とかが出てくる分野でもあるので、今すぐ欲しいわけでもなければ自分でアーキテクチャを提案した創始者になりたいわけでもなければ、もう 1、2 年待ってその間に出た文献とかを見て知見を集めて作った方が自分で試行錯誤するより効率が良いかもしれない。

Series

References

  1. 1. LLMに学習された知識、外部から与える知識

Cited By