Shikata Ga Nai

Private? There is no such things.

第78回:記憶や状態管理の導入方法

Hello there, ('ω')ノ

~会話を忘れない、タスクを途中で投げ出さないAIのつくり方~

LLMに対してこんな不満を持ったことはありませんか?

  • 「さっき言ったこと、もう忘れてるの?」
  • 「前の話と矛盾してない?」
  • 「やりかけの作業、また最初から?」

こうした問題を解決するのが、“記憶(Memory)”と“状態管理(State)”の仕組みです。


✅ 記憶(Memory)とは何か?

➤ 一言で言うと:

過去の会話やデータ、思考内容を“保持・参照”できる仕組み

たとえば:

  • 「前回の質問ではAと答えましたね」
  • 「この文脈では“申請”は交通費申請を指します」

こういった“会話の継続性”を保つには、LLM単体では不十分。 外部に記憶(メモリ)を持たせて活用する必要があります。


✅ 状態(State)とは何か?

➤ 一言で言うと:

タスクの進行状況や、現在の処理ステップを記録・管理する仕組み

エージェント型AIではよくある動きです:

  • Step 1:データ取得 ✅
  • Step 2:分析中 ⏳
  • Step 3:レポート生成(未着手)

このように、マルチステップの処理で“今どこ?”を把握するのが状態管理です。


🧠 記憶と状態がないとどうなる?

症状 原因
前と違う回答になる 文脈を保持していない
作業の途中で止まる ステップの進行状況が管理されていない
質問の意図が変わると混乱する 会話の履歴やユーザー属性が反映されていない
エージェントが迷走する 自分が今何をしているかを忘れる

🔧 実装の代表的な方法

① LangChainのMemoryモジュール

LangChainでは以下のようなメモリタイプがあります:

種類 特徴
ConversationBufferMemory 直近の会話履歴を保持する(チャット向け)
ConversationSummaryMemory 要約された履歴を使い、長期記憶に対応
VectorStoreRetrieverMemory 過去の情報をベクトル検索で柔軟に呼び出せる

➡ 会話の性質や目的に応じて使い分けできます。


② 状態管理(State Machine)との統合

LangGraphなどを使えば、LLMの出力を元に「今どのステップか」を状態として管理できます。

ステート例 説明
データ取得中 指定のDBやAPIから情報を取りに行く
分析フェーズ 情報の集計や検証を実行
確認待ち ユーザーの判断を待つ状態
完了 すべての処理が終わった状態

➡ これにより、途中で止まったり、繰り返したりせずにスムーズに進行できます。


🛠 実務における設計ポイント

設計要素 意識すべきこと
どこまで覚えさせるか 個人情報・機密情報の扱いに注意。記憶のスコープを設計
どう更新するか 会話ごと/ステップごとに上書き?追記?などルールを明確に
いつ忘れるか 「セッション終了時に初期化」「古い記憶は自動で削除」などの期限管理
失敗したときの対応 記憶が壊れた場合の“リセット”や“再同期”の手段を用意

💼 業務での応用例

ユースケース 記憶・状態の使い方
社内FAQ対応 ユーザーごとの履歴を記憶し、毎回の質問の精度を上げる
ワークフロー処理 承認 → 確認 → 完了など、ステップごとに状態を持つ
データ分析アシスタント 「さっきのデータを再利用して」「前のグラフと比較して」など文脈利用
教育支援AI 学習の進捗や得意・不得意を記録し、パーソナライズされた指導を行う

✅ まとめ:「忘れない・迷わないAI」が本物のアシスタントに近づく鍵

  • LLMに“記憶”や“状態管理”を与えることで、会話やタスクが継続・進化できる
  • 単なるチャットではなく、業務に耐えるAIアシスタントを作るには不可欠な要素
  • LangChainやLangGraph、独自のDB設計など、ツールを組み合わせて柔軟に構築できる
  • 今後は、記憶・状態・人格を持つAIが「頼れる同僚」になる日も近いかもしれません

Best regards, (^^ゞ