ChatGPT의 메모리 시스템을 리버스 엔지니어링한 분의 글을 읽었는데, 벡터 DB RAG로 하겠지 라고 생각했던게 아니라는걸 알게 됨.
결론부터 말하면, ChatGPT는 거의 RAG를 안 쓴다.
벡터 임베딩도, 유사도 검색도, 리트리벌 비용도 거의 없다.
대신 훨씬 더 단순하고, 훨씬 더 영리한 4단계 계층만으로 모든 걸 해결한다.
1. 세션 메타데이터 (일시적)
너가 지금 모바일인지 데스크톱인지, 다크모드 켜져 있는지, 화면 크기, 시간대, 구독 등급, 심지어 최근 사용 패턴까지 전부 실시간으로 주입됨.
이건 영구 저장 안 하고, 세션이 끝나면 바로 버림. 덕분에 "지금 새벽 2시에 폰으로 물어보는구나" 하고 답변 길이랑 포맷을 알아서 조절함.
토큰 낭비 없이 환경 적응을 완벽하게 해냄.
↓
2. 명시적 장기 메모리 (최대 33개 사실)
이거 기억해줘~라고 한 거나, 대화 중에 중요한 사실을 모델이 제안하면 확인한 것만 저장됨.
이름, 직업, 목표, 취향, 진행 중인 프로젝트 정도. 그 이상은 안 넣음.
"모든 걸 기억해야 한다"는 착각 버렸고, 진짜 중요한 것만 골라서 넣는 것.. 이게 오히려 훨씬 깔끔.
↓
3. 최근 대화 요약 (약 15개)
이거 좀 흥미로움..
과거 대화 전체를 임베딩해서 검색하는 게 아니라, 그냥 미리 계산된 초경량 요약만 던져줌.
형식은 제목 타임스탬프 사용자 메시지 몇 줄 발췌. 어시스턴트 답변은 아예 안 넣음.
그러니까 "너 지난주에 뭐 물어봤더라?" 할 때 정확히 기억 안 해도, 대략적인 주제 흐름만으로도 충분히 이어갈 수 있음.
정확도 조금 희생하고 속도랑 토큰을 극한까지 아끼는 방향..
↓
4. 현재 세션 슬라이딩 윈도우
평범해 보이지만, 메시지 개수가 아니라 토큰 수로 제한 걸고,
한계 다다르면 오래된 메시지 날리면서도 2번과 3번은 계속 살아있음.
그래서 대화가 아무리 길어져도 장기 연속성은 끊기지 않음.
RAG의 집착은 그래.. 비효율적이지.
정확도 100% 챙기려고 매번 검색 돌리고, 임베딩 저장하고, 비용 올라가나 싶었는데,
OpenAI에서는 95%의 유저는 이 정도만 기억해도 충분하다라고 판단한 것.
결과적으로 속도는 빠르고, 토큰은 적게 들고, UX는 더 자연스럽게.. 좋구만...
I spent the last few days prompting ChatGPT to understand how its memory system actually works.
Spoiler alert: There is no RAG used
manthanguptaa.in/posts/chatg…