0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CHIMEがAIの記憶を計画と実行に分離。「失敗した計画」を捨てる前に調べること

0
Posted at

AIエージェントに過去の失敗を覚えさせている人へ。その反省文は、直す相手を間違えていませんか。

タスクが失敗した。そこで「この計画は使わない」と記憶に残す。次のタスクでは、その記憶を読んで別の計画を選ぶ。

実行時の引数だけが間違っていたなら、これで捨てられるのは正しい計画です。

2026年9月2日、厦門大学・浙江大学・Alibabaの研究者らがCHIMEの論文を公開しました。扱うのは、エージェントが経験を記憶するときの原因の取り違えです。最終結果から直接反省を保存する方法に対し、計画と実行のどちらに学ぶべき点があるかを先に判定します。

結論から言うと

成功・失敗の記録と、次に使う教訓は、分けて作る必要があります。

CHIMEは計画用と実行用の記憶を分けます。開発元の公開説明も、原因を割り当ててから記憶することを中心に据えています。

あなたのエージェントに持ち帰れるのは、メモリ保存の直前に置く確認です。

「何に失敗したか」に加えて、「計画は条件を満たしていたか」「実行は計画に従ったか」を残す。この二つがなければ、読みやすい反省文は作れても、何を修正すべきかは決まりません。

通れない橋を経路に含めた地図と、その経路に忠実に進んで途切れた橋で止まる足跡
計画の誤りと実行の忠実さを分けて考えるためのAI生成イラスト。実際の実験風景ではありません。

計画どおりに動いたのに、失敗した

論文付録Cの配送タスクの分析に、違いがはっきり出ています。実行側は予定に従っていましたが、計画側が厳密な「指定時刻より前」という条件に、同時刻も含めてしまいました。この失敗から更新するのは計画用の記憶で、実行用は触りません。

実行担当に「もっと正確に計画を守れ」と教えても、直りません。

問題のある予定を、さらに正確に守るだけだからです。

このケースを実装の言葉に置き換えると、確認する対象は少なくとも三つあります。

確認対象 確かめたいこと
依頼の条件 「より前」なのか、「以下」なのか
実行前の計画 その条件を満たす予定になっていたか
実際の操作 予定どおりの時刻や引数を使ったか

最後の操作だけを残しても、誤った引数を実行担当が作ったのか、計画から受け取ったのかを区別できません。逆に、計画だけを残しても、実行時に何が変わったかは追えません。

修正先を決めるには、結果に至る途中の境界を残す必要があります。

記憶を分けると、次に変わる判断も分かれる

「計画」と「実行」を別の保存先にする意味は、整理整頓だけではありません。次のタスクで、その情報を渡すタイミングを変えられます。

計画を作る段階で必要なのは、依存関係や制約についての知識です。操作を実行する段階では、対象の識別子や引数の扱いが問題になります。

以下は、この違いを自分の業務に当てはめるための整理例です。

保存したい教訓 次に使う場所 変える判断
前工程の確定後に後工程を予約する 計画作成時 作業の順序
上限に到達する前に余裕を確保する 計画作成時 予定の組み方
表示名ではなく一意なIDで対象を指定する ツール実行時 引数の組み立て
ツールの返却値から完了状態を確認する ツール実行後 次へ進む条件

この四つを一つの反省文に混ぜると、どの担当に何を変えてほしいのかが曖昧になります。特に、計画を作り終えた後で順序の教訓を渡しても、計画を再検討する経路がなければ間に合いません。

保存先の分離と、読み出すタイミングの分離はセットです。

CHIMEの処理順序も、この境界に沿っています。

依頼 → 計画用の記憶を取得 → 計画を生成
     → 依頼と計画から実行用の記憶を取得 → 実行
     → 計画・実行履歴・結果・参照した記憶を診断 → 記憶を更新

帰属は、計画、実行、その両方、どちらでもない、の四つです。重みを更新しないLLMが判定し、証拠不足や外部要因では「どちらでもない」も選べます。

ここは実装上も大事です。選択肢が「計画」か「実行」だけなら、ログ不足や外部サービスの障害まで、どちらかの教訓に押し込むことになります。

さらに、帰属が決まっても無条件には保存しません。同じ更新処理では、確信度と具体性を確認し、既存記憶への統合、新規追加、破棄を選びます。

保存しないという分岐があれば、原因の分からない一回を、次のすべてのタスクに適用する規則へ昇格させずに済みます。

メモリ保存の前に、二つの判定を分離する

ここからは論文の実装ではなく、自分のエージェントに組み込むための最小例です。前述の時刻制約を、外部APIなしで確認できる形にします。時刻とレコードは説明用です。

見るのは、計画が制約を守るかと、実行が計画に一致するか。それぞれを別の値にします。

from datetime import datetime

def inspect_deadline(trace):
    deadline = datetime.fromisoformat(trace["deadline"])
    planned = datetime.fromisoformat(trace["planned_at"])
    executed = datetime.fromisoformat(trace["executed_at"])
    if any(t.utcoffset() is None for t in (deadline, planned, executed)):
        raise ValueError("タイムゾーン付きの時刻が必要です")

    return {
        "plan_satisfies_constraint": planned < deadline,
        "execution_matches_plan": executed == planned,
        "observed_satisfies_constraint": executed < deadline,
    }

