背景
シナリオ: ChatGPTのデザインスタイルに似たチャットボックスで、ユーザーが会話、ファイル解析、その他ドキュメント生成やレイアウトなどを行う軽量ChatAgent。
注意: 本特定AIgentは即時対話と解析に特化し、RAGや長期タスクプランニングは対象外です。
解決すべき課題:
-
- ユーザーの意図解析(intent router)に基づく長期・短期メモリ設計
-
- ユーザーがテキストを引用して追質問する際の短期メモリ設計
-
- 長期メモリの課題を解決する: (ユーザー情報、履歴行動、嗜好、長期目標)|(システムの役割・性格、回答スタイル)
設計方針
-
- 会話履歴全体をリアルタイムでデータレコードとして保存する履歴データベースを設計する。
-
- ユーザー意図解析(intent router)を設計し、LLMがfunction callingで回答可能か判断し、短期メモリや長期メモリが必要か、ファイル再解析が必要か、ChatAgentのシステムロールの性格や回答スタイルを変更するか判断する。
-
- ユーザー要求に応じてシステムロールの性格、回答スタイルなどのプロンプトを生成し、prompt_system.txtに書き込み・更新するAgentを設計する。これによりChatAgentは毎回ユーザーの質問に返答する際にこのファイルを参照して調整できる。
-
- ユーザー意図解析(intent router)に基づき、ファイル解析を伴う対話は長期メモリとして保存する。
-
- 通常はユーザーの直近5ラウンド対話を短期メモリとして保存し、履歴データベースから検索可能にする。
-
- ユーザーがテキストを引用して追質問する場合、そのテキストの登場箇所を履歴データベースから検索し、該当箇所の前後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問題:
ツール呼び出しや使用するツールの制御が可能。
-
- LLM + function callingでユーザー質問に答える。
-
- 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
- ユーザーの質問とLLMの応答を履歴データベースに保存。
- ユーザーの要約文やファイル解析結果も長期メモリ用データベースに保存。
- 短期メモリは履歴データベースから動的かつ一時的に取得。
改善案
- 履歴データベースをベクトルデータベースに変更し、検索を容易にすると共にRAG拡張にも対応可能にする。
- デバッグ時に以下のようなログ出力を追加する。
【Intent】
タイプ:file_followup
【Memoryヒット】
ヒット:23番目の記録
【使用コンテキスト】
- 直近5ラウンドの対話
- ファイル要約
【最終回答ソース】
ファイル内容 + 過去の質問に基づく