Vividiaryの開発を始めた当初、私たちは非常にシンプルで、ある意味ナイーブな仮説を持っていました。それは「自分の1日についてAIに話すことは、空白のページを見つめるよりも簡単だ」というものです。

その点については正解でした。初期のベータテストでは、ユーザーが会話型インターフェースを非常に気に入っていることが分かりました。しかし、14日目に、憂慮すべき事態が発生しました。リテンション曲線が崖から落ちるように急落したのです。ベータテスターの72%が2週目で離脱しました。

私は離脱したユーザーの十数人に連絡を取り、バーチャルコーヒーに誘いました。フィードバックは満場一致で、かつ辛辣なものでした。「まるで重度の短期記憶障害を抱えている人と話しているような気分です。上司が誰なのか、なぜ引っ越しでストレスを感じているのか、そして私の不安のベースラインがどのようなものなのかを、毎日毎日説明し直さなければなりません。」

彼らの言う通りでした。私たちは記憶喪失のAIを作ってしまっていたのです。

もしあなたが、ユーザーを数ヶ月、数年と維持できるAI日記アプリの構築方法を模索しているなら、記憶の問題を解決しなければなりません。ユーザーは、AIジャーナリングのパートナーが自分の感情の歴史を記憶し、パターンを認識し、共に成長してくれることを期待しています。

しかし、日記のためのLLMメモリアーキテクチャを構築することは、単にチャットログを保存するほど単純ではありません。パフォーマンス、コスト、そして厳格なデータプライバシーという複雑なトリレンマを乗り越える必要があります。ここでは、私たちがどのようにVividiaryの記憶を構築したか、どのようなアプローチをゴミ箱に捨てたか、そして現在も取り組んでいるエンジニアリング上のトレードオフについて、率直にお話しします。

記憶喪失のAIジャーナルの問題点

従来のLLMは設計上ステートレスです。新しいセッションを開くたびに、モデルは新しく生まれ変わり、昨日交わした会話を完全に忘れてしまいます。

コーディングアシスタントであれば、これで問題ありません。しかし、ウェルネスやジャーナリングのアプリにとっては、致命的な欠陥です。ジャーナリングは本質的に累積的なものです。価値は単に1日を記録することから生まれるのではなく、数週間、数ヶ月にわたって点と点をつなぐことから生まれるのです。

AIの記憶に取り組む前に、データ入力を修正する必要がありました。ユーザーをいきなり自由形式のチャットに誘導することは摩擦を生んでいると気づいたからです。そこで私たちは、3秒で完了する5グレードの気分チェックイン(最高から最悪まで)と、オプションの感情やアクティビティタグを組み合わせたコアループを設計しました。

この構造化された低障壁の入り口により、会話が始まる前に、ユーザーの現在の状態に関する確実なデータをAIに提供できます。しかし、一度会話が始まると、AIはどうやって今日の「最悪」な気分が、3週間前の火曜日の「悪い」気分と関連している可能性があることを知るのでしょうか?

私たちが却下した手法:ナイーブなコンテキストウィンドウアプローチ

長期記憶が必要だと気づいたとき、エンジニアリングチームは腰を据えて、最も簡単な解決策を検討しました。私たちはそれを「コンテキストウィンドウ・スタッファー(詰め込み屋)」と呼びました。

却下したアプローチ1:プロンプトへの詰め込み アイデアは単純でした。ユーザーが新しいチャットを開始するたびに、過去30件の日記エントリを取得し、システムプロンプトに不可視の状態で貼り付け、「これがユーザーの履歴です。さあ、話してください」と指示するのです。

  1. レイテンシ: 過去の日記エントリの15,000トークンをプロンプトに注入するテストを実行しました。最初のトークンまでの時間(TTFT)は8.4秒に跳ね上がりました。モバイルアプリのUXにおいて、8.4秒は永遠に等しい時間です。テストユーザーの65%が、AIが返答する前に生成を中断しました。
  2. コスト: すべてのやり取りで膨大な冗長テキストをLLMに送信することは、スタートアップにとって経済的な自殺行為です。トークン使用量がユーザーの利用期間とともに線形に増加する場合、クラウドベースのAIコストのバランスをとることは不可能だとすぐに気づきました。
  3. 「中間消失」現象: LLMは、巨大なプロンプトの中間に埋もれた情報を思い出すのが非常に苦手です。AIは最初のエントリと最後のエントリは記憶していても、2週間前の感情的な文脈を完全に無視してしまいます。