trace = {
    "deadline": "2026-10-01T18:00:00+09:00",
    "planned_at": "2026-10-01T18:00:00+09:00",
    "executed_at": "2026-10-01T18:00:00+09:00",
}
print(inspect_deadline(trace))
{'plan_satisfies_constraint': False, 'execution_matches_plan': True, 'observed_satisfies_constraint': False}

決定的なのは、最初が False でも二つ目は True になることです。失敗という一語にまとめると、この違いが消えます。

このコードは原因を自動確定しません。時刻条件を検査し、後段の診断に渡す材料を作ります。日時の解釈と比較にはPythonの標準のdatetimeを使い、タイムゾーンのない入力は受け付けません。業務ではさらに、記録時刻と実際の完了時刻の違い、時計の精度、許容される遅延を定義する必要があります。

たとえば予定を17時50分、実行を18時00分に変えれば、計画の条件は通り、計画との一致は落ちます。今度は実行側の調査が必要です。ただし、外部APIの遅延なのか、呼び出し忘れなのかは、この三つの時刻だけでは決まりません。

一方、悪い予定を実行担当が修正して17時50分に終えたなら、結果は成功します。それでも、元の計画が条件違反だったことは消えません。

成功したから計画を丸ごと再利用してよい、という判断にも同じ穴があります。

上のコードと、この三つの経路はローカルで実行確認しています。CHIME本体の再現実験ではありません。

原因判定を外すと、何が変わったか

CHIMEの比較実験では、Qwen3.5-Flashを使った4ベンチマークの評価平均が34.87%、帰属判定を外した条件では32.43%でした。評価中の記憶は固定し、タスク順を変えた3回の平均です。これは著者らの報告で、ここでは再現していません。

差は2.44パーセントポイントです。

この比較が、実装を考えるときの手掛かりになります。メモリを有効にした状態で、「経験をどこに帰属させるか」を外した条件を比べているからです。

自分のシステムでも、最初から巨大な記憶基盤を作る必要はありません。まず失敗ログを読み、同じ結果ラベルの中に、別々の修正が必要なケースが混じっているかを確認できます。

実際に混じっているなら、検索対象を増やす前に、保存前の判定を変える理由があります。

ただし、LLMが書いた原因説明を、検証済みの事実として扱うのは避けたいところです。先ほどの例なら、自然言語の「締切を守れなかった」という説明に加えて、比較演算の結果が残ります。再実行可能な条件はコードで確かめ、観測できていない原因は未確定として残す。その組み合わせのほうが、後から修正できます。

反省文だけを残すと、後で直せなくなる

ここから導ける実務上の提案は、教訓の文章と一緒に、出どころを保存することです。これはCHIMEの保存形式の転載ではなく、運用向けの追加案です。

{
  "lesson_id": "deadline-rule-01",
  "stage": "planning",
  "claim": "厳密な締切では、等号を含めずに予定を検査する",
  "evidence_trace_id": "delivery-example-01",
  "applies_when": "完了条件が指定時刻より前である",
  "status": "candidate"
}

evidence_trace_id は元の実行記録へ戻るための参照です。applies_when は、次のタスクでこの教訓が本当に使えるかを確かめる条件です。candidate は、生成された教訓をまだ有効な運用ルールにしていない状態を表します。

「期限を守ること」という一行だけなら、後で誤りに気づいても、どの実行から生まれ、どの条件を想定していたかが分かりません。出典となる記録があれば、計画の欠陥という判定自体を訂正できます。

保存する情報が変わると、確認すべきテストも変わります。

  • 制約に違反した計画を、そのまま実行したケース。
  • 正しい計画から実行が逸脱したケース。
  • 問題のある計画を、実行担当が修正して成功したケース。
  • 外部要因や記録不足で、原因を決められないケース。

この四つに、同じ教訓を保存していないかを見る。タスクの成功率だけを見るより、メモリ更新の不具合を具体的に探せます。

次のタスクへ渡す前に、修正先を決める

一件の失敗から作った規則が、次のタスクにも影響します。原因を取り違えた規則を次の計画に渡せば、正しかった判断まで変更させてしまいます。

だから、反省の文章量を増やす前に、失敗した一件を開いてください。

計画と実際の操作が別々に残っているか。条件違反はどの段階で入ったか。証拠が足りなければ、記憶を更新せずに止められるか。

CHIMEを読む価値は、経験を保存する直前に、その問いを置いた点にあります。

次のエージェントに渡したいのは、失敗の印象ではなく、どの判断をどう変えるかです。

参考資料

CHIME: Credit-Aware Hierarchical Memory Evolution for Long-Horizon Agentic Planning(2026年9月2日公開)
https://arxiv.org/abs/2609.02074

CHIME 本文・比較実験・ケース分析(v1)
https://arxiv.org/html/2609.02074v1

Marco DeepResearch — CHIMEの公開案内
https://github.com/ATH-MaaS/Marco-DeepResearch

Python datetime — Aware and Naive Objects
https://docs.python.org/3/library/datetime.html#aware-and-naive-objects

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?