콘텐츠로 이동

메모리

에이전트는 대화 컨텍스트를 유지하기 위해 슬라이딩 윈도우 메모리를 사용합니다. 시스템 메시지는 항상 보존됩니다. 윈도우가 가득 차면 오래된 메시지가 삭제됩니다.

[system] 항상 보존
[user] 메시지 1 <- 윈도우가 가득 차면 삭제될 수 있음
[assistant] 응답 1 <- 윈도우가 가득 차면 삭제될 수 있음
...
[user] 최신 <- 항상 유지
[assistant] 최신 <- 항상 유지
const agent = new Agent({
name: "Chat Bot",
instructions: "You are helpful.",
memory: { maxMessages: 100 },
transport: schift.transport,
});
옵션타입기본값설명
maxMessagesnumber50유지할 최대 메시지 수
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,
);
},
},
...
});

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." <- 최종 답변