セッション、ラン、メモリ
Goa-AIにおけるセッション、ラン、メモリの関係を理解する。
Goa-AIはエージェント実行を階層的に整理します:セッションにはランが含まれ、ランにはターンが含まれ、メモリはすべてにまたがります。
階層
セッション
└─ ラン(エージェントの1回の実行)
└─ ターン(メッセージの往復)
└─ ツールコール
セッション
セッションは会話の単位です。ユーザーがチャットを開始すると、セッションが作成されます。セッションは以下を追跡します:
- 一意のセッションID
- 作成タイムスタンプ
- 関連するランへの参照
- オプションのメタデータ(ユーザーID、コンテキストなど)
session, err := rt.CreateSession(ctx, &session.CreateInput{
Metadata: map[string]string{
"user_id": "user-123",
},
})
ラン
ランはエージェントの1回の実行です。ユーザーがメッセージを送信するたびに、新しいランが開始されます。ランは以下を含みます:
- 一意のランID
- 親セッションへの参照
- ステータス(実行中、完了、失敗など)
- タイムスタンプ(開始、終了)
- オプションのラベル(ポリシー用)
result, err := rt.Run(ctx, agentID, prompt, agent.WithSession(sessionID))
メモリ
メモリは会話履歴を超えて持続する長期的なコンテキストです。メモリは以下に使用できます:
- ユーザーの好み
- 学習した事実
- エージェント間で共有されるコンテキスト
// メモリを保存
err := rt.StoreMemory(ctx, &memory.Entry{
Key: "user-preference",
Value: "dark mode",
Scope: memory.ScopeSession,
Session: sessionID,
})
// メモリを取得
entry, err := rt.GetMemory(ctx, "user-preference", sessionID)
実践例
典型的なチャットアプリケーションのフロー:
- ユーザーがチャットを開始 → セッション作成
- ユーザーがメッセージを送信 → ラン開始
- エージェントがツールを使用 → ツールコール記録
- エージェントが応答 → ラン完了
- ユーザーが別のメッセージを送信 → 新しいラン開始
- セッションが終了 → セッション更新
このモデルにより:
- デバッグ:各ランを個別に検査可能
- 監査:すべてのツールコールと決定を追跡
- 再開:中断されたセッションを継続可能