メインコンテンツへ移動

MessageHistory

MessageHistory は、メッセージ履歴の取得と永続化の両方を処理する ハイブリッド Processor です。入力時にはストレージから過去のメッセージを取得して会話の先頭に追加し、出力時には新しいメッセージをストレージに永続化します。

使用例
使用例への直接リンク

import { MessageHistory } from '@mastra/core/processors'

const processor = new MessageHistory({
storage: memoryStorage,
lastMessages: 50,
})

コンストラクターパラメーター
コンストラクターパラメーターへの直接リンク

options:

MessageHistoryOptions
メッセージ履歴 Processor の設定オプション
MessageHistoryOptions

storage:

MemoryStorage
メッセージの取得と永続化に使用するストレージインスタンス

lastMessages?:

number
取得する過去のメッセージの最大数。指定しない場合はすべてのメッセージを取得します

戻り値
戻り値への直接リンク

id:

string
'message-history' に設定された Processor の識別子

name:

string
'MessageHistory' に設定された Processor の表示名

processInput:

(args: { messages: MastraDBMessage[]; messageList: MessageList; abort: (reason?: string) => never; tracingContext?: TracingContext; requestContext?: RequestContext }) => Promise<MessageList | MastraDBMessage[]>
ストレージから過去のメッセージを取得し、メッセージリストに追加します

processOutputResult:

(args: { messages: MastraDBMessage[]; messageList: MessageList; abort: (reason?: string) => never; tracingContext?: TracingContext; requestContext?: RequestContext }) => Promise<MessageList>
System メッセージを除き、新しいメッセージ(ユーザー入力と Assistant の応答)をストレージに永続化します

詳細な使用例
詳細な使用例への直接リンク

src/mastra/agents/memory-agent.ts
import { Agent } from '@mastra/core/agent'
import { MessageHistory } from '@mastra/core/processors'
import { PostgresStorage } from '@mastra/pg'

const storage = new PostgresStorage({
connectionString: process.env.DATABASE_URL,
})

export const agent = new Agent({
id: 'memory-agent',
name: 'memory-agent',
instructions: 'You are a helpful assistant with conversation memory',
model: 'openai/gpt-5.6-sol',
inputProcessors: [
new MessageHistory({
storage,
lastMessages: 100,
}),
],
outputProcessors: [
new MessageHistory({
storage,
}),
],
})

動作
動作への直接リンク

入力処理
入力処理への直接リンク

  1. Request コンテキストから threadId を取得します
  2. ストレージから過去のメッセージを取得します(作成日時の降順)
  3. System メッセージを除外します(データベースに保存しないため)
  4. ID の重複を避けながら、過去のメッセージと受信メッセージを統合します
  5. 過去のメッセージに source: 'memory' タグを追加します

出力処理
出力処理への直接リンク

  1. Request コンテキストから threadId を取得します
  2. Memory 設定で readOnly が指定されている場合は永続化をスキップします
  3. メッセージから未完了の Tool 呼び出しを除外します
  4. 新しいユーザー入力と Assistant の応答メッセージをストレージに永続化します
  5. Thread の updatedAt タイムスタンプを更新します