Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help


id: ADR-010 title: 会話履歴、キュレーションされたメモリ、エンリッチメント権限を分離する date: 2026-07-19 status: 提案中 relates-to:

  • ADR-005
  • docs/book/src/foundations/fnd-002-documentation-standards.md
  • docs/book/src/architecture/memory-payload-lifecycle.md
  • https://github.com/zeroclaw-labs/zeroclaw/issues/9048
  • https://github.com/zeroclaw-labs/zeroclaw/issues/9103
  • https://github.com/zeroclaw-labs/zeroclaw/issues/6850
  • https://github.com/zeroclaw-labs/zeroclaw/pull/9072
  • crates/zeroclaw-api/src/memory_traits.rs
  • crates/zeroclaw-memory
  • crates/zeroclaw-infra/src/session_backend.rs
  • crates/zeroclaw-infra/src/session_store.rs
  • crates/zeroclaw-infra/src/acp_session_store.rs

ADR-010: 会話履歴、キュレーションされたメモリ、およびエンリッチメント権限の分離

コンテキスト

ADR-005 は、SQLite をデフォルトとする、バックエンド中立の永続メモリコントラクトを記録しています。この ADR では、記憶されたどのデータが永続メモリに属するのか、また外部メモリ統合がもう 1 つの信頼できるストアであるかどうかは決定しません。

現在のランタイム、ゲートウェイ、およびチャンネルパスは、セッションストアと MemoryCategory::Conversation エントリの両方に会話ターンを永続化できます。これにより、1つのトランスクリプトが、保持、リコール、エクスポート、削除、およびスコープの動作が異なる2つの可能な所有者を持つことになります。古い会話行が、厳選されたクロスセッション知識であるかのように、後のプロンプトに再び入り込む可能性もあります。

外部連携は、第二の権威リスクを生み出します。コネクタは検索を改善したり、派生的なコンテキストを供給したりできますが、そのインデックスを別の永続的なストアとして扱うと、コネクタの状態、障害、あるいは緩いスコープが、ZeroClaw の正規データと競合する可能性があります。

承認済みのRFC #9048 および #9103 は、これらの問題をまとめて解決します。このレコードはADR-005を書き直すことなく拡張します。バックエンド非依存の Memory コントラクトとSQLiteのデフォルトは引き続き有効であり、このADRはセッション履歴、キュレートされたメモリ、およびエンリッチメントに対する権限を個別に割り当てます。

決定

会話履歴は継続性を担う

会話の継続性については、該当するチャット、チャンネル、ゲートウェイ、または ACP のセッションストアが正となります。トランスクリプトの自動永続化はそのセッションストアが担い、安全な再開に必要なメッセージ構造を保持します。これには、サポートされている場合のツール呼び出しとツール結果のペアリングも含まれます。

セッション履歴は、該当するすべてのセッション、エージェント、テナント、プリンシパルの境界を保持します。これは自動的にセッションをまたぐ知識になるわけではありません。履歴のトリミングは、セッションから見えるコンテキストおよびプロバイダーから見えるコンテキストを変更します。キュレートされたメモリの削除は、セッション履歴を削除しません。

現在の入力またはセッション履歴がキュレーション済みメモリと矛盾する場合、そのターンでは現在の入力とセッション履歴が優先されます。キュレーション済みメモリは、その継続性の記録を書き換えたり、置き換えたり、上書きしたりしてはなりません。

キュレーション済みメモリは、選択されたセッション横断の知識を管理します

エージェントが管理する長期メモリには、セッションをまたいで意図的に保持される、厳選されたファクト、設定、決定、規約、および学習済み手順が格納されます。書き込みは意図的に行われるか、または明示的な有界統合ポリシーによって生成される必要があり、有用な来歴を保持し、適用可能なすべてのエージェント、セッション、テナント、およびプリンシパルの境界を維持する必要があります。

キュレーテッドメモリは、ADR-005 のバックエンド中立な Memory コントラクトを使用します。設定されたバックエンドは、そのメモリの正式な永続ストアとなります。プロンプトの組み立て、統合、ガバナンス、およびフィードバックは、ストレージ実装の上位にあるライフサイクルポリシーの関心事のままです。issue #6850 がその境界を追跡しています。

このADRでは、エージェントごとのMarkdownがオペレーターに可視化される正規のキュレーテッドメモリ表現なのか、あるいは別途構成されたバックエンドの投影なのかは決定しません。これは別個の実装上の決定として残されます。第2の永続的な権威が暗黙的に導入されることは許されません。

ACP/Codeセッションは、ZeroCodeのACPペインを含め、自動的な長期メモリの注入から隔離されたままになります。ナレッジバンドルと検索拡張生成は、別の意図的なコンテキストソースであり、これらのCodeセッションでキュレーションされたメモリを再び有効化することはありません。

