본문으로 건너뛰기

LLM 애플리케이션에서 메모리의 정체

LLM의 대화 기억은 모델 기능이 아니라 매 호출마다 전달하는 기록이다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

이 글은 LLM이 호출 사이에 사용자의 대화 내용을 자동으로 보존하지 않으며, 모델 가중치에 담긴 지식과 특정 대화를 기억하는 능력을 구분해야 한다고 설명합니다. 이전 대화를 다시 입력하면 모델은 그 기록을 바탕으로 답하지만, 전체 기록을 계속 전달하면 입력 비용과 지연이 늘고 컨텍스트 한도에 도달할 수 있습니다. 이를 줄이기 위해 최근 메시지만 남기거나 불필요한 내용을 제거하고 오래된 대화를 요약해 작은 형태의 대화 상태로 바꿉니다. 따라서 애플리케이션의 핵심 과제는 메모리를 모델에 기대는 것이 아니라 중요한 정보를 잃지 않으면서 입력 기록을 압축하는 데 있습니다.

실용적 조언

  • 대화 호출을 설계할 때 모델이 이전 요청을 자동으로 기억한다고 가정하지 말고, 필요한 messages를 매번 입력에 포함해야 합니다. 먼저 전체 기록을 전달하는 구조로 동작을 확인한 뒤 메시지 수와 토큰 증가를 측정하는 순서가 안전합니다. 이 구조를 알아야 새 창이나 새 세션에서 기록이 사라지는 현상을 모델 오류와 구분할 수 있습니다.
  • 대화가 길어지면 최근 메시지 보존, 불필요한 메시지 제거, 오래된 턴 요약을 각각 적용해 입력 크기를 줄일 수 있습니다. `trim_messages(messages, max_tokens=100, strategy="last")`처럼 최대 토큰과 보존 전략을 명시하면 처리 기준을 코드에 고정할 수 있습니다. 요약 분기는 글의 예시처럼 메시지 수가 6개를 넘는 조건에서 실행할 수 있지만, 실제 기준은 애플리케이션의 컨텍스트 한도와 보존해야 할 정보에 맞춰 정해야 합니다.

섹션별 상세

01
LLM은 학습 중 가중치에 들어간 사실 지식인 Parametric Memory와 특정 사용자 대화를 기억하는 Episodic Memory를 구분해야 합니다. 글의 예시에서 모델은 Paris의 수도 같은 학습 지식은 갖지만, 사용자가 방금 자신의 이름을 말했다는 사실은 호출 사이에 보존하지 못합니다. 새 호출에 과거 대화를 넣지 않으면 같은 사용자를 다시 만나는 상황에서도 이름을 답할 근거가 없습니다.
python
llm.invoke("What's my name?") # → "I don't know."

이전 대화 기록을 입력하지 않은 호출에서는 모델이 사용자의 이름을 알 수 없음을 보여주는 예시입니다.

02
대화형 앱이 기억하는 것처럼 보이는 이유는 애플리케이션이 이전 메시지를 매 호출의 입력으로 다시 전달하기 때문입니다. `HumanMessage("My name is Wang")`, `AIMessage("Hi Wang!")`, `HumanMessage("What's my name?")`를 하나의 messages 목록으로 보내면 모델은 그 입력 안에서 Wang이라는 이름을 찾아 답합니다. 이 방식은 구현이 단순하지만 대화가 길어질수록 전달해야 할 토큰이 늘어납니다.
python
messages = [HumanMessage("My name is Wang"), AIMessage("Hi Wang!"), HumanMessage("What's my name?")]
llm.invoke(messages) # → "Your name is Wang."

사용자 발화와 이전 AI 응답을 포함한 전체 메시지 목록을 다시 입력하면 모델이 이름을 답할 수 있음을 보여줍니다.

03
전체 기록을 계속 보내는 방식은 비용과 지연을 키우고 결국 컨텍스트 한도를 초과할 수 있습니다. 글은 최근 메시지만 남기는 Trim, 관련성 낮은 내용을 버리는 Filter, 오래된 턴을 한 줄로 줄이는 Summarize를 대안으로 제시합니다. 메시지가 6개를 넘으면 요약 단계로 보내는 `should_continue` 분기처럼 입력을 줄이는 처리가 장기 대화의 핵심 관리 지점이 됩니다.
python
trim_messages(messages, max_tokens=100, strategy="last")

대화 기록에서 최근 메시지를 중심으로 남겨 입력 토큰을 제한하는 처리 예시입니다.

python
def should_continue(state):
    if len(state["messages"]) > 6: return "summarize"
    return END

메시지가 6개를 넘으면 요약 단계로 보내고, 그렇지 않으면 흐름을 종료하는 분기 예시입니다.

04
요약은 수십 개의 대화를 ‘User is Wang, asking about returns’ 같은 짧은 상태로 바꾸어 전체 기록보다 적은 토큰으로 핵심 사실을 유지합니다. Trim은 최근성에 의존하고 Filter는 관련성 판단에 의존하는 반면, Summarize는 오래된 맥락을 압축해 남기는 방식입니다. 어떤 방식을 쓰든 중요한 사실을 누락하지 않으면서 입력 크기를 제한해야 한다는 점이 이 글의 결론입니다.

용어 해설

파라메트릭 메모리(Parametric Memory)
모델이 학습 과정에서 가중치에 흡수한 지식입니다. 예를 들어 ‘Paris is the capital of France’처럼 별도 대화 기록을 입력하지 않아도 답변에 활용할 수 있는 사실을 가리킵니다. 개별 사용자와의 대화 내용을 저장하는 기능은 아닙니다.
에피소드 메모리(Episodic Memory)
특정 사건이나 대화 내용을 기억하는 능력으로, 이 글에서는 사용자가 방금 자신의 이름을 말했다는 사실을 가리킵니다. LLM 호출 사이에 자동으로 유지되는 정보가 아니라 이전 대화 기록을 다시 입력해야 활용할 수 있습니다.
컨텍스트 한도(Context Limit)
한 번의 LLM 호출에서 모델이 처리할 수 있는 입력과 출력 토큰의 범위입니다. 전체 대화 기록을 매번 다시 전달하면 기록이 길어질수록 비용과 지연이 커지고, 결국 이 한도를 초과해 일부 정보를 처리하지 못할 수 있습니다.
메시지 트리밍(Message Trimming)
대화 기록에서 최근 메시지만 남겨 입력 크기를 줄이는 처리 방식입니다. 글에서는 trim_messages와 max_tokens=100, strategy="last"를 사용해 오래된 메시지를 제거하는 예를 들며, 컨텍스트 한도 초과를 막는 방법으로 활용합니다.
대화 요약(Summarization)
여러 대화 턴을 핵심 사실을 담은 짧은 문장으로 압축하는 방식입니다. 예를 들어 사용자의 이름과 문의 주제를 한 줄로 남기면 전체 기록보다 적은 토큰으로 대화의 중요한 상태를 유지할 수 있습니다.

언급된 도구

trim_messages중립

대화 기록에서 최근 메시지를 남겨 입력 토큰을 줄이는 함수입니다. `max_tokens=100`으로 허용 범위를 정하고 `strategy="last"`로 마지막 메시지를 보존하는 예시가 제시됩니다. 전체 기록을 계속 전달할 때 커지는 비용과 컨텍스트 한도 문제를 완화하는 데 사용됩니다.

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 04.수집 2026. 09. 04.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.