メインコンテンツへ移動

summarizeConversation()

スタンドアロンの summarizeConversation() 関数は、会話を一度の呼び出しで要約します。渡したメッセージを、Observational Memory を支えるものと同じ Observer の仕組みで要約します。Agent に Observational Memory を関連付ける必要はなく、ストレージの読み書きも行いません。

Memory には何も書き戻されません。要約と抽出された値は、呼び出し元(および各 Extractor の onExtracted Hook)へ返されるため、独自のデータベースなど、保存先を自分で決められます。

メッセージがすでに手元にあり、要約対象を明示的に制御したい場合に使います。ID で識別される保存済みスレッドには、メッセージを自動的に読み込む Memory.summarizeThread() を使ってください。

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

import { summarizeConversation } from '@mastra/memory'

const result = await summarizeConversation({
model: 'openai/gpt-5-mini',
messages,
instructions: 'Summarize this voicemail call for the business owner.',
})

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

model:

string | LanguageModel | DynamicModel
要約を実行するモデル。'__GATEWAY_OPENAI_MODEL_MINI__' のようなルーター文字列などを指定します。

messages:

MastraDBMessage[]
要約する会話。空の場合、モデルを呼び出さずに空の結果を返します。

instructions?:

string
要約対象の重点や要約の対象読者など、Summarizer のシステムプロンプトに追加する指示。

extract?:

Extractor[]
会話に対して実行する Extractor。Zod スキーマを持つ Extractor は、後続の構造化出力呼び出しとして実行されます。スキーマのない Extractor はインラインで抽出されます。各 Extractor の onExtracted Hook は、抽出された値を受け取って実行されます。

threadId?:

string
会話が属するスレッド。デフォルトでは、messages で最初に見つかった threadId を使います。Extractor の Context に渡されます。

resourceId?:

string
会話が属するリソース(ユーザー)。デフォルトでは、messages で最初に見つかった resourceId を使います。Extractor の Context に渡されます。

memory?:

Memory
Extractor の Context に転送する Memory インスタンス。Memory.summarizeThread() 経由で呼び出す場合は自動的に設定されます。

mastra?:

Mastra
カスタム Gateway モデルの解決に使う Mastra インスタンス。Memory.summarizeThread() 経由で呼び出す場合は自動的に設定されます。

requestContext?:

RequestContext
Summarizer モデルと Extractor Hook に転送する Request Context。

abortSignal?:

AbortSignal
要約呼び出しをキャンセルするための Signal。

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

summary:

string
会話から抽出・集約された観察結果。情報量の多い箇条書き形式で返されます。

extracted:

Record<string, unknown>
extract の Extractor が生成した値。Extractor の slug をキーとします。

extractionFailures:

{ slug: string; error: string }[]
有効な値を生成できなかった Extractor とその理由。1 つ以上の Extractor が失敗した場合にのみ存在します。

usage:

{ inputTokens?: number; outputTokens?: number; totalTokens?: number }
要約呼び出しの Token 使用量。

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

次の例では、アプリケーションがすでに保持しているメッセージから進行中の音声セッションを要約し、構造化レコードを抽出します。

src/session-summary.ts
import { summarizeConversation, Extractor } from '@mastra/memory'
import type { MastraDBMessage } from '@mastra/core/agent'
import { z } from 'zod'
import { sessionRecords } from './db'

const sessionSummary = new Extractor({
name: 'session-summary',
instructions: 'Return a concise summary of the session.',
schema: z.object({
summary: z.string(),
sentiment: z.enum(['positive', 'neutral', 'negative']),
followUps: z.array(z.string()),
}),
metadataKeyPath: false, // don't persist into memory metadata — the hook owns storage
onExtracted: async ({ current, threadId }) => {
await sessionRecords.upsert({ sessionId: threadId, record: current })
},
})

export async function onSessionEnd(messages: MastraDBMessage[]) {
const { summary, extracted, extractionFailures } = await summarizeConversation({
model: 'openai/gpt-5-mini',
messages,
instructions: 'Summarize this support session for the account manager.',
extract: [sessionSummary],
})

if (extractionFailures?.length) {
console.warn('Some extractors failed', extractionFailures)
}

return { summary, extracted }
}