챗봇은 기억하는데, 왜 모델은 기억하지 못할까요?
챗봇은 이전 대화의 세부 사항을 유창하게 언급하며 기억하고 있다는 설득력 있는 환상을 만들어냅니다. 하지만 기반이 되는 거대 언어 모델(LLM) 자체는 영구적인 상태를 보유하지 않으며, stateless function(상태 비저장 함수)으로 작동합니다. 모든 상호작용은 이전 교류에 대한 개인적 기억이 없는 새로운 요청입니다.
LLM의 핵심 작업은 현재 입력만을 기반으로 다음 token을 예측하는 것입니다. 응답을 생성하고 추론 과정이 끝나면, 모델은 해당 상호작용을 개인적인 기억으로 유지하지 않습니다. 계산기와 같다고 생각해보세요. 계산을 수행하고 결과를 표시하지만, 새로운 숫자를 입력할 때 이전 합계를 "기억"하지는 않습니다.
당신이 경험하는 대화의 연속성은 LLM 내부의 숨겨진 기억이 아니라 주변 애플리케이션에서 비롯됩니다. ChatGPT나 Claude와 같은 소프트웨어 래퍼는 모든 대화 기록을 각 새 프롬프트 앞에 추가하는 방식으로 이를 구현합니다. 이러한 과거 대화의 재주입은 모델이 기억하고 있다는 정교한 환상을 만들어내지만, 실제로는 계속 커지는 입력을 처리하고 있을 뿐입니다.
기억의 속임수: 대화 다시 재생하기
채팅 애플리케이션은 사용자의 새로운 메시지가 있을 때마다 이전의 대화 기록 전체를 다시 전송하여 대화의 연속성을 유지합니다. 흔히 "context window stuffing"이라고 불리는 이 기술은 LLM이 일관된 응답을 생성하는 데 필요한 모든 정보를 제공하여 기억의 환상을 만들어냅니다. 모델은 이 연결된 텍스트를 하나의 확장된 프롬프트로 처리합니다.
세션 간의 지속적인 회상을 위해 애플리케이션은 주요 사실, 사용자 선호도 또는 과거 상호작용을 데이터베이스나 파일에 저장할 수 있습니다. 사용자가 돌아오면 애플리케이션은 저장된 세부 정보를 검색하여 초기 프롬프트에 삽입함으로써 LLM이 이전 정보를 참조할 수 있게 합니다. 이는 모델 자체의 본질적인 기억이 아니라 저장된 데이터입니다.
이 기억의 속임수에는 상충 관계가 있습니다. 긴 기록을 반복적으로 포함하면 각 턴마다 전송되는 tokens의 총 수가 크게 증가하여 API 비용이 상승합니다. 또한 LLM의 context window는 입력 길이에 엄격한 제한을 두어 시뮬레이션된 기억의 깊이를 제한합니다. 프롬프트 캐싱이 반복되는 접두사를 최적화할 수는 있지만, 기반 모델에 지속적인 기억을 부여하지는 않습니다.
당신의 단어는 토큰을 통해 우회합니다
채팅 애플리케이션이 대화 재생을 처리하는 동안, Large Language Model (LLM) 자체는 당신의 단어를 직접 처리하지 않습니다. 내부적으로 LLM은 tokens라고 불리는 수치 표현으로 작동합니다. 텍스트가 모델에 도달하기 전에 토크나이저가 이를 토큰 ID 시퀀스로 변환합니다.
토큰은 단순히 개별 단어나 문자가 아니라, 모델의 학습 데이터가 통계적으로 유의미하다고 식별한 텍스트 덩어리입니다. “the”와 같은 흔한 단어는 하나의 토큰이 될 수 있지만, “unbelievable”과 같이 빈도가 낮거나 복잡한 단어는 “un”, “believe”, “able”과 같이 여러 개의 작은 조각으로 나뉠 수 있습니다. 이러한 하위 단어 토크나이징(subword tokenization)을 통해 모델은 방대한 어휘를 효율적으로 처리할 수 있습니다.
토큰 수를 이해하는 것은 컨텍스트 윈도우 제한과 API 비용에 직접적인 영향을 미치기 때문에 매우 중요합니다. 일반적으로 1,000개의 토큰은 약 750개의 영어 단어에 해당하지만, 텍스트에 따라 달라질 수 있습니다. OpenAI Tokenizer Tool과 같은 도구를 사용하여 특정 텍스트의 정확한 토큰 수를 확인할 수 있습니다. 이 변환 과정은 사용자에게는 보이지 않지만, LLM이 인간의 언어를 해석하고 생성하는 방식의 핵심입니다.
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
기억하는 척하는 것의 실제 비용
기억하는 척하는 것에는 실제 비용이 따릅니다. 제공업체는 가격 책정 및 속도 제한을 위해 입력 및 출력 토큰을 모두 계산합니다. 따라서 매번 대화가 길어지는 전체 기록을 다시 보내면 긴 대화일수록 비용이 더 많이 듭니다. 일반적인 영어 토큰은 평균적으로 단어의 4분의 3 정도이므로, 몇 페이지에 걸친 대화는 금방 수천 개의 토큰을 쌓을 수 있습니다.
더 많은 기록을 추가한다고 해서 더 나은 회상을 보장하지는 않습니다. 연구에 따르면 방대한 프롬프트 깊숙이 묻혀 있는 중요한 세부 정보는 모델이 '확인'하기 어려워질 수 있으며, 이를 때때로 컨텍스트 저하(context degradation)라고 합니다. 토큰 길이에 따라 확장되는 모델의 어텐션 메커니즘은 지나치게 긴 입력의 모든 부분을 효과적으로 가중치를 두는 데 어려움을 겪을 수 있습니다.
저장된 챗봇 메모리를 LLM의 핵심 기능과는 별개의 애플리케이션 기능으로 취급하세요. 서비스가 어떤 세부 정보를 저장하고 이를 향후 상호 작용에 어떻게 활용하는지 확인하십시오. 이러한 차이를 이해하는 것이 강력하면서도 상태를 유지하지 않는(stateless) 시스템을 효과적으로 사용하는 핵심입니다.
더 자세한 내용은 OpenAI의 memory help page와 기초 논문인 "Attention Is All You Need"를 참조하십시오.
자주 묻는 질문
LLM은 이전 대화를 기억하나요?
모델은 요청이 종료된 후 대화를 유지하지 않습니다. 앱은 대화 기록이나 사용자 세부 정보를 저장하고 이후 프롬프트에 관련 정보를 포함할 수 있습니다.
챗봇이 왜 나를 기억하는 것처럼 보이나요?
챗봇 애플리케이션이 이전 메시지를 다시 보내거나 저장된 세부 정보를 검색하여 모델 자체에는 지속적인 메모리가 없음에도 불구하고 대화가 계속되는 것처럼 느끼게 할 수 있습니다.
LLM에서 토큰이란 무엇인가요?
토큰은 텍스트를 나타내는 숫자 단위입니다. 일반적인 단어 전체가 될 수도 있고 흔하지 않은 단어의 조각이 될 수도 있으며, 이는 모델 제한 및 API 비용에 영향을 미칩니다.
대화 기록을 다시 보내면 AI 비용이 더 비싸지나요?
그럴 수 있습니다. 앱이 요청할 때마다 이전 메시지를 더 많이 포함하면 턴마다 입력 토큰 사용량이 누적되지만, 캐싱을 통해 반복되는 텍스트의 비용을 줄일 수 있습니다.

