Skip to Content
リファレンスメモリメモリクラス

Memory クラスリファレンス

Memory クラスは、Mastraで会話履歴とスレッドベースのメッセージストレージを管理するための堅牢なシステムを提供します。会話の永続的な保存、セマンティック検索機能、効率的なメッセージ取得を可能にします。デフォルトでは、ストレージとベクトル検索にLibSQLを使用し、埋め込みにFastEmbedを使用します。

基本的な使い方

import { Memory } from "@mastra/memory"; import { Agent } from "@mastra/core/agent"; const agent = new Agent({ memory: new Memory(), ...otherOptions, });

カスタム設定

import { Memory } from "@mastra/memory"; import { LibSQLStore, LibSQLVector } from "@mastra/libsql"; import { Agent } from "@mastra/core/agent"; const memory = new Memory({ // Optional storage configuration - libsql will be used by default storage: new LibSQLStore({ url: "file:./memory.db", }), // Optional vector database for semantic search - libsql will be used by default vector: new LibSQLVector({ url: "file:./vector.db", }), // Memory configuration options options: { // Number of recent messages to include lastMessages: 20, // Semantic search configuration semanticRecall: { topK: 3, // Number of similar messages to retrieve messageRange: { // Messages to include around each result before: 2, after: 1, }, }, // Working memory configuration workingMemory: { enabled: true, template: ` # User - First Name: - Last Name: `, }, }, }); const agent = new Agent({ memory, ...otherOptions, });

ワーキングメモリ

ワーキングメモリ機能により、エージェントは会話全体で永続的な情報を維持することができます。有効にすると、Memoryクラスはテキストストリームタグまたはツールコールを通じて、ワーキングメモリの更新を自動的に管理します。

ワーキングメモリの更新を処理するには、2つのモードがあります:

  1. text-stream(デフォルト):エージェントはMarkdownを含むXMLタグ(<working_memory># User \n ## Preferences...</working_memory>)を使用して、直接レスポンスにワーキングメモリの更新を含めます。これらのタグは自動的に処理され、表示される出力からは削除されます。

  2. tool-call:エージェントはワーキングメモリを更新するための専用ツールを使用します。このモードはtoDataStream()と連携する場合に使用すべきです。なぜならtext-streamモードはデータストリーミングと互換性がないためです。さらに、このモードはメモリ更新に対するより明示的な制御を提供し、テキストタグの管理よりもツールの使用が得意なエージェントと連携する場合に好まれることがあります。

設定例:

const memory = new Memory({ options: { workingMemory: { enabled: true, template: "# User\n- **First Name**:\n- **Last Name**:", use: "tool-call", // または 'text-stream' }, }, });

テンプレートが提供されない場合、Memoryクラスはユーザーの詳細、設定、目標、およびその他の文脈情報をMarkdown形式で含むデフォルトのテンプレートを使用します。詳細な使用例とベストプラクティスについては、ワーキングメモリガイドを参照してください。

embedder

semanticRecallが有効になっている場合、埋め込みモデルが必要です。

一つのオプションは@mastra/fastembedを使用することです。これはFastEmbedを使用したオンデバイス/ローカルの埋め込みモデルを提供します。このモデルはローカルで実行され、APIキーやネットワークリクエストを必要としません。

使用するには、まずパッケージをインストールします:

npm install @mastra/fastembed

次に、Memoryインスタンスで設定します:

import { Memory } from "@mastra/memory"; import { fastembed } from "@mastra/fastembed"; import { Agent } from "@mastra/core/agent"; const agent = new Agent({ memory: new Memory({ embedder: fastembed, // ... その他のメモリ設定 }), });

プロジェクトをデプロイする場所によっては、FastEmbedの大きな内部依存関係のため、プロジェクトがデプロイできない場合があることに注意してください。

あるいは、OpenAIのようなAPIベースの埋め込みツール(この問題がない)を使用することもできます:

import { Memory } from "@mastra/memory"; import { openai } from "@ai-sdk/openai"; import { Agent } from "@mastra/core/agent"; const agent = new Agent({ memory: new Memory({ embedder: openai.embedding("text-embedding-3-small"), }), });

MastraはVercel AI SDKを通じて、OpenAI、Google、Mistral、Cohereなどのオプションを含む多くの埋め込みモデルをサポートしています。

パラメータ

storage?:

MastraStorage
メモリデータを永続化するためのストレージ実装

vector?:

MastraVector
セマンティック検索機能のためのベクトルストア

embedder?:

EmbeddingModel
ベクトル埋め込みのためのエンベッダーインスタンス。デフォルトではFastEmbed(bge-small-en-v1.5)を使用

options?:

MemoryConfig
一般的なメモリ設定オプション

options

lastMessages?:

number | false
= 40
取得する最新メッセージの数。無効にするにはfalseに設定します。

semanticRecall?:

boolean | SemanticRecallConfig
= false(ベクトルストアが提供されている場合はtrue)
メッセージ履歴でのセマンティック検索を有効にします。ベクトルストアが提供されると自動的に有効になります。

topK?:

number
= 2
セマンティック検索を使用する際に取得する類似メッセージの数

messageRange?:

number | { before: number; after: number }
= 2
セマンティック検索結果の周囲に含めるメッセージの範囲

workingMemory?:

{ enabled: boolean; template?: string; use?: 'text-stream' | 'tool-call' }
= { enabled: false, template: '# User Information\n- **First Name**:\n- **Last Name**:\n...', use: 'text-stream' }
会話間でユーザー情報を永続的に保存できるワーキングメモリ機能の設定。'use'設定は、ワーキングメモリの更新がテキストストリームタグを通じて処理されるか、ツール呼び出しを通じて処理されるかを決定します。ワーキングメモリはマークダウン形式を使用して、継続的に関連する情報を構造化して保存します。

threads?:

{ generateTitle?: boolean }
= { generateTitle: true }
メモリスレッド作成に関する設定。`generateTitle`を設定すると、ユーザーの最初のメッセージからLLMの要約によってthread.titleが生成されます。

関連項目