메모리
메모리 동작 방식
섹션 제목: “메모리 동작 방식”에이전트는 대화 컨텍스트를 유지하기 위해 슬라이딩 윈도우 메모리를 사용합니다. 시스템 메시지는 항상 보존됩니다. 윈도우가 가득 차면 오래된 메시지가 삭제됩니다.
[system] 항상 보존[user] 메시지 1 <- 윈도우가 가득 차면 삭제될 수 있음[assistant] 응답 1 <- 윈도우가 가득 차면 삭제될 수 있음...[user] 최신 <- 항상 유지[assistant] 최신 <- 항상 유지const agent = new Agent({ name: "Chat Bot", instructions: "You are helpful.", memory: { maxMessages: 100 }, transport: schift.transport,});| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
maxMessages | number | 50 | 유지할 최대 메시지 수 |
transformContext | (messages: ChatMessage[]) => ChatMessage[] | — | 각 LLM 호출 전 메시지 변환 |
컨텍스트 변환
섹션 제목: “컨텍스트 변환”transformContext로 LLM에 보내기 전 메시지를 수정할 수 있습니다. 오래된 메시지 요약, 컨텍스트 주입, 필터링에 유용합니다:
const agent = new Agent({ memory: { maxMessages: 100, transformContext: (messages) => { // 긴 도구 결과를 잘라서 토큰 절약 return messages.map((m) => m.role === "tool" && m.content.length > 2000 ? { ...m, content: m.content.slice(0, 2000) + "..." } : m, ); }, }, ...});기본적으로 Stateless
섹션 제목: “기본적으로 Stateless”각 agent.run() 호출은 새로운 메모리를 생성합니다. 시스템 메시지와 사용자 입력은 자동으로 추가됩니다.
멀티턴 대화의 경우 대화 상태를 외부에서 관리하세요:
// 간단한 멀티턴 패턴const messages: string[] = [];
async function chat(userMessage: string) { messages.push(userMessage); const result = await agent.run(messages.join("\n---\n")); return result.output;}메모리와 도구 호출
섹션 제목: “메모리와 도구 호출”ReAct 루프 중에 도구 호출과 결과가 메모리에 저장되어 LLM이 이전 도구 출력을 참조할 수 있습니다:
[system] instructions[user] "What's the weather?"[assistant] [Tool call: get_weather({"city": "Seoul"})][tool] {"temperature": 22}[assistant] "It's 22C in Seoul." <- 최종 답변