본문으로 건너뛰기

요약대화()

독립형summarizeConversation()기능은 대화를 한 번에 요약합니다. 이는 귀하가 전달하는 메시지를 동일한 Observer 배관을 통해 정제합니다.관찰 기억: Agent에 관찰 Memory가 부착되지 않고 스토리지에서 읽거나 쓰지 않습니다.

Memory에는 아무것도 다시 기록되지 않습니다. 요약과 추출된 값은 사용자에게 반환되며 각 추출기의 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__' 같은 라우터 문자열 등 요약을 실행하는 Model입니다.

messages:

MastraDBMessage[]
요약할 대화입니다. 비어 있으면 Model을 호출하지 않고 빈 결과를 반환합니다.

instructions?:

string
집중할 내용이나 요약의 대상 독자 등 요약기의 시스템 Prompt에 추가할 지침입니다.

extract?:

Extractor[]
대화에 실행할 추출기입니다. Zod 스키마가 있는 추출기는 후속 구조화 출력 호출로 실행되고, 스키마가 없는 추출기는 인라인으로 추출됩니다. 각 추출기의 onExtracted hook은 추출된 값과 함께 호출됩니다.

threadId?:

string
대화가 속한 스레드입니다. 기본값은 messages에서 처음 발견된 threadId입니다. 추출기 컨텍스트에 전달됩니다.

resourceId?:

string
대화가 속한 리소스(사용자)입니다. 기본값은 messages에서 처음 발견된 resourceId입니다. 추출기 컨텍스트에 전달됩니다.

memory?:

Memory
추출기 컨텍스트에 전달되는 Memory 인스턴스입니다. Memory.summarizeThread()를 통해 호출하면 자동으로 설정됩니다.

mastra?:

Mastra
사용자 지정 게이트웨이 Model을 확인하는 데 사용하는 Mastra 인스턴스입니다. Memory.summarizeThread()를 통해 호출하면 자동으로 설정됩니다.

requestContext?:

RequestContext
요약기 Model과 추출기 hook에 전달되는 요청 컨텍스트입니다.

abortSignal?:

AbortSignal
요약 호출을 취소하는 신호입니다.

보고
보고에 대한 직접 링크

summary:

string
대화에서 추출한 핵심 관찰을 밀도 높은 글머리 기호 형식으로 제공합니다.

extracted:

Record<string, unknown>
extract 추출기가 생성한 값이며 추출기 slug를 키로 사용합니다.

extractionFailures:

{ slug: string; error: string }[]
유효한 값을 생성하지 못한 추출기와 실패 이유입니다. 하나 이상의 추출기가 실패한 경우에만 존재합니다.

usage:

{ inputTokens?: number; outputTokens?: number; totalTokens?: number }
요약 호출의 토큰 사용량입니다.

확장된 사용 예
확장된 사용 예에 대한 직접 링크

다음 예에서는 애플리케이션이 이미 보유하고 있는 메시지에서 진행 중인 음성 세션을 요약하고 구조화된 레코드를 추출합니다.

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 }
}