본문으로 건너뛰기

Memory.cloneThread()

그만큼.cloneThread()메서드는 모든 메시지를 포함하여 기존 대화 스레드의 복사본을 만듭니다. 대화의 특정 지점에서 다양한 대화 경로 생성을 지원합니다. 의미적 회상이 활성화되면 이 메서드는 복제된 메시지에 대한 벡터 임베딩도 생성합니다.

사용예
사용예에 대한 직접 링크

다음 예에서는 Memory 인스턴스를 만들고 기존 스레드를 복제합니다.

import { Memory } from '@mastra/memory'
import { LibSQLStore } from '@mastra/libsql'

const memory = new Memory({
storage: new LibSQLStore({ id: 'memory-store', url: 'file:./memory.db' }),
})

const { thread, clonedMessages } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
})

매개변수
매개변수에 대한 직접 링크

sourceThreadId:

string
복제할 스레드의 ID

newThreadId?:

string
복제된 스레드에 사용할 선택적 사용자 정의 ID입니다. 제공하지 않으면 자동으로 생성됩니다.

resourceId?:

string
복제된 스레드에 사용할 선택적 리소스 ID입니다. 기본값은 원본 스레드의 resourceId입니다.

title?:

string
복제된 스레드에 사용할 선택적 제목입니다. 생략하고 원본 스레드에 제목이 있으면 복제본은 Clone of ${sourceThread.title}을 사용합니다. 그렇지 않으면 제목은 비어 있습니다.

metadata?:

Record<string, unknown>
원본 스레드의 메타데이터와 병합할 선택적 메타데이터입니다. 복제 메타데이터는 자동으로 추가됩니다.

options?:

CloneOptions
복제 작업을 위한 선택적 필터링 옵션입니다.
CloneOptions

messageLimit?:

number
복제할 최대 메시지 수입니다. 설정하면 가장 최근 메시지 N개를 복제합니다.

messageFilter?:

MessageFilter
복제할 메시지를 선택하기 위한 필터 조건입니다.
MessageFilter

startDate?:

Date
이 날짜 이후(해당 날짜 포함)에 생성된 메시지만 복제합니다.

endDate?:

Date
이 날짜 이전(해당 날짜 포함)에 생성된 메시지만 복제합니다.

messageIds?:

string[]
지정된 ID를 가진 메시지만 복제합니다.

보고
보고에 대한 직접 링크

thread:

StorageThreadType
복제 메타데이터가 포함된 새로 생성된 복제 스레드입니다.

clonedMessages:

MastraDBMessage[]
새 스레드에 할당된 새 ID를 가진 복제 메시지 배열입니다.

messageIdMap?:

Record<string, string>
원본 메시지 ID와 해당 복제 메시지 ID 간의 매핑입니다.

메타데이터 복제
메타데이터 복제에 대한 직접 링크

복제된 스레드의 메타데이터에는 다음 항목을 가진 clone 속성이 포함됩니다.

sourceThreadId:

string
복제된 원본 스레드의 ID입니다.

clonedAt:

Date
복제본이 생성된 시점의 타임스탬프입니다.

lastMessageId?:

string
복제 시점에 원본 스레드에 있던 마지막 메시지의 ID입니다.

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

src/test-clone.ts
import { mastra } from './mastra'

const agent = mastra.getAgent('agent')
const memory = await agent.getMemory()

// Clone a thread with all messages
const { thread: fullClone } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
title: 'Alternative Conversation Path',
})

// Clone with a custom ID
const { thread: customIdClone } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
newThreadId: 'my-custom-clone-id',
})

// Clone only the last 5 messages
const { thread: partialClone, clonedMessages } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
options: {
messageLimit: 5,
},
})

// Clone messages from a specific date range
const { thread: dateFilteredClone } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
options: {
messageFilter: {
startDate: new Date('2024-01-01'),
endDate: new Date('2024-01-31'),
},
},
})

// Clone specific messages
const { thread: selectedMessagesClone } = await memory.cloneThread({
sourceThreadId: 'original-thread-123',
options: {
messageFilter: {
messageIds: ['message-1', 'message-2'],
},
},
})

// Continue conversation on the cloned thread
const response = await agent.generate('Try a different approach', {
memory: {
thread: fullClone.id,
resource: fullClone.resourceId,
},
})

복제된 스레드에서 대화를 계속하려면 복제된 thread.idthread.resourceIdagent.generate()에 전달합니다.

벡터 임베딩
벡터 임베딩에 대한 직접 링크

Memory 인스턴스에 벡터 저장소와 임베더가 구성되어 의미 체계 회상이 활성화된 경우, cloneThread()는 복제된 모든 메시지의 벡터 임베딩을 자동으로 생성합니다. 따라서 복제된 스레드에서도 의미 체계 검색이 올바르게 작동합니다. 이 예에서 embeddingModel은 프로젝트에 구성된 임베딩 Model입니다.

import { Memory } from '@mastra/memory'
import { LibSQLStore, LibSQLVector } from '@mastra/libsql'

const memory = new Memory({
storage: new LibSQLStore({ id: 'memory-store', url: 'file:./memory.db' }),
vector: new LibSQLVector({ id: 'vector-store', url: 'file:./vector.db' }),
embedder: embeddingModel,
options: {
semanticRecall: true,
},
})

// Clone will also create embeddings for cloned messages
const { thread } = await memory.cloneThread({
sourceThreadId: 'original-thread',
})

// Semantic search works on the cloned thread
const results = await memory.recall({
threadId: thread.id,
vectorSearchString: 'search query',
})

작업기억
작업기억에 대한 직접 링크

작업 Memory가 활성화되면 cloneThread()는 작업 Memory의 범위와 복제본의 resourceId에 따라 작업 Memory를 복사하거나 공유합니다.

  • 스레드 범위 작업 Memory: 작업 Memory가 복제된 스레드에 복사됩니다.
  • 동일한 리소스 범위의 작업 MemoryresourceId: 원본 스레드와 복제된 스레드가 동일한 리소스에 속하므로 작업 Memory가 공유됩니다.
  • 다른 리소스 범위의 작업 MemoryresourceId: 작업 Memory가 복제된 스레드의 리소스에 복사됩니다.

관찰 기억
관찰 기억에 대한 직접 링크

Observational Memory가 활성화되면 cloneThread()는 원본 스레드와 연결된 OM 레코드를 자동으로 복제합니다. 동작은 OM 범위에 따라 달라집니다.

  • 스레드 범위 OM: OM 레코드가 새 스레드에 복제됩니다. 모든 내부 메시지 ID 참조는 복제된 메시지를 가리키도록 다시 매핑됩니다.
  • 리소스 범위 OM(동일resourceId): OM 레코드는 동일한 리소스에 속하므로 소스 스레드와 복제된 스레드 간에 공유됩니다. 중복이 발생하지 않습니다.
  • 리소스 범위 OM(다른resourceId): OM 레코드가 새 리소스에 복제됩니다. 메시지 ID가 다시 매핑되고 관찰 내의 스레드 식별 태그가 복제된 스레드를 참조하도록 업데이트됩니다.

현재(가장 최근) OM 세대만 복제됩니다. 이전 기록 세대는 복사되지 않습니다. 일시적인 처리 상태(관찰/반영 진행 중 플래그)는 복제된 기록에서 재설정됩니다.