メモリの概要
メモリは、エージェントが利用可能なコンテキストを管理する方法であり、すべてのチャットメッセージをコンテキストウィンドウに凝縮したものです。
コンテキストウィンドウ
コンテキストウィンドウは、言語モデルが任意の時点で見ることができる情報の総量です。
Mastraでは、コンテキストは3つの部分に分かれています:システム指示とユーザーに関する情報(ワーキングメモリ)、最近のメッセージ(メッセージ履歴)、そしてユーザーのクエリに関連する古いメッセージ(セマンティック検索)です。
さらに、コンテキストが長すぎる場合にコンテキストをトリミングしたり情報を削除したりするためのメモリプロセッサを提供しています。
クイックスタート
メモリを動作させる最も速い方法は、組み込みの開発プレイグラウンドを使用することです。
まだ行っていない場合は、メインのスタートガイドに従って新しいMastraプロジェクトを作成してください。
1. メモリパッケージをインストールします:
npm install @mastra/memory@latest
2. エージェントを作成し、Memory
インスタンスを接続します:
import { Agent } from "@mastra/core/agent";
import { Memory } from "@mastra/memory";
import { openai } from "@ai-sdk/openai";
export const myMemoryAgent = new Agent({
name: "MemoryAgent",
instructions: "...",
model: openai("gpt-4o"),
memory: new Memory(),
});
3. 開発サーバーを起動します:
npm run dev
4. プレイグラウンド(http://localhost:4111)を開き、`MemoryAgent`を選択します:
いくつかのメッセージを送信して、ターンをまたいで情報を記憶していることに注目してください:
➡️ あなた: 私の好きな色は青です。
⬅️ エージェント: わかりました!あなたの好きな色が青であることを覚えておきます。
➡️ あなた: 私の好きな色は何ですか?
⬅️ エージェント: あなたの好きな色は青です。
メモリースレッド
Mastraはメモリーをスレッドに整理します。スレッドは特定の会話履歴を識別する記録であり、次の2つの識別子を使用します:
threadId
: 特定の会話ID(例:support_123
)。resourceId
: 各スレッドを所有するユーザーまたはエンティティID(例:user_123
、org_456
)。
const response = await myMemoryAgent.stream("Hello, my name is Alice.", {
resourceId: "user_alice",
threadId: "conversation_123",
});
重要: これらのIDがなければ、メモリーが適切に設定されていても、エージェントはメモリーを使用しません。プレイグラウンドではこれが自動的に処理されますが、アプリケーションでメモリーを使用する場合は自分でIDを追加する必要があります。
会話履歴
デフォルトでは、Memory
インスタンスは現在のMemoryスレッドから最新の40メッセージを各新規リクエストに含めます。これにより、エージェントに即時の会話コンテキストが提供されます。
const memory = new Memory({
options: {
lastMessages: 10,
},
});
重要: 各エージェント呼び出しでは、最新のユーザーメッセージのみを送信してください。Mastraは必要な履歴の取得と注入を処理します。履歴全体を自分で送信すると重複が発生します。useChat
フロントエンドフックを使用する場合の処理方法については、AI SDK Memoryの例を参照してください。
ストレージ設定
会話履歴はメッセージを保存するためにストレージアダプターに依存しています。 デフォルトでは、Mastraメインインスタンス に提供されたのと同じストレージを使用します。
import { Memory } from "@mastra/memory";
import { Agent } from "@mastra/core/agent";
import { LibSQLStore } from "@mastra/libsql";
const agent = new Agent({
memory: new Memory({
storage: new LibSQLStore({
url: "file:./local.db",
}),
}),
});
ストレージコードの例:
次のステップ
コアコンセプトを理解したところで、セマンティック検索に進んで、MastraエージェントにRAGメモリを追加する方法を学びましょう。