メモリのスレッドとリソース
Mastra はメモリをスレッドとして整理します。スレッドは関連するやり取りをまとめた記録で、次の2つの識別子を使用します。
thread
: 会話を表すグローバルに一意な ID(例:support_123
)。すべてのリソースをまたいで一意である必要があります。resource
: スレッドの所有者であるユーザーまたはエンティティ(例:user_123
,org_456
)。
resource
は特にリソーススコープのメモリにおいて重要で、同じユーザーまたはエンティティに関連するすべてのスレッド間でメモリを永続化できます。
const stream = await agent.stream("エージェントへのメッセージ", {
memory: {
thread: "user-123",
resource: "test-123"
}
});
メモリを設定していても、thread
と resource
の両方が指定されない限り、エージェントは情報を保存したり参照したりしません。
Mastra Playground は
thread
とresource
の ID を自動で設定します。独自のアプリケーションでは、各.generate()
または.stream()
呼び出しで手動指定する必要があります。
スレッドタイトルの生成
Mastra はユーザーの最初のメッセージに基づいて、わかりやすいスレッドタイトルを自動生成できます。これを有効にするには、generateTitle
を true
に設定します。これにより整理がしやすくなり、UI 上で会話を表示しやすくなります。
export const testAgent = new Agent({
memory: new Memory({
options: {
threads: {
generateTitle: true,
}
},
})
});
タイトル生成は、エージェントの応答後に非同期で実行され、応答時間には影響しません。詳細と例については、設定全体のリファレンスを参照してください。
タイトル生成の最適化
タイトルは既定でエージェントのモデルを使って生成されます。コストや振る舞いを最適化するには、より小さい model
とカスタムの instructions
を指定してください。これにより、タイトル生成をメインの会話ロジックと切り離せます。
export const testAgent = new Agent({
// ...
memory: new Memory({
options: {
threads: {
generateTitle: {
model: openai("gpt-4.1-nano"),
instructions: "ユーザーの最初のメッセージに基づいて簡潔なタイトルを生成してください",
},
},
}
})
});
動的なモデル選択と指示
model
と instructions
に関数を渡すことで、スレッドタイトルの生成を動的に設定できます。これらの関数は runtimeContext
オブジェクトを受け取り、ユーザー固有の値に応じてタイトル生成を調整できます。
export const testAgent = new Agent({
// ...
memory: new Memory({
options: {
threads: {
generateTitle: {
model: ({ runtimeContext }) => {
const userTier = runtimeContext.get("userTier");
return userTier === "premium" ? openai("gpt-4.1") : openai("gpt-4.1-nano");
},
instructions: ({ runtimeContext }) => {
const language = runtimeContext.get("userLanguage") || "日本語";
return `ユーザーの最初のメッセージに基づいて、${language}で簡潔で魅力的なタイトルを生成してください。`;
}
}
}
}
})
});