Skip to main content

意思決定メモリシステム

更新 2026-07-14 6分で読めます GitHub で編集 ↗

エージェンティックループエンジニアリングの出発点は観察です — ループが回るたびに観察が積み重なり、積み重なった観察が学習の原料になります。意思決定メモリはその観察対象をコードではなく ユーザーの選択 に拡張した層です。

情報
一行要約: 意思決定メモリはユーザーの選択を記憶し、今後の類似した状況でパーソナライズされた推奨を提供します。

システム概要

意思決定メモリ (Decision Memory) は MoAI-ADK の 長期学習層 です。AskUserQuestion ラウンドでユーザーの選択を観察し、今後の同じ意思決定ポイントで統計的多数の選択を基に適応型の推奨を提供します。

重要なのは方向です。システムが押したいデフォルト値を (推奨) で包むのではなく、ユーザーが実際に繰り返し選んできたもの が推奨になります。

核心原則

原則説明
観察ベースユーザー選択の統計的多数を学習 (ポリシーのデフォルト値ではない)
透明性推奨の根拠を常に明示 (cold-start 状態を含む)
自律性ユーザーは推奨をいつでも拒否可能
適応型の強度熟練度に応じて推奨の強度を自動調整

4 つの構成要素

1. 3-Tier Memory Layer (メモリ階層)

意思決定メモリは 3 つの階層で構成されます。下に行くほど長く残ります。

L0: Immediate (即時メモリ)

  • 範囲: 現在のセッション内
  • 用途: 今しがたユーザーが選んだオプションの参照
  • 持続性: セッション終了時に消失

L1: Session Span (セッション範囲メモリ)

  • 範囲: 同じプロジェクトの直近 3 セッション
  • 用途: 直近の選好に基づく推奨
  • 持続性: .claude/projects/{hash}/memory/ 自動メモリ

L2: Long-term (長期メモリ)

  • 範囲: すべてのセッション (無制限)
  • 用途: 統計的多数の学習、長期トレンド
  • 持続性: MEMORY.md + topic ファイル (ユーザー管理)

2. Adaptive Recommendation Placement (適応型の推奨配置)

推奨配置は 5 原則で構成されます (SSOT: .claude/rules/moai/core/askuser-protocol.md § Recommendation Placement Principles)。

原則 1 — 放出タイミング (情報利得の整合)

オーケストレーターが近づいてくる意思決定の不確実性 p を推定するとき、p ≈ 0.5 (Fisher information I = p(1−p) が最大となる決定境界) で AskUserQuestion によりその質問を放出します。p が 0 または 1 に近いとき (ほぼ確実) は統計的多数のオプションで自動解決し、質問を省略します。

原則 2 — 質問順序 (情報利得の降順)

1 つの AskUserQuestion 呼び出しに複数の質問を配置するとき、情報利得が最も高い質問を先に配置します。ユーザーが核心的な決定を先に完了し、低い価値の質問は後で出会うようにします。

原則 3 — 推奨オプション (統計的多数の合理的なデフォルト値)

推奨 (最初のオプションの (推奨) ラベル) は 観察された統計的多数 に基づきます。システムが押したいポリシーのデフォルト値ではなく、ユーザーが実際に繰り返し選んだオプションが推奨になります。観察量に応じて 3 つの状態を行き来します。

Cold-Start (初期状態)
  • 観察 < N: 十分な観察データがない
  • 推奨配置: 静的デフォルト値 (明示的に公開)
  • 表示方式: based on static default, N observations needed for personalization
Warm State (学習中)
  • 観察 = N~M: 部分的な学習
  • 推奨配置: 観察された多数 + 信頼度シグナル
  • 信頼度: 観察数 × 選択の一貫性
Mature State (安定化)
  • 観察 > M: 十分な学習
  • 推奨配置: 強い多数の確信 (統計的に有意)
  • 信頼度: 最高 (≥95% 信頼度)

原則 4 — 前提条件の明示

推奨オプションの説明は、その推奨が成立する前提条件を明示しなければなりません。ユーザーが前提が破られたときに即座に拒否できるよう "Recommended when <前提条件>" の形で提示します。前提が明示されていない推奨は設計上の欠陥です。

