ResponseCache
ResponseCache は、Agent ループ内のリクエスト/レスポンス境界で LLM レスポンスをキャッシュする input processor です。キャッシュ検索には processLLMRequest を使用し、ヒットした場合は処理を短絡します。完了したレスポンスの書き込みには processLLMResponse を使用します。
キャッシュキーは、Mastra がモデルへ送信しようとしている解決済みの LanguageModelV2Prompt(つまり、Memory が読み込まれ、先行する input processor がプロンプトを変換した_後_)から導出されます。そのため、Memory コンテキストが異なる2人のユーザーには異なるキャッシュキーが生成されます。Agent の Tool ループ内の各ステップは個別にキャッシュされます。
レスポンスキャッシュ用の Agent レベルのオプションはありません。ResponseCache を inputProcessors に明示的に登録してください。呼び出しごとのオーバーライドは、ResponseCache.context() と ResponseCache.applyContext() を介して RequestContext から渡されます。
使用例使用例への直接リンク
import { Agent } from '@mastra/core/agent'
import { InMemoryServerCache } from '@mastra/core/cache'
import { ResponseCache } from '@mastra/core/processors'
const cache = new InMemoryServerCache()
const agent = new Agent({
id: 'search-agent',
name: 'Search Agent',
instructions: 'You answer questions concisely.',
model: 'openai/gpt-5',
inputProcessors: [new ResponseCache({ cache, ttl: 600 })],
})
// First call hits the LLM and writes to the cache.
await agent.generate('What is the capital of France?')
// Second identical call replays the cached response.
await agent.generate('What is the capital of France?')
// Force a fresh call but still update the cache.
await agent.generate('What is the capital of France?', {
requestContext: ResponseCache.context({ bust: true }),
})
概念の概要、スコープ規則、推奨されるデプロイパターンについては、レスポンスキャッシュを参照してください。
コンストラクターパラメーターコンストラクターパラメーターへの直接リンク
cache:
MastraServerCache 実装を渡せます。ローカル開発には InMemoryServerCache、本番環境には @mastra/redis の RedisCache、カスタムバックエンドには独自のサブクラスを使用します。ttl?:
scope?:
null を指定するとスコープを無効にします。省略した場合、Processor は Request コンテキストから解決したリソース ID(MASTRA_RESOURCE_ID_KEY)を使用し、ユーザーごとに自動分離します。key?:
{ agentId, scope, model, prompt, stepNumber } を受け取りキーを返す関数を渡します。関数が例外をスローした場合、Processor は決定論的ハッシュへフォールバックするため、呼び出しは引き続きキャッシュを利用できます。bust?:
agentId?:
'mastra-response-cache' です。キャッシュエントリを Agent ごとにスコープする場合は、所有する Agent の ID を設定します。静的ヘルパー静的ヘルパーへの直接リンク
ResponseCache は、RequestContext に呼び出しごとのオーバーライドを設定する2つの静的ヘルパーを公開します。これらのヘルパーにより、内部のコンテキストキーは非公開の実装詳細として維持されます。生のキーを直接読み書きせず、ヘルパーを使用してください。
ResponseCache.context(options)responsecachecontextoptionsへの直接リンク
呼び出しごとのレスポンスキャッシュのオーバーライドを事前に読み込んだ、新しい RequestContext を作成します。
await agent.stream('hello', {
requestContext: ResponseCache.context({ key: 'custom', bust: true }),
})
ResponseCache.applyContext(requestContext, options)responsecacheapplycontextrequestcontext-optionsへの直接リンク
既存の RequestContext に、呼び出しごとのレスポンスキャッシュのオーバーライドをマージします。チェーンできるよう、同じコンテキストを返します。
const ctx = new RequestContext()
ctx.set('caller-meta', { userId: 'u-123' })
ResponseCache.applyContext(ctx, { bust: true })
await agent.stream('hello', { requestContext: ctx })
ResponseCacheContextOptionsResponseCacheContextOptionsへの直接リンク
ResponseCache.context() / ResponseCache.applyContext() に渡す形式です。
key?:
scope?:
null を指定するとスコープを無効にします。bust?:
cache、ttl、agentId は、意図的に呼び出しごとのオーバーライドを許可していません。これらはリクエストごとに変えるべきではない、インスタンスレベルの設定です。
ResponseCacheKeyInputsResponseCacheKeyInputsへの直接リンク
(コンストラクターまたは呼び出しごとの)key 関数に渡す引数です。デフォルトでは、すべてのフィールドが決定論的ハッシュに反映されます。
agentId:
scope?:
null です。model:
prompt:
stepNumber:
ヘルパーのエクスポートヘルパーのエクスポートへの直接リンク
buildResponseCacheKey(inputs):デフォルトで使用される決定論的ハッシュ。標準のキー形式の残りを維持したまま個々のフィールドをオーバーライドするために、再エクスポートできます。DEFAULT_RESPONSE_CACHE_TTL_SECONDS:デフォルトのttl(300)。RESPONSE_CACHE_CONTEXT_KEY:静的ヘルパーが書き込むRequestContextキー。オーバーライドをパイプラインの途中で消去する場合など、高度な用途向けに公開されています。通常はヘルパーを使用してください。