意思決定メモリシステム
エージェンティックループエンジニアリングの出発点は観察です — ループが回るたびに観察が積み重なり、積み重なった観察が学習の原料になります。意思決定メモリはその観察対象をコードではなく ユーザーの選択 に拡張した層です。
情報一行要約: 意思決定メモリはユーザーの選択を記憶し、今後の類似した状況でパーソナライズされた推奨を提供します。
意思決定メモリ (Decision Memory) は MoAI-ADK の 長期学習層 です。AskUserQuestion ラウンドでユーザーの選択を観察し、今後の同じ意思決定ポイントで統計的多数の選択を基に適応型の推奨を提供します。
重要なのは方向です。システムが押したいデフォルト値を (推奨) で包むのではなく、ユーザーが実際に繰り返し選んできたもの が推奨になります。
| 原則 | 説明 |
|---|---|
| 観察ベース | ユーザー選択の統計的多数を学習 (ポリシーのデフォルト値ではない) |
| 透明性 | 推奨の根拠を常に明示 (cold-start 状態を含む) |
| 自律性 | ユーザーは推奨をいつでも拒否可能 |
| 適応型の強度 | 熟練度に応じて推奨の強度を自動調整 |
意思決定メモリは 3 つの階層で構成されます。下に行くほど長く残ります。
- 範囲: 現在のセッション内
- 用途: 今しがたユーザーが選んだオプションの参照
- 持続性: セッション終了時に消失
- 範囲: 同じプロジェクトの直近 3 セッション
- 用途: 直近の選好に基づく推奨
- 持続性:
.claude/projects/{hash}/memory/自動メモリ
- 範囲: すべてのセッション (無制限)
- 用途: 統計的多数の学習、長期トレンド
- 持続性: MEMORY.md + topic ファイル (ユーザー管理)
推奨配置は 5 原則で構成されます (SSOT: .claude/rules/moai/core/askuser-protocol.md § Recommendation Placement Principles)。
オーケストレーターが近づいてくる意思決定の不確実性 p を推定するとき、p ≈ 0.5 (Fisher information I = p(1−p) が最大となる決定境界) で AskUserQuestion によりその質問を放出します。p が 0 または 1 に近いとき (ほぼ確実) は統計的多数のオプションで自動解決し、質問を省略します。
1 つの AskUserQuestion 呼び出しに複数の質問を配置するとき、情報利得が最も高い質問を先に配置します。ユーザーが核心的な決定を先に完了し、低い価値の質問は後で出会うようにします。
推奨 (最初のオプションの (推奨) ラベル) は 観察された統計的多数 に基づきます。システムが押したいポリシーのデフォルト値ではなく、ユーザーが実際に繰り返し選んだオプションが推奨になります。観察量に応じて 3 つの状態を行き来します。
- 観察 < N: 十分な観察データがない
- 推奨配置: 静的デフォルト値 (明示的に公開)
- 表示方式:
based on static default, N observations needed for personalization
- 観察 = N~M: 部分的な学習
- 推奨配置: 観察された多数 + 信頼度シグナル
- 信頼度: 観察数 × 選択の一貫性
- 観察 > M: 十分な学習
- 推奨配置: 強い多数の確信 (統計的に有意)
- 信頼度: 最高 (≥95% 信頼度)
推奨オプションの説明は、その推奨が成立する前提条件を明示しなければなりません。ユーザーが前提が破られたときに即座に拒否できるよう "Recommended when <前提条件>" の形で提示します。前提が明示されていない推奨は設計上の欠陥です。
同じ推奨でも相手によって強度が変わります。専門家への強い推奨は自律性を侵害し、初心者への弱い推奨は決定疲労だけを増やすためです。
- 専門家 (セッション > 50): 弱い推奨強度 (自律性優先、inferred preference のみ公開)
- 初心者 (セッション < 10): 強い推奨強度 (
(推奨)ラベル + 理由の明示) - 中級者 (10 ≤ セッション ≤ 50): 中程度の強度 (状況に応じて調整)
AskUserQuestion の応答が届くと PostToolUse フックが自動的に意思決定を捕捉します。ユーザーが別途記録することはありません。
{
"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(自動メモリ)
3 か月前の選択が今日の選好を代弁するわけではありません。古い意思決定の重みは段階的に減少します。
weight(t) = initial_weight × exp(-decay_rate × days_ago)- Initial weight: 1.0
- Decay rate: 0.1 (7 日ごとに約 50% 減衰)
- Retention period: 90 日 (以降は自動アーカイブ)
昨日の選択: weight = 0.95
7 日前の選択: weight = 0.50
30 日前の選択: weight = 0.04
90 日以上: アーカイブ (推奨への反映から除外)メモリが追跡する主要な意思決定タイプです。
| カテゴリ | 例 |
|---|---|
| Tier Selection | Tier S/M/L の選択 |
| Cycle Type | DDD vs TDD モード |
| Worktree Strategy | Main vs Branch vs Worktree |
| PR Routing | Direct-to-main vs PR-based |
| Model Selection | Model choice per task |
| Effort Level | Effort レベル (low/medium/high/xhigh) |
Model Selection と Effort Level がここに含まれる点は注目に値します — 意思決定メモリが学習した選好が結局はモデル・推論深度の割り当てにつながるので、このシステムはトークノミクスのパーソナライズ層でもあります。
ユーザーが 10 回の Tier 選択をしたなら:
Tier S: 3 回選択
Tier M: 6 回選択 ← 統計的多数 (60%)
Tier L: 1 回選択
学習結果: Tier M が (推奨) として表示
信頼度: 中上 (6/10 = 60%, N=10)
推奨文言: "Tier M (推奨) — 直近の選択 60% に基づく"DDD: 4 回
TDD: 5 回選択 ← 統計的多数
その他: 1 回
学習結果: TDD が (推奨)
信頼度: 中 (5/10 = 50%, N=10)
推奨文言: "TDD (推奨) — 観察ベース"観察が不足しているときはその事実を隠さず明示的に公開します。
選択肢 1: Tier M (推奨) — based on static default, 5 observations needed for personalization
選択肢 2: Tier L
選択肢 3: Tier Sユーザーはまだ学習中の状態であることを明確に認識できます。
Tier M (推奨) — 直近の選択に基づいて提示
(強い推奨強度)選択肢:
- Tier M (直近の選択 60%)
- Tier L
- Tier S
(弱い推奨強度、inferred preference の公開のみ)- エージェントガイド - AskUserQuestion 推奨配置ルール (HARD)
- Harness v4 Builder 応用ガイド - Tier 選択と意思決定
- メモリシステム - ユーザー選好の管理
情報ヒント: 意思決定メモリは自動的に動作します。明示的な設定は不要です — 意思決定を下すたびにシステムが静かに学習します。