原則 5 — 熟練度に基づく適応型の強度

同じ推奨でも相手によって強度が変わります。専門家への強い推奨は自律性を侵害し、初心者への弱い推奨は決定疲労だけを増やすためです。

  • 専門家 (セッション > 50): 弱い推奨強度 (自律性優先、inferred preference のみ公開)
  • 初心者 (セッション < 10): 強い推奨強度 ((推奨) ラベル + 理由の明示)
  • 中級者 (10 ≤ セッション ≤ 50): 中程度の強度 (状況に応じて調整)

3. PostToolUse Capture Hook (意思決定の捕捉)

AskUserQuestion の応答が届くと PostToolUse フックが自動的に意思決定を捕捉します。ユーザーが別途記録することはありません。

捕捉されるデータ

json
{
  "decision_id": "moai-ask-001",
  "timestamp": "2026-07-01T10:00:00Z",
  "question": "次のステップを選択してください",
  "user_choice": "Option A (推奨)",
  "all_options": ["Option A", "Option B", "Option C"],
  "context": {
    "spec_id": "SPEC-XXX-001",
    "phase": "run",
    "workflow": "/moai run"
  }
}

保存場所

  • セッション中: .moai/state/decisions/ (一時 JSON)
  • セッション終了: ~/.claude/projects/{hash}/memory/decisions.jsonl (自動メモリ)

4. Decay Policy (減衰ポリシー)

3 か月前の選択が今日の選好を代弁するわけではありません。古い意思決定の重みは段階的に減少します。

減衰関数

text
weight(t) = initial_weight × exp(-decay_rate × days_ago)

デフォルト値

  • Initial weight: 1.0
  • Decay rate: 0.1 (7 日ごとに約 50% 減衰)
  • Retention period: 90 日 (以降は自動アーカイブ)

text
昨日の選択: weight = 0.95
7 日前の選択: weight = 0.50
30 日前の選択: weight = 0.04
90 日以上: アーカイブ (推奨への反映から除外)

意思決定カテゴリ

メモリが追跡する主要な意思決定タイプです。

カテゴリ
Tier SelectionTier S/M/L の選択
Cycle TypeDDD vs TDD モード
Worktree StrategyMain vs Branch vs Worktree
PR RoutingDirect-to-main vs PR-based
Model SelectionModel choice per task
Effort LevelEffort レベル (low/medium/high/xhigh)

Model Selection と Effort Level がここに含まれる点は注目に値します — 意思決定メモリが学習した選好が結局はモデル・推論深度の割り当てにつながるので、このシステムはトークノミクスのパーソナライズ層でもあります。

統計的多数学習の例

シナリオ 1: Tier Selection

ユーザーが 10 回の Tier 選択をしたなら:

text
Tier S: 3 回選択
Tier M: 6 回選択  ← 統計的多数 (60%)
Tier L: 1 回選択

学習結果: Tier M が (推奨) として表示
信頼度: 中上 (6/10 = 60%, N=10)
推奨文言: "Tier M (推奨) — 直近の選択 60% に基づく"

シナリオ 2: Cycle Type

text
DDD: 4 回
TDD: 5 回選択  ← 統計的多数
その他: 1 回

学習結果: TDD が (推奨)
信頼度: 中 (5/10 = 50%, N=10)
推奨文言: "TDD (推奨) — 観察ベース"

Cold-Start の透明性

観察が不足しているときはその事実を隠さず明示的に公開します。

text
選択肢 1: Tier M (推奨) — based on static default, 5 observations needed for personalization
選択肢 2: Tier L
選択肢 3: Tier S

ユーザーはまだ学習中の状態であることを明確に認識できます。

熟練度に基づく強度調整の例

初心者ユーザー (セッション < 10)

text
Tier M (推奨) — 直近の選択に基づいて提示
(強い推奨強度)

専門家ユーザー (セッション > 50)

text
選択肢:
- Tier M (直近の選択 60%)
- Tier L
- Tier S
(弱い推奨強度、inferred preference の公開のみ)

関連ドキュメント

情報
ヒント: 意思決定メモリは自動的に動作します。明示的な設定は不要です — 意思決定を下すたびにシステムが静かに学習します。