却下したアプローチ2:ローリング・サマリー・チェーン 次に、ローリング・サマリー(要約の更新)を試しました。1日の終わりに、AIが新しいエントリを読み、前日の要約を読み、ユーザーの人生に関する「新しい」マスター要約を作成するというものです。

なぜこれをやめたのか:
ニュアンスが破壊されてしまったからです。要約には「イーサンは仕事でストレスを感じている」と書かれますが、特定のベンダーとの10時からの定期的な同期にストレスを感じているといった、具体的で詳細な情報が失われてしまいました。後でAIが私のストレスについて触れようとしても、一般的でロボットのような響きになってしまいました。具体的な記憶から生まれる共感が欠けていたのです。

プライバシー重視のクラウドアーキテクチャの設計

私たちは、トークン数を膨らませたり、非常に機密性の高い個人データのセキュリティを損なったりすることなく、必要なときに正確に「関連する」過去の記憶だけを選択的に取得できるシステムが必要だと気づきました。

さらに、プライバシーに関しては妥協できませんでした。Vividiaryはプライバシーファーストのプラットフォームです。シームレスなクロスデバイス同期と高度なAI処理を実現するためにデータをクラウドに保存していますが、このデータは最高レベルの暗号学的配慮をもって扱っています。すべては転送時および保存時に暗号化されています。

私たちが代わりに構築することを選択したのは、感情的な文脈に特化して調整された、ベクトルベースの検索拡張生成(RAG)アーキテクチャです。

ステップ1:記憶形成の最適化 私たちは早い段階で重要な製品上の決定を下しました。それは、広大で構造化されていないチャットログを保存しないということです。

VividiaryのAIと話すとき、会話は単なるツールに過ぎません。それは会話を構造化するエージェントとして機能します。チャットが終わると、AIは会話を統合し、一人称の日記のドラフトを生成します。「今日、私は~で圧倒された気分だった…」

ユーザーは、このドラフトを確認、編集、承認します。これにより、ユーザーは自分の物語の著者であり続けることができます。私たちのアーキテクチャにとってさらに重要なのは、保存する「記憶」が、40行にも及ぶ乱雑なチャットボットのやり取りではなく、クリーンで構造化された、ユーザー承認済みの物語であるということです。

ステップ2:ベクトル埋め込み ユーザーがエントリを承認すると、そのテキストを埋め込みモデルに通します。埋め込みモデルとは、テキストを読み取り、巨大で多次元の地図上に座標を割り当てる機械だと考えてください。

「仕事のストレス」に関するエントリは地図の一箇所に集まり、「家族の喜び」に関するエントリは別の場所に集まります。私たちはこれらの数学的座標(ベクトル)を、クラウドデータベース(Supabase)に安全に保存します。

ステップ3:文脈的検索 さて、ユーザーがある火曜日に「最悪」な気分を記録し、「不安」というタグを付けたとします。

AIが挨拶をする前に、システムはその現在の状態をベクトルに変換し、ユーザーの暗号化されたクラウドデータベースから数学的に最も近い過去のエントリを検索します。過去2ヶ月間で、ユーザーが同様の不安を感じた3つのエントリを見つけ出します。

私たちは、その3つの非常に関連性の高いエントリのみをAIのプロンプトに注入します。

結果はどうでしょうか?AIは即座に(低レイテンシで)返答し、コストはわずか数セント(低トークン使用量)で済み、こう言います。「今日は不安を感じているようですね。先月、四半期レビューの直前に同じような気分だったことを覚えています。今日の不安は仕事に関連していますか、それとも別のことでしょうか?」

これこそが魔法の瞬間です。AIがチャットボットからパートナーへと変わる瞬間です。

ベクトル検索が長期的な感情パターンを浮き彫りにする方法

