Part 1 에서 언급한 10가지 고려사항들 중에서 프로덕션을 염두에 둘 때 중요한 요소 중 하나가 지속성(persistency)였다.
에이전트 패러독스
에이전트가 강력해 질수록, 재앙적으로 실패한 가능성도 높아진다. 이러한 실패로 이어지는 주요 요인중 하나는 지속성이다. 에이전트의 파이프라인 오케스트레이션으로 랭그래프를 채택할 경우, 랭그래프의 state 가 늘어나면 메모리 제약이 뒤따르고,, 에이전트 수행이 거듭될 수록 비록 랭그래프가 많은 부분 세션 유지나 지속성을 담보하기는 하지만, Open Weight LLM 을 폐쇄환경에서 사용하는데 있어서 지속성을 담보하기 위해서는 보강이 필요하였다.
1. 저장소 persistency:
이전에 사용하던 벡터DB를 우선 엔터프라이즈 급 오픈소스 데이터베이스로 변경했다. 우리 회사의 LLMOps 인 치타의 persistence 영역에 저장하고 기업내 동시 사용자가 성능에 지장 없이 에이전트를 운영할 수 있는 벡터 검색능력과 관계형 DB를 함꼐 지원하는 데이터베이스를 채택했다. 이는 문서와 메모리 이력을 텍스트 + 벡터 로 저장하여 유사도로 검색하기위해 유용했다.
2. 대화 persistency:
에이전트의 수행 횟수와 더불어 랭그래프의 state 가 끌고다니는 메세지들은 누적되고 검색된 문서들은 차곡차곡 쌓이며 tool 은 이들을 결합해서 출력한다. 특히 Naive RAG 에서 Agentic RAG 으로 진화해갈때 처음 드는 생각이 여러 사용들이 지속적인 agent call 을 사용하면 메모리를 어떻게 감당할까 였다. 임시 메모리에서 장기 메모리인 데이터베이스로 저장하고 필요할때 불러오는 방식을 생각했는데 문헌을 찾아보며 생각이 바뀌었다. 메모리가 상호작용 이력을 기억하여 지속적으로 학습하고 향상하는 시스템으로의 기반이 된다는 점이다.
Agentic Memory Management:
최근 LLM의 context window 크기가 증가하는 추세로 프롬프트를 포함한 전체를 단기 메모리를 통해 사용하는 CAG 방식도 있을 수 있고 (구글 Gemini 가 글을 쓰는 시점에 추가 노력없이 자료만 넣어주면 자동으로 RAG를 만들어주는 솔루션을 발표했다), 벡터DB로 임베딩하는 방식, 또는 구조화된 메모리 즉, 버퍼, 단기, 중기, archival 로 계층화된 메모리 구성등이 있지만, 최근 AI Agent 에서 부상하는 주제로는 agent 가 무엇을 기억하고 어떻게 메모리를 조직하며 언제 검색될지를 자체적으로 결정하는 Agentic 메모리 관리가 있다.
Agentic 메모리 주요 기능
1. Active Memory Management: AI 가 능동적으로 무엇을 기억하고, 어떻게 정보를 조직하며, 언제 접근할지를 결정
2. Persistence: 여러 대화 세션에 걸친 정보를 유지하는 능력
3. Selective Attention: 어떤 정보가 저장할 가치가 있는지 결정
4. Contextual Retrieval: 현재 필요에 기반한 연관 메모리 발견
5. Memory Integration: 기존 지식에 새 정보를 통합
6. Self-updating: 새 증거 출현 시 저장된 정보 변경 (지속학습을 위한 발판)
랭그래프의 Langmem
올해 2월에 LangGraph 는 Langmem 이라는 Agentic Memory 를 선보인다. 이를 통해 LLM agent 에게 장기 기억을 부여하고 대화들로 부터 중요 정보를 추출하는 tooling, 프롬프트 개선을 통한 agent 행위 최적화와 long-term 메모리 유지 등을 소개했다. 그러나 이 역시 OpenAI, Claude 같은 폐쇄형 모델들을 중심으로 소개되어 Open Weight LLM 으로의 구현은 어려웠다. Agentic Memory 관련 A-MEM, MemOS, Mem0 등의 논문들을 찾아보았고 Langmem 에서 개념으로 소개하는 계층형 메모리 구조가 IBM의 논문 에서 제시된것으로 많은 곳에서 인용되는 것을 보면서 원점에서 독자적인 Agentic Memory 를 개발해야겠다고 생각했다.
인지과학에서 본 사람의 메모리
논문에서는 사람의 기억 메카니즘을 4가지 유형으로 설명한다. 이를 AI 적용에 빗대어 대입해보면 아래과 같다.
1. Working Memory: 현재의 대화 문맥이 저장되는 단기 메모리
2. Episodic Memory: 과거 대화문맥, 사용자 응답, 실행결과 저장 (과거 경험 저장)
3. Semantic Memory: 사용자 선호도와 같이 정형 형식으로 저장된 사실. (과거 지식 저장)
4. Procedural Memory: Agent 가 어떻게 운영되었는지에 관한 정보 (Agent 행위를 안내할 프롬프트, 명령)
단기 메모리
LangGraph 는 내장된 persistence 층이 있어서 checkpointer 와 함께 graph 를 컴파일하면 state 가 변할 때 마다 thread 범위내 state 를 checkpointer 로 저장..InMemory 로 단기 메모리는 쉽게 정의와 사용이 가능. 사실 checkpointer 의 용도는 대화 중에 시스템이 중단되어 이전 정보 유실 가능성을 염두에 두고 사용하는데 단기, 장기 메모리가 어느 수준으로 유지된다면 굳이 checkpointer 를 turn on 해야 하는 생각도 든다.
장기 메모리
LangGraph Langmem:
LangMem 은 아래 그림 2와 같이 agent 가 활성 대화들 동안 tool 사용하여 저장/검색 할 수 있고 백그라운드 모드에서 일정 시간이 지나면 대화들로부터 지식을 자동으로 추출, 통합 및 변경하여 관리한다.
<그림 2. Langmem 저장 및 검색>
가젤 Agentic Memory:
저자가 개발한 가젤 Agentic 메모리는 단기메모리로는 LangGraph 의 InMemoryStore 를 그대로 차용하고, 장기메모리는 아래 그림 3과 같은 메모리 관리 생명주기에따라 백그라운드 모드에서 관리된다. LangGraph의 state 와 config 로 부터 대화데이터와 thread ID 등을 추출하여, 대화데이터는 우선 episodic 에 저장하고 각 카테고리별 키워드와 노출빈도에 따른 점수를 부여하여 가장 높은 점수 순으로 episodic 대화 중에서 주요 사실들을 자동으로 추출한다.
그 중에서도 중요도가 일정 점수 이상의 높은 신뢰도의 대화는 질문과 답변 일부를 semantic 에 저장한다. working(단기)메모리가 일정 횟수 씌여진 상태에서 그래프 노드를 통과하는 시점에서 메모리 저장소를 통합하고 최적화를 수행한다.
만약에 대화 중에 "이전에 유사암에 대해 어떤 질문 했었죠?" 라는 질문에는 agent 가 episodic 에서 세션 ID 와 Thread ID 에 부합하는 최근 내용 순으로 질문과 응답쌍을 리턴할 것이고, "제 성향에 맞는 특약 추천해주세요" 라는 질문에는 semantic 에서 가격 효율적 상품을 중시한다는 내용을 회고하게 된다.
"갑상선암 진단 받으면 청구절차가 어떻게 이루어지나요?" 라는 질문에는 절차로서 세부 보장항목 단계적 확인 - 기본 보장내용 확인 - 세부 치료비 항목 확인 - 특약 및 조건 검색... 등과 같은 내용이 검색되어 보여지게 된다.
<그림 3. 가젤 Agentic 메모리관리 생명주기>
Semantic 메모리의 경우는 아래와 같이 저장된다.
store_semantic_memory{
"facts": "상세한 보장내역을 원함",
" domain": "insurance",
" category": "detailed_analysis_preference",
" related_concepts": ["detailed_analysis_preference", "thorough_analysis", "coverage_focus"],
" confidence": 0.85,
" source": f"{customer_id} 상담패턴 학습,
" timestamp": datetime.now().isoformat()
}
Langmem 에서는 create_react_agent 호출을 OpenAI 나 Anthropic LLM 을 사용하여 기존 메모리 변경, 삭제, 확장 검색을 수행하고 지속저장소를 통한 production 용으로 PostgreStore API connection 을 제공한다. Open Weight LLM 으로 적용하기에 적합하지 않다.
Gazel Agentic Memory 는 오픈소스 PostgreSQL with pgvector extension 을 on-premise 에 설치하여 Gazel 자체의 PgvectorStore class 와 HierarchicalMemoryManager 추가로 추적성, 확장성, 버그 컨트롤에 견고한 확장 환경과 지속성을 보장하도록 하였다.
AISummit 전시장 데모 시연에서는 아래 그림 4와 같이, GAZEL 전문 보험 중개 지원 Intelligent AI 데모라는 내용으로 4개의 tab 으로 시연 하였다.
<그림 4. 가젤 보험 중개 지원 데모>
첫번째, 두번째 tab 에서는 고객의 "삼성화재의 갑상선암 보장에 대하여 알려줘" 라는 질문에 대해 LangGraph 워크플로우가 실시간으로 진행되어 옆에 해당하는 Agent Tool 들이 수행되는 내용이 실시간으로 표시되었고 질문에 대해 갑상선암의 보장명, 지급사유, 지급금액등의 내용이 표로 정리되어 실시간 출력되어 보여진다.
세번째 tab 에서는 메모리학습이라는 내용으로 3명의 고객 각각의 일련의 질문들이 어떻게 가젤 Agentic 메모리 관리를 통해 4가지 유형의 메모리에 저장되는지를 LangGraph 워크플로우 와 Agentic Tool 처리 패널들을 통해 확인하였다. 각각의 질문이 데모시작과 함께 LangGraph Workflow 의 memory_update 노드를 거치면서 오른쪽 패널에는 각 노드에 해당하는 Agentic Memory Agent Tool Call 실행 상황이 실시간 표시되도록 데모를 진행하였다. 이 과정에서 각각의 질문에 대응하는 Episodic, Semantic, Procedural 메모리로 실시간 저장되는 현황을 E-E-S-P 와 같이 눈으로 확인할 수 있게 시연되었다.
네번째 tab 에서는 문맥기반 메모리 검색이라는 내용으로, 3명의 고객이 각각 질문한 유형들이 Tab 3 를 거치면서 Episodic, Semantic, Procedural 메모리로 저장되어 있는 상태에서 새로운 질문 예를 들면, "이전에 제가 어떤 질문 했었죠?", 혹은 "제 성향에 맞는 특약 추천해주세요" 라는 질문에 대해서 LangGraph 에 워크플로우가 실시간 진행되면서 오른쪽 패널에 해당 Agentic memory tool call 수행 표시와 함께 관련 메모리 유형(E, P, S) 과 동시에 agent 메모리가 실시간 검색해 낸 내용이 표시되는 순서로 데모가 진행되었다.











































