軽量AIAgentにおける長短期メモリの設計と考察

長短期メモリ

Posted by LuochuanAD on March 28, 2026 本文总阅读量

背景

シナリオ: ChatGPTのデザインスタイルに似たチャットボックスで、ユーザーが会話、ファイル解析、その他ドキュメント生成やレイアウトなどを行う軽量ChatAgent

注意: 本特定AIgentは即時対話と解析に特化し、RAGや長期タスクプランニングは対象外です。

解決すべき課題:

    1. ユーザーの意図解析(intent router)に基づく長期・短期メモリ設計
    1. ユーザーがテキストを引用して追質問する際の短期メモリ設計
    1. 長期メモリの課題を解決する: (ユーザー情報、履歴行動、嗜好、長期目標)|(システムの役割・性格、回答スタイル)

設計方針

    1. 会話履歴全体をリアルタイムでデータレコードとして保存する履歴データベースを設計する。
    1. ユーザー意図解析(intent router)を設計し、LLMがfunction callingで回答可能か判断し、短期メモリや長期メモリが必要か、ファイル再解析が必要か、ChatAgentのシステムロールの性格や回答スタイルを変更するか判断する。
    1. ユーザー要求に応じてシステムロールの性格、回答スタイルなどのプロンプトを生成し、prompt_system.txtに書き込み・更新するAgentを設計する。これによりChatAgentは毎回ユーザーの質問に返答する際にこのファイルを参照して調整できる。
    1. ユーザー意図解析(intent router)に基づき、ファイル解析を伴う対話は長期メモリとして保存する。
    1. 通常はユーザーの直近5ラウンド対話を短期メモリとして保存し、履歴データベースから検索可能にする。
    1. ユーザーがテキストを引用して追質問する場合、そのテキストの登場箇所を履歴データベースから検索し、該当箇所の前後3ラウンドの対話を短期メモリとして保存する。

アーキテクチャ図

アーキテクチャ詳細説明

Intent Layer (LLM)

ユーザー入力に対してLLMで意図解析を行い、QA、ファイル解析、メモリ検索、システムロール設定に分類。

構造化されたJSON出力は以下:

intent_layer = {
	type: "qa / file_analysis / memory_query / config_change",
	need_memory: true/false,
	need_file: true/false
}

Control Layer

ルールベースの判断により機能モジュールを呼び出す。

擬似コード:

intent = analyze_intent(user_input)

if intent["need_memory"]:
    memory = retrieve()

if intent["need_file"]:
    file = analyze()
......

QA問題:

ツール呼び出しや使用するツールの制御が可能。

    1. LLM + function callingでユーザー質問に答える。
    1. Tool Registry + ルールマッチング(ツール意図とユーザー入力に基づくツール選択)

file_analysis

openAIでは直接ファイルとユーザー入力をパラメータとしてAPI呼び出し可能。

memory_query

メモリモジュール内の長期・短期メモリを検索。

  • 通常、短期メモリは直近3~5ラウンドの対話。
  • ユーザーがテキストを引用して追質問する場合、履歴データベース上でそのテキストの位置を検索 → 前後3ラウンドのコンテキストを取得。
  • 短期メモリのラウンド数はtoken制限(例: tokens < 3000)に基づく。

config_change System_Agent (LLM)

システムAgentを呼び出し、ユーザーの要求に沿った性格・回答スタイルを抽出し、System_promptの動的プロファイル部分をリアルタイム更新。System_Prompt = base_prompt + dynamic_profile。

LLM構造化JSON出力例:

dynamic_profile = {
  "tone": "formal",
  "style": "concise",
  "persona": "technical expert"
}

Context Builder Layer

プロンプトのコンテキスト管理。プロンプト構造やサイズを動的に変更し、LLMのノイズ低減とToken節約に貢献。

Memory Update Layer

  1. ユーザーの質問とLLMの応答を履歴データベースに保存。
  2. ユーザーの要約文やファイル解析結果も長期メモリ用データベースに保存。
  3. 短期メモリは履歴データベースから動的かつ一時的に取得。

改善案

  1. 履歴データベースをベクトルデータベースに変更し、検索を容易にすると共にRAG拡張にも対応可能にする。
  2. デバッグ時に以下のようなログ出力を追加する。
【Intent】
タイプ:file_followup

【Memoryヒット】
ヒット:23番目の記録

【使用コンテキスト】
- 直近5ラウンドの対話
- ファイル要約

【最終回答ソース】
ファイル内容 + 過去の質問に基づく