メモリプロセッサ
エージェントに渡す前に、メモリプロセッサを使って想起されたメッセージをフィルタリング、変換、または制限します。これらの例では、トークン上限の適用、ツール呼び出しの除外、カスタムプロセッサの実装方法を示します。
前提条件
この例では openai
モデルを使用します。.env
ファイルに OPENAI_API_KEY
を追加してください。
OPENAI_API_KEY=<your-api-key>
次のパッケージをインストールします:
npm install @mastra/libsql
エージェントにメモリを追加する
エージェントに LibSQL のメモリを追加するには、Memory
クラスを使用し、LibSQLStore
を用いて storage
インスタンスを渡します。url
はリモートの場所またはローカルファイルを指せます。
メモリプロセッサの設定
workingMemory.enabled
を true
に設定してワーキングメモリを有効化します。これにより、エージェントは対話間で構造化された情報を記憶できます。この例では、TokenLimiter
でリコールされるトークン数を制限し、ToolCallFilter
でツール呼び出しを除外するメモリプロセッサも使用しています。
import { Memory } from "@mastra/memory";
import { TokenLimiter, ToolCallFilter } from "@mastra/memory/processors";
import { Agent } from "@mastra/core/agent";
import { openai } from "@ai-sdk/openai";
import { LibSQLStore } from "@mastra/libsql";
export const memoryProcessorAgent = new Agent({
name: "memory-processor-agent",
instructions: "You are an AI agent with the ability to automatically recall memories from previous interactions.",
model: openai("gpt-4o"),
memory: new Memory({
storage: new LibSQLStore({
url: "file:memory-processor.db"
}),
processors: [new TokenLimiter(127000), new ToolCallFilter()],
options: {
workingMemory: {
enabled: true
},
threads: {
generateTitle: true
}
}
})
});
トークンリミッターの使用
トークンリミッターは、リコールされたメッセージをトリミングしてエージェントに渡すトークン数を制御します。これによりコンテキストサイズを管理し、モデルの上限超過を防げます。
import { Memory } from "@mastra/memory";
import { TokenLimiter } from "@mastra/memory/processors";
export const memoryProcessorAgent = new Agent({
// ...
memory: new Memory({
// ...
processors: [new TokenLimiter(127000)],
}),
});
トークンエンコーディングの使用
js-tiktoken
パッケージの cl100k_base
など、特定のエンコーディングを指定してトークンのカウント方法をカスタマイズできます。これにより、モデルごとに正確なトークン上限を確保できます。
import { Memory } from "@mastra/memory";
import { TokenLimiter } from "@mastra/memory/processors";
import cl100k_base from "js-tiktoken/ranks/cl100k_base";
export const memoryProcessorAgent = new Agent({
// ...
memory: new Memory({
// ...
processors: [
new TokenLimiter({
limit: 16000,
encoding: cl100k_base,
}),
],
}),
});
ツール呼び出しのフィルタリング
ToolCallFilter
プロセッサは、特定のツール呼び出しとその結果をメモリから除去します。ログ出力や画像生成などのツールを除外することでノイズを減らし、エージェントのフォーカスを維持できます。
import { Memory } from "@mastra/memory";
import { ToolCallFilter } from "@mastra/memory/processors";
export const memoryProcessorAgent = new Agent({
// ...
memory: new Memory({
// ...
processors: [
new ToolCallFilter({
exclude: ["exampleLoggerTool", "exampleImageGenTool"],
}),
],
}),
});
カスタムプロセッサの作成
カスタムメモリプロセッサは MemoryProcessor
クラスを拡張して作成でき、エージェントに送信する前に、想起されたメッセージ一覧に独自のロジックを適用できます。
import { MemoryProcessor } from "@mastra/core/memory";
import type { CoreMessage } from "@mastra/core";
export class RecentMessagesProcessor extends MemoryProcessor {
private limit: number;
constructor(limit: number = 10) {
super({ name: "RecentMessagesProcessor" });
this.limit = limit;
}
process(messages: CoreMessage[]): CoreMessage[] {
return messages.slice(-this.limit);
}
}
カスタムプロセッサの使用
この例では、RecentMessagesProcessor
を上限 5
で使用し、メモリから直近の5件のメッセージのみを返します。
import { Memory } from "@mastra/memory";
import { ToolCallFilter } from "@mastra/memory/processors";
import { RecentMessagesProcessor } from "../processors/example-recent-messages-processor";
export const memoryProcessorAgent = new Agent({
// ...
memory: new Memory({
// ...
processors: [new RecentMessagesProcessor(5)],
}),
});