에이전트가 대화 도중 자꾸 내용을 '까먹어서' 해결책을 찾았습니다 (LCM)
My agent kept "forgetting" things mid-conversation found a technique that actually solves it (LCM)
핵심 요약
긴 대화에서 에이전트의 기억력 문제를 해결하기 위해 정보 손실 없는 컨텍스트 관리(LCM) 기법을 소개합니다.
- 기존 방식의 한계 — 요약 방식은 정보 손실이 심하고, 메모리 세이버는 컨텍스트 윈도우 제한을 해결하지 못함
- LCM 도입 — Voltropy 논문에서 제안된 방식으로, 원본 메시지는 SQLite에 보존하고 요약 계층을 통해 효율적으로 컨텍스트를 관리함
- 간편한 통합 — LangGraph의 MemorySaver를 대체할 수 있으며 AutoGen, CrewAI 등과도 호환됨
- 로컬 대시보드 — 모델이 현재 보고 있는 정보와 요약된 정보를 직접 시각적으로 확인 가능
멀티 스텝 리서치 에이전트를 만들고 있는데, 한 30~40턴 정도 지나면 계속 똑같은 문제에 부딪히네. 모델이 앞뒤 말이 안 맞는 소리를 하기 시작하고, 중요한 제약 사항을 까먹고, 이미 줬던 정보를 또 달라고 징징댐.
뻔한 방법들은 다 써봤는데, 하나같이 치명적인 단점이 있더라.
Summaries / handoff.md
- 정보 손실이 너무 심함.
- 중요한 디테일이 무조건 누락됨.
LangGraph MemorySaver
- 재시작해도 상태 유지하는 건 좋은데,
- 컨텍스트 윈도우 터지는 건 해결 못 함.
- 결국 토큰 제한에 걸림.
Rolling summarize-and-replace
- 결국 요약의 요약의 요약이 됨.
- 시간이 지날수록 세부적인 내용이 다 증발함.
더 나은 방법: Lossless Context Management (LCM)
Voltropy 논문에서 소개된 Lossless Context Management (LCM)에 대해 읽어봤는데, 핵심은 간단함. 컨텍스트 압축한다고 정보를 날려버릴 필요가 없다는 거임.
최근에 openlcm("pip install openlcm")이라는 걸 찾았는데, 이 방식을 그대로 구현해놨더라. 모든 원본 메시지는 SQLite에 그대로 저장하고, 모델한테는 압축된 요약 계층만 보여주는 식임. 결과적으로 모델은 작고 효율적인 컨텍스트 윈도우에서 돌아가면서도, 수십 턴 전에 내린 결정 같은 정확한 텍스트를 다시 불러올 수 있음.
기존의 요약 방식이나 Claude Code 스타일의 압축이랑 다르게, "압축하면 정보가 손실된다"는 고질적인 문제가 없음.
LangGraph 쓰는 사람들은 그냥 "MemorySaver" 대신 이거 갖다 쓰면 됨:
from openlcm.adapters.langgraph import LCMCheckpointer
graph = StateGraph(MyState).compile(
checkpointer=LCMCheckpointer(llm=my_llm)
)
AutoGen, CrewAI, 그리고 OpenAI/Anthropic 직접 연동도 다 지원함.
개인적으로 제일 맘에 드는 기능은 로컬 대시보드인데, 모델이 지금 뭘 보고 있는지, 그리고 활성 컨텍스트에서 뭐가 요약돼서 빠졌는지 정확하게 확인할 수 있음.
LCM 얘기가 별로 안 보이길래 공유해봄. 장기 실행 에이전트 워크플로우 쪽에서는 꽤 유망해 보여서.


