개요
AI Memory는 AI 서비스가 이전 대화, 사용자 선호, 작업 기록 등을 저장하고 이후 요청에서 활용하도록 구성한 기능을 가리키는 넓은 표현이다. LangGraph 문서는 대화 스레드 안의 단기 상태와 여러 대화에 걸쳐 사용하는 장기 저장을 구분한다.[1] 저장된 문장을 다음 입력에 제공하는 일은 모델의 가중치를 학습으로 바꾸는 일과 다르다.
문맥·저장소·학습 구분
Context Window는 한 요청에서 모델이 사용할 수 있는 입력 범위다. 저장소는 그 범위 밖의 정보를 보관하고 필요한 때 다시 읽을 수 있게 한다. RAG는 외부 자료를 찾아 답변 근거로 제공하는 구성이며, 메모리는 그 외부 자료에 사용자 상태나 과거 작업이 포함되는 경우와 연결될 수 있다. CoALA 연구는 언어 에이전트를 메모리·행동 공간·의사결정 과정으로 정리한다.[2]
Server-side AI memory의 의미
Server-side AI memory는 상태를 서버 측 저장소에서 유지하는 구성을 가리킨다. 같은 대화의 실행 상태를 복구하는 목적과 여러 대화에서 사용할 선호를 저장하는 목적은 다르다. 저장 단위를 사용자·조직·작업으로 구분하고, 조회할 때도 같은 권한 경계를 적용해야 한다. 기억을 많이 저장하는 것과 필요한 정보를 정확하게 사용하는 것은 별개의 품질이다.
사례: 바뀐 회의 시간 반영
다음은 가상 사례다. 과거 기록에는 '회의는 18시를 선호한다'고 있고 최근 요청에는 '앞으로는 19시로 해 줘'라고 적혀 있다. 둘을 그대로 검색 결과에 넣으면 충돌한 정보가 함께 나타날 수 있다. 어떤 기록이 최신인지, 일반 선호인지 특정 날짜의 예외인지 확인하고 변경 근거와 적용 범위를 남긴다. 메모리의 요약문이 원문의 조건을 지웠는지도 살펴본다.
갱신과 삭제를 설계할 질문
- 사실과 추정: 사용자가 말한 사실인가, 모델이 추측해 만든 요약인가?
- 범위: 개인 선호인가, 특정 프로젝트의 결정인가?
- 시간: 언제 확인했으며 새 지시로 대체됐는가?
- 출처: 원문이나 결정 기록을 다시 열 수 있는가?
- 삭제: 원기록·요약·검색 인덱스 등 어떤 저장 위치에서 제거되는가?
저장소의 기록을 지운다고 이미 학습된 모델의 가중치까지 자동으로 수정되는 것은 아니다. 이 구분은 삭제 기능의 범위를 설명하기 위한 것이며 특정 서비스의 보관 정책을 대신하지 않는다.
평가와 관련 문서
서로 다른 사용자의 기록이 섞이는지, 오래된 기록이 새 지시를 덮는지, 근거 없는 선호를 사실처럼 쓰는지 시험한다. 단순히 이전 말을 반복하는 능력보다 올바른 기록 선택과 사용 범위를 본다. Data Provenance, AI Agent Oversight와 Hallucination (AI)가 연결되는 배경이다.
메모리를 실제로 쓰는 5단계
LangGraph의 메모리 문서 ↗는 대화별 상태와 여러 대화에 걸친 저장을 구분한다.[1] 이 차이를 서버 설계로 옮기면 '저장했다'와 '이번 답변에 사용했다'를 따로 확인해야 한다. 다음 과정과 항목은 ORBiS Tree의 설계 예시이며 특정 라이브러리의 필수 스키마가 아니다.
- 추출: 원문에서 사용자가 명시한 사실과 모델의 추정을 나눈다. '회의는 저녁이 좋아요'를 '항상 19시 가능'으로 확대하지 않는다.
- 저장: 조직·사용자·프로젝트 범위와 함께 기록한다. 다른 사람의 문장이 같은 검색 공간에서 섞이지 않게 한다.
- 선택: 이번 요청에 필요한 항목을 찾는다. 임베딩 유사도는 후보 탐색에 쓰고, 접근 권한·유효기간은 별도 조건으로 적용한다.
- 조립: 선택한 기록의 출처와 시점을 보존해 모델 입력에 넣는다. 전체 저장소를 문맥 창에 그대로 붙이는 일과 구분한다.
- 갱신: 새 지시가 이전 기록을 대체하는지, 한 번의 예외인지 판단하고 변경 근거를 남긴다.
예제: 선호가 바뀌었을 때 남길 기록
다음은 가상 기록이다. scope는 user-42/project-A, key는 meeting-time, value는 19:00, source는 message-108, valid_from은 변경을 요청한 날짜, supersedes는 memory-17이라고 하자. 원기록 memory-17의 18:00과 새 기록의 19:00을 구분해 두면 '전에 왜 18시라고 했는가?'에도 근거를 확인할 수 있다. 시간대는 별도 필드로 두거나 값 안에 명시한다. 19:00이라는 문자열만 있으면 한국 시간인지 다른 지역 시간인지 알 수 없다.
한 번의 회의만 19시에 한다면 key를 일반 선호 대신 해당 회의 식별자에 연결한다. 일반 프로필을 덮어쓰지 않는 것이다. 이 과정은 자료 출처를 사용자 상태에도 적용하는 예다. CoALA 논문 ↗은 메모리와 행동 선택을 함께 보는 연구의 배경이다.[2]
삭제·비동기 갱신에서 생기는 실패
기록을 저장하는 요청 경로와 요약을 만드는 백그라운드 작업이 동시에 움직이면, 삭제된 원문에서 오래된 요약이 다시 생길 수 있다. 삭제 표시·자료 버전을 갱신 작업이 확인하도록 설계하고, 원문·요약·벡터 인덱스·캐시를 구분해 삭제 범위를 문서화한다. 백업에서 언제 제거되는지는 운영 정책의 문제이며 즉시 모두 사라진다고 약속하지 않는다.
두 작업이 같은 프로필을 읽고 각각 수정하면 마지막 저장이 앞선 변경을 지울 수도 있다. 버전 비교나 충돌 처리를 통해 무엇이 덮였는지 확인한다. 대화 상태를 저장하는 체크포인트와 사용자 선호 저장소의 갱신을 하나의 '기억' 기능으로 뭉뚱그리면 이런 원인을 찾기 어렵다.