ネイティブメモリでターンやセッションをまたいで知識を引き継ぐ、または生成と読み込みをアプリケーション側で制御します。
メモリは、Agent が1つのセッションで得た知識を保持し、後のセッションで再利用できるようにします。プロジェクトのビルドコマンド、テストの構成、コード規約といった情報を、毎回ゼロから調べ直す必要がなくなります。
Qoder Agent SDK のメモリは生成と読み込みの2つの部分で構成され、それぞれ個別に設定できます。
native モードで設定できるのは、2つのスコープスイッチと結果コールバックだけです。保存場所、生成プロンプト、読み込み予算などはランタイムが管理し、リリースごとに改善されます。
ネイティブメモリには2つのスコープがあり、既定ではどちらも有効です。
Query ごとに片方を無効化できます。
native モードでは少なくとも1つのスコープが有効である必要があります。両方を無効にすると例外が発生します。
空のオブジェクトは明示的な無効化スイッチで、
各 root は、メモリ Agent がアクセスできるディレクトリに対応します。
生成は既定で各ターンの完了後に実行されます。
コールバックは完了したターンの
ファイルは配列の順に注入され、
メモリはバックグラウンドで動作するため、成功を前提とせず結果を明示的に取得してください。方法は2つあります。
1つはコールバックの登録で、
もう1つはメッセージストリームからの取得で、subtype が
生成は次の5種類のいずれかを報告します。
読み込みは
Query オブジェクトには、バックグラウンド生成に伴うタイミングの問題を扱う2つのメソッドがあります。
メモリオプションはランタイムとの調整によって決まるため、渡した値ではなく実際に適用された設定を読み戻してください。
| 構成要素 | 役割 | 実行タイミング |
|---|---|---|
| 生成(Generation) | Agent が得た知識をメモリファイルに書き込む | ターン完了後、バックグラウンドのメモリ Agent が実行 |
| 読み込み(Consumption) | メモリファイルを Agent のコンテキストに読み込む | セッション初期化時、および明示的な再読み込み時 |
ネイティブメモリを有効にする
mode: 'native' は、すべての挙動をランタイムの既定動作に委ねます。まずはこの設定から始めることを推奨します。何を記録すべきか、どこに保存するか、いつ読み込むかをランタイムが判断します。
メモリのスコープを選ぶ
ネイティブメモリには2つのスコープがあり、既定ではどちらも有効です。
| スコープ | ルート id | 保持する内容 |
|---|---|---|
| ユーザー単位 | user | 利用者に紐づき、プロジェクトをまたいで通用する知識 |
| プロジェクト単位 | project | 現在の作業ディレクトリに固有の知識 |
メモリを無効にする
空のオブジェクトは明示的な無効化スイッチで、memory を渡さない場合と同じです。メモリ設定はランタイムに送信されません。
生成と読み込みを上書きする
mode: 'custom' は明示的に指定した部分のみを上書きし、それ以外はランタイムの既定動作を継承します。メモリの保存場所、または何を記録対象とするかをアプリケーション側で決める場合に使用します。
書き込む内容を制御する
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
id | string | — | プロンプト、初期化、生成結果で使われる安定した識別子 |
path | string | — | Qoder CLI を実行するマシン上のディレクトリパス |
access | 'read' | 'read-write' | 'read-write' | メモリ Agent がこの root に書き込めるかどうか |
indexFile | string | — | root 内の相対インデックスパス。すべてが内容ファイルの場合は省略 |
ターンごとに書き込むかを判断する
生成は既定で各ターンの完了後に実行されます。shouldGenerate により、アプリケーション側で単一の生成を却下できます。価値の低いターンを飛ばす、テナントごとに予算を制御する、読み取り専用のレビュー時には書き込まない、といった用途に使えます。
prompt と response、加えて sessionId、cwd、1 から始まる turnIndex を受け取ります。run: false を返すとバックグラウンド Agent は起動せず、skipped の結果が生成されます。
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
enabled | boolean | true | ターン完了時の生成を有効にするか |
shouldGenerate | コールバック | — | アプリケーション側のゲート。省略時はランタイム内蔵の保護ルールのみ |
timeoutMs | number | 10000 | ゲートコールバックの最大所要時間 |
onGateError | 'skip' | 'report_failed' | 'skip' | コールバックのエラーやタイムアウトの報告方法 |
読み込む内容を制御する
files を明示的に指定すると、この Query ではネイティブの自動メモリが置き換えられます。静的な指示は引き続き読み込まれます。
id が注入されるセクション名になります。
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
enabled | boolean | true | メモリを読み込むか |
files | MemoryConsumptionFile[] | — | 明示的なファイル一覧。ネイティブの自動メモリを置き換える |
maxTokens | number | — | すべての明示ファイルで共有するトークン予算 |
overflow | 'truncate' | 'fail_query' | 'truncate' | 内容が maxTokens を超えた場合の扱い |
failureMode | 'best_effort' | 'fail_query' | 'best_effort' | 読み取り失敗時の扱い。required を付けたファイルのみ Query を失敗させる |
メモリの実行結果を確認する
メモリはバックグラウンドで動作するため、成功を前提とせず結果を明示的に取得してください。方法は2つあります。
1つはコールバックの登録で、native と custom の両モードで利用できます。
memory_generation および memory_consumption の system メッセージに同じ内容が含まれます。
| ステータス | 意味 |
|---|---|
saved | 書き込み対象のすべてのファイルが成功 |
partial | 少なくとも1件が成功し1件が失敗。failedFiles を確認 |
no_change | 実行されたが、記録すべき新しい内容が見つからなかった |
skipped | 実行されなかった。例:ゲートが run: false を返した |
failed | 実行されたが、書き込みに成功したファイルがない |
success、partial、failed のいずれかを報告し、ファイルごとに loaded、missing、failed、truncated のステータスを返します。missing はエラーではありません。初回実行時にはメモリファイルがまだ存在しない場合があります。
実行中にメモリを制御する
Query オブジェクトには、バックグラウンド生成に伴うタイミングの問題を扱う2つのメソッドがあります。
flushMemory() は CI やテストで特に重要です。最終の result メッセージを受け取った直後にプロセスが終了すると、書き込み中の生成が中断される可能性があります。
実際に適用された設定を確認する
メモリオプションはランタイムとの調整によって決まるため、渡した値ではなく実際に適用された設定を読み戻してください。
memory を省略した場合、または {} を指定した場合、init.memory は undefined になります。
次のステップ
- セッション制御 —— メモリを伴うセッションの再開とフォーク
- 外部セッションストレージ —— セッション履歴を永続化し、他のホストから再開する
- コストと使用量 —— 各生成は自身の
usageとcreditsを報告する