会話はターンとターンのあいだどこにあるのか
1 ターンが自己完結したリクエストなら、会話の残りはどこにあるのか。各ターンで何が保存され何が決して保存されないか、逐語ウィンドウとは何か、古いターンがどうやって「ちょうど一度だけ」ローリング要約に畳み込まれるか、1 ターンでもなお入りきらないときに何が起きるか、そしてどの事実がセッションより長く生き残るか。
1 ターンは自己完結した 1 リクエストです。モデルはターン間に何も保持せず、リクエストに入っていないものはモデルにとって存在しません。すると当然の疑問が出てきます——モデルが何も覚えていないなら、会話はどこにあるのか。
私たちの側に、3 つの層として、それぞれ違う寿命で置かれています。ターンは毎回そこから組み立てられ、層を分けているのは重要度ではなく、どれだけ過去まで届くかです。
3 つの層
何が保存され、何が決して保存されないか
各ターンが書き込むのはちょうど 2 行です。訪問者が言ったことと、エージェントが答えたこと。どちらもそのユーザー固有の鍵で保存時に暗号化され、他のコンテンツと同じ扱いになります(設計として privacy)。
書き込まないものも同じく意図的です。モデルが行ったツール呼び出し、それらが返した生のペイロード、その途上の中間推論——いずれも永続化しません。それらは 1 ターンのあいだ、1 つのリクエストの中に存在し、そして消えます。残る会話記録は実際に交わされた言葉であり、だからこそ保存された会話は、機械の計算過程をかき分けなくても人が読めます。
逐語ウィンドウ
直近のターンは一言一句そのままリクエストに入ります——現在は最後の 12 メッセージです。エージェントが会話に居るように感じられるのはこの層のおかげです。指示語が解け、訂正が効き、「2 つ目」が何かを指します。
ウィンドウをトークン予算ではなく件数で切っているのは意図的です。固定の件数は予測できます——エージェントの手元に何が残るかを推し量れます。そのウィンドウ自体が予算に収まらないときは、リクエスト側の優先度が引き継ぎ(何から落とすか)、それらのメッセージのうち最も古いものから外れます。
ローリング要約
ウィンドウより古いものは捨てられません。ウィンドウが保持できる数を超えてメッセージが溜まった時点で、超過分——最も古いもの——がセッションの要約へ畳み込まれ、カーソルがそれらを越えて進みます。
このカーソルこそ知っておく価値のある部分です。要約は毎回会話全体から作り直されるのではなく、増分で伸ばされます。既存の要約と、いまウィンドウから外れたメッセージから新しい要約が作られ、そのメッセージが二度と要約されることはありません。これが、長い会話の維持コストが上がり続けないようにしているものであり、要約が書き換えられるのではなく積もっていく理由でもあります——初期のコンテキストは最初に記録されたままの姿で残ります。
要約には上限(数百トークン)があり、セッションに保存され、他と同じく暗号化されます。リクエストの中では、履歴の上に置かれる 1 ブロックです。
1 ターンでもなお入りきらないとき
ここまでの 2 つは定常状態の仕組みです。単独のターンがそれ自体で大きすぎることは依然としてあり得ます——非常に長い質問、貼り付けられた大きな文書、ナレッジベースがそのターンに異例なほど多く寄与した場合など。
そのときリクエスト側の予算はまず最も古い履歴を落としますが、落としたターンは単に取り除かれるのではなく、そのターンの要約ブロックへ圧縮されます。この違いは重要です。落とすことは内容を黙って失うことであり、圧縮することは中身を残して言葉遣いだけを失うことです。リクエストを収めるために何かがこっそり削除されることはありません。
セッションより長く生き残るもの
ここまでの層はすべて 1 つの会話に属します。属さないものが 2 つあります。
- 顧客についての長期的な事実——ターンが起きるたびに導き出され、重複が排除されるので同じ事実は積み上がるのではなく更新され、取り出すときは新しさではなく関連度で選ばれます。それらはセッションをまたぎ、チャネルをまたいでその人に付いていきます。導き方と何が想起されるかは顧客ごとの記憶にあります。
- 短いプロフィール——直近のメッセージから定期的に更新され、事実というより恒常的な背景を運びます。
ですから新しいセッションは本当に新しい会話です——履歴も要約もありません——が、記憶喪失ではありません。エージェントがその人について学んだことは残っています。
これがあなたにとって何を意味するか
- セッションとは「同じ session id を保ち続けている範囲」です。 ウェブウィジェットは訪問者ごとに 1 つ保持し、API の呼び出し側は自分で決めます。新しく始めることは、顧客について学んだことを失わずに、意図的に話の筋を手放す方法です。
- 長い会話は突然ではなく緩やかに劣化します。 最も古いターンは中身より先に言葉遣いを失い、完全に消える前に中身を失います。
- エクスポートや記録に見えるのは会話であって、機械の仕組みではありません。 ツールの往復がそもそも保存されていないので、読み返せるのは人が読んだであろうものです。