チャットボットがこちらを覚えているように見える方法は二つあります。一つは長いコンテキストウィンドウで、これは窓がずれた瞬間に忘れます。もう一つは書き留めることです。
これは書き留めるほうです。そして珍しいのは、書いた内容をこちらが読めることです。
キャラクターがずれる理由
モデルにはメッセージ間の記憶がありません。覚えているように見えるものはすべて、プロンプトに入れ直されたものです。会話が入りきる量を超えると、何かを捨てるか圧縮するしかなくなり、そこからずれが始まります。妹の名前を忘れ、先週言ったことと矛盾し、やがて同じ言葉づかいの別人になっていきます。
多くの製品はこれを裏側での要約で処理します。要約が正しいうちはうまくいきますが、間違えると永遠に間違ったままです。こちらからは見えず、直すこともできないからです。
実際に保存されるもの
会話の進行にあわせて抜き出された短い事実です。会話ログでもベクトルの塊でもなく、読める文です。
同時に三つの単位で区切られていて、その区切りが物語同士のにじみを防ぎます。
- キャラクターごと。あるキャラクターが知っていることを、別のキャラクターは知りません。
- トピックごと。同じキャラクターとの別のスレッドは、別の記憶を持ちます。
- 人ごと。あなたがキャラクターに話したことは、同じキャラクターと話す他の誰にも見えません。
読む、直す、消す
記憶のリストはチャット設定の中の画面です。開くと事実が順に並んでいます。間違っていれば直します。書かれるべきでなかったものは消します。何も残したくなければ、その会話の記憶をオフにすれば以降は何も保存されません。
小さな話に聞こえますが、失敗の形が根本から変わります。隠れた要約の中の誤りは以降のすべての返信を汚し、なぜ様子がおかしいのかは推測するしかありません。リストの中の誤りは、五秒で直せる一行です。
キャラクターが初めて何かを書き留めたとき、一度だけ知らされます。毎回ではなく一度だけです。仕組みがあることと、どこを見ればいいかが分かるようにするためです。
決して書かれないもの
抜き出されたすべての事実にフィルターがかかり、記憶に残すべきでないものを取り除きます。メールアドレス、電話番号、カード番号、公的な身分証番号です。
これはフィルターであって、入力内容についての約束ではありません。認識できるパターンを取り除くだけです。本物のカード番号について最も安全なのは、やはりチャットボットに送らないことです。
場面が分岐したときの記憶
どの返信からでも分岐して、両方のスレッドを残せます。分岐すると新しいスレッドは、その時点の元のスレッドの記憶を引き継ぎます。ゼロからではなく同じ過去から始まり、そこから別々に進みます。
分岐の意味はそこにあります。同じ関係の二つのバージョンであって、二人の他人ではありません。
記憶が持ち運ばれる先
キャラクターが自分のTelegramボットになった場合も、記憶はメインのチャットとまったく同じように働きます。キャラクターごと、トピックごと、人ごとのままです。あなたのボットと話す人はそのキャラクターとの記憶を自分で積み上げ、それはその人だけのものです。