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:
newThreadId?:
resourceId?:
title?:
Clone of ${sourceThread.title}을 사용합니다. 그렇지 않으면 제목은 비어 있습니다.metadata?:
options?:
messageLimit?:
messageFilter?:
startDate?:
endDate?:
messageIds?:
보고보고에 대한 직접 링크
thread:
clonedMessages:
messageIdMap?:
메타데이터 복제메타데이터 복제에 대한 직접 링크
복제된 스레드의 메타데이터에는 다음 항목을 가진 clone 속성이 포함됩니다.
sourceThreadId:
clonedAt:
lastMessageId?:
확장된 사용 예확장된 사용 예에 대한 직접 링크
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.id와 thread.resourceId를 agent.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가 복제된 스레드에 복사됩니다.
- 동일한 리소스 범위의 작업 Memory
resourceId: 원본 스레드와 복제된 스레드가 동일한 리소스에 속하므로 작업 Memory가 공유됩니다. - 다른 리소스 범위의 작업 Memory
resourceId: 작업 Memory가 복제된 스레드의 리소스에 복사됩니다.
관찰 기억관찰 기억에 대한 직접 링크
Observational Memory가 활성화되면 cloneThread()는 원본 스레드와 연결된 OM 레코드를 자동으로 복제합니다. 동작은 OM 범위에 따라 달라집니다.
- 스레드 범위 OM: OM 레코드가 새 스레드에 복제됩니다. 모든 내부 메시지 ID 참조는 복제된 메시지를 가리키도록 다시 매핑됩니다.
- 리소스 범위 OM(동일
resourceId): OM 레코드는 동일한 리소스에 속하므로 소스 스레드와 복제된 스레드 간에 공유됩니다. 중복이 발생하지 않습니다. - 리소스 범위 OM(다른
resourceId): OM 레코드가 새 리소스에 복제됩니다. 메시지 ID가 다시 매핑되고 관찰 내의 스레드 식별 태그가 복제된 스레드를 참조하도록 업데이트됩니다.
현재(가장 최근) OM 세대만 복제됩니다. 이전 기록 세대는 복사되지 않습니다. 일시적인 처리 상태(관찰/반영 진행 중 플래그)는 복제된 기록에서 재설정됩니다.