LangChain Deep Agent의 메모리 구조 재고 (AGENTS.md vs 선택적 로딩)
Rethinking Memory in LangChain Deep Agents (AGENTS.md vs Selective Loading)
핵심 요약
LangChain 에이전트의 메모리 효율을 높이기 위해 에이전트가 직접 파일을 읽는 대신 외부 라우터를 통한 선택적 로딩 방식을 제안함.
- 메모리 구조 — AGENTS.md를 인덱스로 활용하는 기존 방식의 비효율성 지적
- 선택적 로딩 — 에이전트 외부에서 메모리 라우터를 통해 필요한 파일만 프롬프트에 주입하는 방식 제안
- 라우팅 전략 — 휴리스틱, LLM 분류기, 임베딩 기반 RAG 등 다양한 라우터 옵션 고려
- 구현 고민 — 에이전트의 read_file 의존성 문제와 메모리 파일 구조화 및 요약 방식에 대한 조언 구함
여러분 안녕하세요,
저는 LangChain에서 Deep Agent를 작업하다가 메모리와 관련하여 피드백을 받고 싶은 설계상의 질문이 생겼습니다.
기본적으로 "AGENTS.md"와 같은 파일들은 시스템 프롬프트에 로드됩니다. 처음에 저는 "AGENTS.md"를 사용자 메모리의 인덱스처럼 사용하기 시작했습니다. 대략 이런 식이죠:
/memories/
AGENTS.md (메모리 인덱스)
preferences.md
hobbies.md
identity.md
아이디어는 다음과 같았습니다:
-
"AGENTS.md"는 각 파일에 무엇이 포함되어 있는지 설명함
-
에이전트가 언제 다른 메모리 파일을 열지("read_file") 결정함
이 방식은 작동하지만, 최적이라고 확신할 수 없습니다:
-
컨텍스트 낭비 → 너무 많이 로드하면 불필요하게 토큰을 소모함
-
LLM 신뢰성 → 에이전트가 항상 올바른 파일을 여는 선택을 하지는 않음
-
프롬프트에 대한 과도한 의존 → 모델에게 너무 많은 책임을 떠넘기는 느낌이 듦
예를 들어:
-
사용자가 프로그래밍에 대해 물어보면 → "preferences.md"가 관련 있음
-
하지만 "identity.md"와 "hobbies.md"는 관련 없음
-
그럼에도 현재 설정으로는 깔끔한 분리를 보장할 수 없음
제안하는 해결책: 메모리 라우터 (선택적 로딩)
에이전트가 무엇을 읽을지 결정하게 하는 대신, 그 로직을 에이전트 외부로 옮기는 실험을 하고 있습니다:
흐름:
사용자 입력
↓
메모리 라우터 (휴리스틱 / LLM / 임베딩)
↓
관련 메모리 파일 선택
↓
프롬프트에 해당 파일만 주입
↓
에이전트 실행
그래서 이제는:
-
"AGENTS.md"는 최소화됨 (인덱스가 아닌 규칙 위주)
-
메모리 파일은 암시적이 아닌 필요할 때 로드됨
-
에이전트는 여전히 "read_file" 같은 도구를 사용할 수 있지만, 폴백 용도로 사용
고려 중인 라우터 옵션
-
휴리스틱
- 간단한 키워드 기반 라우팅
-
LLM 분류기
- 어떤 메모리가 관련 있는지 작은 모델에게 물어봄
-
임베딩 (RAG 스타일)
- 메모리 청크를 인덱싱하고 관련 있는 것을 검색
-
이 방식이 Deep Agent 메모리가 의도된 대로 사용되는 방식과 일치하나요?