エンリッチメントは再構築可能な派生物です

MemoryEnricher は、信頼できるキュレーション済みメモリストアのオプションのベストエフォート型派生物であり、別の信頼できる情報源ではありません。信頼できるストアが最初にコミットします。コネクタの障害、タイムアウト、不正な出力、または古い状態は、成功した信頼できる書き込みを無効にしたり、信頼できるストアの呼び出しを利用不可にしたりすることはできません。

共有エンリッチメント境界は、コネクターに依存しないポリシーを所有します。すなわち、宣言された機能、呼び出し元とエージェントのスコープ、制限された障害動作、決定論的なマージ順序、および古い結果、置き換えられた結果、誤ったエージェントの結果を拒否するために必要な正規行の再ハイドレーションです。コネクター由来のコンテキストは、モデルから可視になる前に信頼できないものとして隔離されます。

新しい自動トランスクリプト書き込みは、エンリッチメントコネクターに転送してはなりません。移行ポリシーは、レガシーの MemoryCategory::Conversation 行のコネクター側の処理を明示的に定義し、それらの派生物がキュレーションされたメモリとして想起されることを防ぎ、クリーンアップまたは再構築のガイダンスを提供しなければなりません。将来のセッション履歴インデックスは、独自の明示的な権限、プライバシー、保持期間、およびスコープの決定を必要とし、キュレーションされたメモリの経路を通じて暗黙的に導入することはできません。

最初の実装は SQLite 固有のままで構いません。他の永続ストアに対して拡張機能を汎用化するのは、すべてのバックエンドに特定のコネクタの前提を採用させるのではなく、具体的な 2 番目の利用者が現れるのを待ちます。

従来の会話行には明示的な遷移が必要です

既存の MemoryCategory::Conversation データは互換性維持のための状態であり、トランスクリプトの将来的な正規ソースではありません。マイグレーションはロールバックを保証し、サイレントな削除を避ける必要があります。実装は、互換性読み取りの保持、復元可能なターンを正しいセッションストアへの移行、選択した永続的なファクトをキュレートされたメモリへの意図的なプロモーション、またはドキュメント化された保持ルールに基づく行の期限切れのいずれかを行うことができます。

いかなる実装も、トランスクリプトからキュレーション済みメモリへの一括昇格をデフォルトとして扱ってはならない。昇格は、範囲が限定され、来歴を考慮した判断であり、保存形式の変換ではない。

受け入れゲート

この ADR は、以下の条件をすべて満たすまで提案中のままです:

  • 新規の自動トランスクリプトの書き込みは、対象のランタイム、ゲートウェイ、チャンネル、および ACP パスで正規のセッションストアを使用します。
  • キュレーションされたメモリは、競合する現在の入力やセッション履歴を上書きできず、ACP/Code の自動メモリ分離は引き続き適用されます。
  • authoritative-store/enricher 間のシームは、権威側優先の書き込み、スコープおよび capability によってゲートされた想起、信頼できないコンテキストの遮断、障害時のフォールバックを備えて稼働している。
  • 新しい自動トランスクリプト書き込みはエンリッチメントコネクターから除外されます。また、
  • レガシーな会話行に対する互換性および移行動作(カテゴリセーフなコネクター再呼び出し、クリーンアップまたは再構築の動作を含む)は文書化され、ロールバック可能なテストによってカバーされています。

結果

肯定的な結果:

  • 会話の再開、トランスクリプトの保持、トランスクリプトの削除は、すべて 1 つの正規オーナーが担います。
  • キュレーションされたメモリは、もう一つのセッション履歴システムになることなく進化できます。
  • 外部エンリッチメントは、構成済みのメモリバックエンドから永続的な権威を奪うことなく、再現率を向上させることができます。
  • コネクタの停止や、より弱いコネクタプロトコルでは、スコープ付きの権威データにフォールバックします。
  • ACP/Code セッションは、ZeroCode の ACP ペインを含め、メモリドリフトに対する既存の保護を維持します。

否定的な結果:

  • 既存のトランスクリプト自動保存パスとレガシーの会話行には、段階的な互換性対応と移行作業が必要です。
  • セッションストアは、トランスクリプトの書き込みを汎用メモリから移行できるようになる前に、十分な忠実度と網羅性を提供する必要があります。
  • エンリッチメントアダプターは、すべての Memory 書き込みを無差別に受け取ることはできません。共有ラッパーでカテゴリとスコープの境界を適用する必要があります。
  • 移行が有効な間、オペレーターには従来の会話行と正規のセッション履歴の両方が一時的に表示される場合があります。

参照