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, (^^ゞ