このアーキテクチャは、毎日のチャットを改善するだけでなく、アプリの分析バックエンド全体を強化します。

ユーザーの感情状態を数学的にマッピングしているため、それを可視化することができます。ここでフリーミアムモデルの出番です。すべてのユーザーは、無制限の気分記録と1日3回のAI会話を無料で利用できます。しかし、より深く掘り下げたいユーザーのために、プレミアムティア(月額2.99ドルまたは年額11.99ドル)では、高度な視覚的インサイトが解放されます。

ベクトルデータを使用して、ユーザーの最高の気分と最悪の気分にどのような活動やトピックが相関しているかを正確に示すバブルチャートやヒートマップを生成します。このようなAIによる感情パターン認識は、燃え尽き症候群や慢性的なストレスに悩むユーザーにとって、ゲームチェンジャーとなります。彼らは何が自分を消耗させているのかを推測する必要はなく、データがそれを示してくれるのです。

また、この記憶をゲーミフィケーションのループに直接組み込んでいます。Vividiaryには、30日間で進化する「クレイ(粘土)」キャラクターが登場します。気分を記録し、AIがパターンを学習するにつれて、クレイキャラクターは視覚的に進化し、メンタルウェルネスの旅を具体的かつゲーム化された形で表現します。クレイの視覚的な状態は、ベクトルデータベースから抽出された感情分析によって直接影響を受けます。

現在も取り組んでいるエンジニアリング上のトレードオフ

率直にお話しすると約束したので、このシステムが完璧だとは言いません。現代のウェルネスアプリの技術スタック2026を構築するには、絶え間ない妥協が必要です。現在のスタック(フロントエンドにReact NativeとExpo、PostgreSQL/ベクトルデータベースにSupabase、ID管理にFirebase Auth、サブスクリプション管理にRevenueCat)は非常に強力ですが、課題も伴います。

トレードオフ1:セマンティック検索 vs. 時系列の現実 ベクトル検索は「テーマ的に」類似したエントリを見つけるのには優れていますが、時間という概念を本質的に持っていません。

初期のテストでは、ユーザーが「犬のことで悲しい」と言ったとき、AIは昨日愛犬が獣医に行ったエントリではなく、4年前に以前飼っていた犬が亡くなったときのエントリを取得してしまうことがありました。

これを修正するために、ハイブリッド検索システムを構築する必要がありました。現在では、非常に重要な古いエントリが抽出される可能性を残しつつ、最近のエントリを古いエントリよりもわずかに高く評価する減衰アルゴリズムを使用しています。これらの重みの調整は、エンジニアリングチームにとって毎週続く戦いです。

トレードオフ2:共感 vs. 臨床的観察の境界線 AIが完璧な記憶を持つと、時に不気味に感じられたり、過度に臨床的になったりすることがあります。ベクトル検索の最初のイテレーションでは、AIは記憶していることを証明するために、過去のトラウマを誇らしげに列挙していました。これは耳障りなものでした。

私たちは、感情AIのUXデザインに焦点を当てるために、システムプロンプトを完全に刷新する必要がありました。過去の記憶を暗唱すべきトリビアの事実としてではなく、トーンの「文脈」として使用するようにモデルをトレーニングしました。優れた感情主導の製品設計とは、AIが履歴を読み上げる探偵ではなく、あなたの歴史を記憶している協力的な友人のように感じられることだと気づいたのです。

今後の展望

現在、ベクトル埋め込みと並行して「エンティティ抽出」を実験しています。これは、システムがあなたの人生における重要な人物、場所、ペットのリストを具体的に学習し、安全に保存することで、パートナーや親友の名前を絶対に忘れないようにするものです。

記憶を持つAIを構築するのは困難です。プライバシーを尊重し、超高速で動作し、人々が自分の心を知るのを真に助けるAIを構築するのは、さらに困難です。しかし、AIが個人的なことを記憶し、それを使って慰めを提供するという最初の「コールバック」の瞬間を経験したユーザーのリテンション指標を見ると、アーキテクチャ上の頭痛の種もすべて報われると感じます。