MemoryLake
모든 글로 돌아가기
News2026년 9월 4일·12 분 소요

인덱싱된 세션 로그는 현재 사실이 아닌, 과거에 말한 내용을 기억합니다 (2026)

개발 에이전트는 몇 달 동안 프로젝트의 상세한 기록을 보관해 왔습니다. 모든 검색, 모든 막다른 골목, 모든 번복, 모든 "사실, 그렇게 하지 말자"라는 말까지 — 이 모든 것이 로컬 장비의 세션 로그에 잠들어 있으며, 아무런 역할도 하지 못하고 있습니다.

2026년 9월 3일, Hugging Face는 이러한 로그를 에이전트가 쿼리할 수 있는 형태로 변환해 주는 오픈소스 도구인 funes를 출시했습니다. Claude Code, Codex, pi, Hermes를 지원하며, 로컬에서 실행되고, 에이전트당 단 하나의 명령어로 설정할 수 있습니다. 아이디어도 좋고 실행 방식도 사려 깊습니다.

또한 이 프로젝트는 설계상의 선택을 내렸고 이를 기능으로서 명확히 밝히고 있습니다. 이 선택을 이해하는 것이 이 글의 핵심입니다.

"원시 증거가 그대로 보존됩니다: 쓰기 시점에 어떤 것도 사실로 정제(distill)되지 않습니다. 결과는 언제나 그것을 생성한 대화 차례(turn)로 되돌아갈 수 있습니다."

아무것도 정제되지 않습니다. 이는 완벽한 출처(provenance)를 제공하지만, 동시에 아무것도 수정되지 않는다는 것을 의미합니다. 여러분의 아카이브는 지난 3월에 번복한 결정과 이를 대체한 결정을 모두 충실히 보존합니다. 이 두 가지 중 무엇이 필요한지는 여러분이 던지는 질문에 달려 있으며, 이 두 질문은 거의 동일해 보입니다.

시작하기 전에 한 가지 경계를 분명히 하고자 합니다. 이것은 RAG 대 메모리(memory)의 논쟁이 아닙니다. 그것은 문서를 검색하는 것에 관한 이야기이며, why RAG isn't memory에서 다루고 있습니다. 이것은 여러분 자신의 대화를 검색하는 것에 관한 이야기이며, 이는 다른 실패 모드를 가진 다른 대상입니다.

대화 기록 인덱스가 실제로 하는 일

진단은 옳았으며, 프로젝트가 이를 먼저 언급했습니다

funes는 이전의 주장을 인정하고 이를 구체화하는 것으로 시작하는데, 이는 대부분의 도구들이 보여주는 것보다 훨씬 훌륭한 출발입니다:

"진단은 맞지만, 흔적(trace)은 잠재적인 메모리일 뿐입니다. 에이전트의 세션 로그는 여전히 아카이브에 불과합니다. 1만 번의 대화 차례 속에서 '왜 스트리밍 파서 사용을 중단했는가?'를 grep 명령어로 찾아낼 수는 없습니다. 에이전트가 작업 중에 이러한 흔적을 사용하려면 인덱싱, 검색, 랭킹, 그리고 정확한 출처가 필요합니다."

이 문장의 모든 구절이 사실입니다. 아카이브는 메모리가 아닙니다. Grep은 1만 번의 대화 차례로 확장될 수 없습니다. 그리고 인덱싱, 검색, 랭킹, 출처라는 네 가지 요소는 로그 더미를 쓸모 있는 것으로 바꾸는 바로 그 핵심입니다.

문서화된 메커니즘

쓰기 경로는 결정론적입니다. "하나의 결정론적 파이프라인이 지원되는 모든 흔적을 동일한 '차례 및 블록(turn-and-block)' 형태로 파싱하고, 청크로 나누고, 고정된 로컬 모델로 임베딩하여 로컬 Lance 데이터셋에 기록합니다."

읽기 경로는 하이브리드 방식입니다. "쿼리는 벡터 검색과 BM25 검색을 결합하고, 이들의 랭킹을 융합한 다음, 교차 인코더(cross-encoder)로 후보군을 재정렬하고, 최신성에 따라 가중치를 재조정하며, 인접한 청크를 첨부합니다."

설정은 에이전트당 하나의 명령어로 이루어지며, 이는 "첫 번째 인덱스를 빌드하고, 에이전트에게 recall 및 get 도구를 제공하며, 완료된 각 대화 차례를 인덱싱하는 자동화 기능을 설치합니다." 인덱싱은 점진적(incremental)으로 이루어집니다. 즉, "전체 기록을 다시 임베딩하는 대신 새로운 실행이 새로운 대화 차례를 추가"하며, 오래된 콘텐츠는 "제한된 단계 내에서 백필(backfill)"할 수 있습니다.

반환되는 결과는 가공되지 않은 상태입니다. "recall은 요약이 아닌 원본 텍스트를 반환하며, 그것이 어디서 왔는지(에이전트, 타임스탬프, 세션, 대화 차례)를 정확히 보여줍니다."

인정할 만한 세 가지 특성

프로젝트는 세 가지를 나열하고 있으며, 세 가지 모두 실재하는 장점입니다.

교차 에이전트 커버리지. "Claude Code, Codex, pi, Hermes는 모두 동일한 형태로 기록합니다. recall은 이들의 이력을 아우르며, 모든 검색 결과는 어떤 에이전트가 이를 생성했는지 알려줍니다." 네 개의 에이전트에 걸쳐 정규화된 하나의 형태는 진정으로 유용하며, 이는 카테고리로서의 cross-agent memory 뒤에 있는 직관과 동일합니다.

기본 로컬 실행. "계정이나 Hub 리포지토리가 필요하지 않습니다. 호스팅된 모델이 인덱싱을 위해 세션을 처리하지 않으며, 임베딩과 재정렬은 사용자의 장비에서 실행되고, 코딩 에이전트가 추론을 수행합니다." 대화 기록을 제3자에게 전송할 수 없는 사람들에게 이것은 선호의 문제가 아니라 필수 요구사항입니다.

소유권. 메모리를 데이터셋에 바인딩하고 "다른 장비에서 동일한 명령을 실행하면 메모리가 그곳으로 따라옵니다." Hub는 "이미 다른 데이터셋에 제공하고 있는 소유권, 액세스 제어, 버전 관리 및 배포 기능"을 제공합니다.

또한 구체적으로 설명된 자격 증명 처리 단계가 있습니다. "어떤 것도 Hub에 도달하기 전에 인덱싱 과정에서 자격 증명이 이미 마스킹(redact)됩니다. 그런 다음 게시 시점에 모든 청크를 다시 스캔하여 여전히 비밀 정보처럼 보이는 것은 제외합니다." 프로젝트는 "무엇을 다루고 다루지 않는지"에 대해 자체 SECURITY.md를 가리키고 있으며, 이는 스캐너를 문서화하는 올바른 방법입니다.

이것이 바꾸는 것과 바꾸지 못하는 것

한 가지 문제는 완전히 해결합니다. "스트리밍 파서에 대해 우리가 뭐라고 했지?"라는 질문에 이제 전혀 답할 수 없었던 과거와 달리 몇 초 만에 답을 얻을 수 있습니다. 질문이 기록에 관한 것(무엇이, 언제, 어떤 에이전트에 의해, 어떤 단어로 논의되었는지)이라면 인덱싱된 아카이브가 올바른 도구이며 이를 대체할 수 있는 것은 없습니다.

거의 비슷해 보이는 질문에는 답하지 못합니다. "파서에 대한 우리의 컨벤션은 무엇인가?"는 다른 쿼리입니다. 아카이브에는 여러분이 포기한 접근 방식에 대한 열정적인 3시간 동안의 탐색을 포함하여, 파서에 대해 누군가가 했던 모든 발언이 포함되어 있습니다. 관련성 랭킹은 이들 중 어느 것이 여전히 유효한지 알지 못합니다. 쓰기 시점에 어떤 것도 한 결정이 다른 결정을 대체했다는 사실을 기록하지 않았기 때문입니다.

최신성 재가중치는 도움이 되지만 문제를 해결하지는 못합니다. 파이프라인은 "최신성에 따라 가중치를 재조정"하는데, 이는 올바른 휴리스틱이지만 부분적인 해결책일 뿐입니다. 네 개의 간결한 메시지로 번복된 결정은 그 전에 있었던 길고 상세하며 잘못된 논의보다 텍스트 가중치가 낮습니다. 최신성은 힌트를 줄 뿐이며, 분량이 여전히 더 큰 설득력을 가집니다.

결정과 단순한 생각을 구분하지 못합니다. 대화 기록은 "X로 전환해야 할지도 모른다"를 "우리는 X로 전환한다"와 동일한 충실도로 기록합니다. 둘 다 대화 차례(turn)입니다. 둘 다 인덱싱됩니다. 어느 것에도 라벨이 붙지 않습니다.

큐레이션 작업이 일어나는 위치를 바꿀 뿐, 작업의 필요성 자체를 없애지는 못합니다. 쓰기 시점의 정제가 없기 때문에, '이것이 현재 유효하고 저것은 대체되었다'는 해결(resolution)은 읽기 시점에, 매 쿼리마다 에이전트의 추론 과정에서 일어나야 합니다. 이는 작동할 수는 있지만, 한 번만 하면 될 일을 무한히 반복하는 작업이기도 합니다.

자신의 범위에 대해 솔직합니다. "에이전트가 낯선 사람처럼 구는 문제는 이미 한 대의 장비에서 해결되었습니다. 하지만 메모리는 다음 에이전트가 다른 곳에서 실행될 때 더 유용해집니다." 이는 로컬 계층이 다루는 범위와 다루지 않는 범위를 정확하게 설명한 것입니다.

사람들이 여기서 오해하기 쉬운 것들

"내 로그는 이미 내 메모리였고, 인덱싱만 하면 되었어." 절반만 맞습니다. 프로젝트 자체도 이보다 더 신중하게 표현하고 있습니다. "흔적은 잠재적인 메모리일 뿐입니다." 인덱싱은 아카이브를 쿼리할 수 있게 만들 뿐, 권위 있는 정보로 만들어 주지는 않습니다.

"출처가 확실하다는 것은 답변을 신뢰할 수 있다는 뜻이다." 출처는 주장이 어디서 나왔는지 확인할 수 있음을 의미하며, 이는 가치 있지만 신뢰성과는 다른 문제입니다. 나중에 번복한 결정에 대한 완벽한 출처의 인용구는 출처만 완벽할 뿐, 오늘날에는 틀린 정보입니다.

"정제가 없다는 것은 정보 손실이 없다는 뜻이다." 증거의 손실은 없지만, 판단의 캡처도 없습니다. 하나의 진술이 다른 진술을 대체했다는 지식 역시 정보이며, 쓰기 시점의 정제는 보통 그것이 기록되는 단계입니다.

"서비스 대신 데이터셋을 사용하면 해결된다." 프로젝트는 이러한 포지셔닝을 명확히 하고 있습니다. "여러분의 메모리는 별도의 메모리 서비스 계정이 되지 않으며, 이를 다시 임대하지도 않습니다." 이는 타당한 설계 관점입니다. 하지만 이는 최신성(currency)이 아닌 소유권에 대한 질문에 답하는 것입니다. 아카이브를 완전히 소유하더라도 그 안의 모순 중 어느 것이 유효한지 알 수 없을 수 있습니다.

"그렇다면 큐레이션된 메모리는 아카이브의 손실 압축일 뿐이네." 이 비교는 양날의 검과 같으며, 공평하게 해석해야 합니다. 아카이브는 모든 것을 보존하고 아무것도 해결하지 않습니다. 큐레이션된 저장소는 해결을 시도하지만 그 과정에서 오류가 있을 수 있습니다. 성숙한 답변은 이들이 경쟁 관계가 아니라 상호 보완적인 계층이라는 것입니다. 이는 결국 RAG 대 저장소 논쟁이 결론지은 바와 대략 일치하며, AI memory versus RAG에서 설명하는 내용이기도 합니다.

"로컬 전용은 신경 쓸 필요가 없다는 뜻이다." 로컬 방식은 대화 기록을 제3자에게 전송하는 것을 방지합니다. 하지만 대화 기록에 화면에 표시된 모든 내용이 포함된다는 사실 자체를 피할 수는 없습니다. 인덱싱 중 자격 증명 마스킹과 게시 시점 스캔은 문서화된 한계가 있는 실질적인 완화 조치이며, 이러한 한계를 읽어보는 것은 이 형태의 도구를 도입할 때 거쳐야 할 과정입니다. 이는 AI memory security의 우려 사항이기도 합니다.

해결책: 증거에는 아카이브를, 현재 답변에는 저장소를 사용하십시오

1단계: 도구를 분류하기 전에 질문부터 분류하십시오

10분 동안 여러분이 프로젝트에 대해 에이전트에게 실제로 던지는 질문들을 적어보고, 각각에 라벨을 붙여보십시오.

증거 질문(Evidence questions)은 기록에 관한 것입니다. "우리가 이것을 언제 결정했지?" "누가 이의를 제기했지?" "지난번에 발생한 오류는 무엇이었지?" "우리가 이것을 시도했던 대화 차례를 보여줘." 이러한 질문은 출처가 포함된 원본 텍스트를 원하며, 인덱싱된 아카이브가 올바른 답입니다.

상태 질문(State questions)은 현재에 관한 것입니다. "여기서 우리의 컨벤션은 무엇인가?" "어떤 서비스가 이것을 소유하고 있는가?" "그 임시 방편이 아직도 필요한가?" 이러한 질문은 하나의 현재 답변을 원하지만, 아카이브는 대신 지금까지 했던 모든 말의 랭킹 목록을 건네줄 것입니다.

대부분의 팀의 질문은 대략 반반으로 나뉘며, 이것이 두 개의 카테고리라는 사실을 알아차리는 사람은 거의 없습니다.

2단계: 하나의 상태 질문에 대해 recall이 반환하는 내용을 읽어보십시오

이것은 제 말을 그냥 믿는 것보다 그 차이를 확인할 수 있는 가장 비용이 적게 드는 방법입니다.

여러분의 팀이 실제로 번복한 결정을 하나 고르십시오. 아카이브에 결정 자체가 아니라 실제 업무에서 하듯이 해당 주제에 대해 물어보십시오. 상위 결과를 읽어보십시오.

대개 최신성 가중치가 적용된 텍스트 관련성에 따라 두 가지 입장 모두를 받게 될 것입니다. 이는 도구가 설계된 대로 정확히 작동하고 있는 것입니다. 또한 에이전트가 두 가지를 모두 받았을 때, 명시되지 않은 증거로부터 여러분이 의도한 것이 무엇인지 향후 모든 쿼리에서 결정해야 하는 순간이기도 합니다.

이를 해결할 수 있는 방법이 무엇인지 주목하십시오. 어떤 컨벤션이 유효하고 언제 변경되었는지를 명시하는 단 한 줄의 문장입니다. 그 문장은 아카이브에 존재하지 않습니다. 쓰기 시점에 그것을 생성하도록 요구받은 적이 없기 때문입니다.

3단계: 해결된 내용을 한 번만 기록하고, 나머지는 아카이브에 맡기십시오

상태 질문에 답하는 계층은 작습니다. 그것은 대화 기록의 복사본이 아니며, 복사본이 되어서도 안 됩니다.

그곳에는 해결된 내용(resolutions)이 담깁니다. 즉, 현재 유효한 컨벤션, 이전 결정을 대체한 결정, 더 이상 사용되지 않는 것이 여전히 존재하는 이유, 내부 용어의 의미, 어떤 팀이 어떤 영역을 소유하는지 등입니다. 대부분의 프로젝트에서 10줄에서 50줄 정도면 충분하며, 검색 엔진의 추측이 아니라 누군가의 결정에 기반하기 때문에 모호함이 사라집니다.

증거를 위해서는 아카이브를 유지하십시오. 해결된 내용을 정당화해야 할 때, 출처가 포함된 대화 기록은 가리키기에 정확히 올바른 대상입니다. 그리고 해결된 내용은 월요일 아침에 에이전트가 읽는 내용이 됩니다. MemoryLake는 세 단계로 설정할 수 있습니다.

1단계: API 키 생성

로그인하고 대시보드에서 API 키를 생성합니다. 저장소는 의도적으로 작고 읽기 쉽게 설계되었으며, 이것이 다음 단계를 짧게 만드는 이유입니다.

대화 기록 아카이브와 분리된 곳에 해결된 결정들을 보관하기 위해 MemoryLake API 키 생성하기
대화 기록 아카이브와 분리된 곳에 해결된 결정들을 보관하기 위해 MemoryLake API 키 생성하기

2단계: 첫 번째 메모리 업로드

이력이 아닌 해결된 내용을 작성하십시오. 현재 컨벤션, 대체된 것으로 표시된 이전 결정, 도메인 어휘, 소유권, 제약 조건과 그 이유 등이 해당됩니다.

상태 질문에 대한 현재 답변을 MemoryLake에 한 번 업로드하기
상태 질문에 대한 현재 답변을 MemoryLake에 한 번 업로드하기

대화 기록은 그대로 두십시오. 이를 인덱싱하는 것은 별도의 가치 있는 작업이며, 이 계층이 그것을 대체하려는 것은 아닙니다.

3단계: AI & 에이전트 연결

에이전트가 저장소를 가리키도록 하십시오. 상태 질문은 하나의 현재 답변을 얻고, 증거 질문은 아카이브로 가며, 어느 쪽도 상대방의 작업을 수행하도록 요구받지 않습니다. 이는 한 단계 더 추상화된 논의인 why long context isn't memory에서 다루는 주장의 한 버전입니다.

대화 기록을 작성하는 에이전트들을 MCP 및 API를 통해 MemoryLake에 연결하기
대화 기록을 작성하는 에이전트들을 MCP 및 API를 통해 MemoryLake에 연결하기

실무에서 이것이 바꾸는 것

첫 번째 변화는 "에이전트가 우리가 중단한 작업을 제안했다"는 상황을 설명할 수 있게 된다는 점입니다. 이는 검색 실패가 아닙니다. 아카이브에 두 답변이 모두 포함되어 있었고, 어느 것도 대체된 것으로 표시되지 않았기 때문입니다.

두 번째는 로그 인덱싱이 분명히 가치 있는 일이 된다는 점입니다. 아카이브에 대해 잘못된 기대를 품지 않게 되기 때문입니다. 증거 질문에 잘 답하는 아카이브는 진정한 자산입니다.

세 번째는 해결 계층이 검토할 수 있을 만큼 작게 유지된다는 점입니다. 현재 컨벤션 50줄은 사람이 읽고 수정할 수 있지만, 1만 번의 대화 차례는 불가능합니다. 이것이 keeping less in agent memory가 대개 더 많은 것을 유지하는 것보다 나은 이유입니다.

인덱싱된 세션 아카이브 사용을 위한 모범 사례

  • 질문에 라벨을 붙이십시오. 증거 질문은 기록을 원하고, 상태 질문은 하나의 답변을 원합니다.
  • 결과에서 해결책이 아닌 모순을 예상하십시오. 쓰기 시점에 정제된 것이 없으므로, 번복된 결정의 양쪽 측면이 모두 동일하게 인덱싱됩니다.
  • Do not rely on recency alone. 최신성은 가중치를 재조정할 뿐 판결을 내리지 않으며, 간결한 결정은 장황한 탐색 과정에 밀릴 수 있습니다.
  • 출처를 본래의 목적에 맞게 사용하십시오. 주장이 여전히 유효한지 확인하는 것이 아니라, 주장의 기원을 검증하는 데 사용하십시오.
  • 보안 문서를 읽어보십시오. 자격 증명 마스킹과 게시 시점 스캔은 문서화된 커버리지 한계가 있는 실질적인 조치입니다.
  • 해결된 내용을 별도로 기록하십시오. 대체된 결정은 그것을 생성한 대화 기록 외부의 어딘가에 그렇게 표시되어야 합니다.
  • 해결 계층을 짧게 유지하십시오. 아무도 검토하지 않을 정도로 길어지면 아카이브와 마찬가지로 표류하게 됩니다.
  • 두 계층을 상호 보완적으로 취급하십시오. 증거와 현재 상태는 서로 다른 작업이며, 하나의 도구로 두 가지를 모두 하려고 하면 둘 다 제대로 해내지 못합니다.

결론

세션 로그를 인덱싱하는 것은 좋은 생각이며, 이에 대한 주장은 주변의 대부분의 보도보다 이를 만드는 사람들에 의해 더 신중하게 서술되어 있습니다. 아카이브는 메모리가 아닙니다. 인덱싱, 검색, 랭킹, 출처가 그것을 유용하게 만듭니다.

하지만 그것들이 아카이브를 최신 상태로 만들 수는 없습니다. "쓰기 시점에 어떤 것도 사실로 정제되지 않는다"는 것은 실제 트레이드오프에 대한 솔직한 설명입니다. 여러분은 지금까지 했던 모든 말을 얻게 되지만, 그중 어떤 말이 여전히 유효한지에 대한 기록은 얻지 못합니다. 증거를 위해 아카이브를 유지하고, 해결된 내용을 읽을 수 있을 만큼 작은 곳에 기록하며, 어느 쪽에도 상대방의 작업을 요구하지 마십시오.

자주 묻는 질문

에이전트 세션 로그는 이미 메모리인가요?

그 자체로는 아닙니다. funes가 표현했듯이 "흔적은 잠재적인 메모리일 뿐입니다. 에이전트의 세션 로그는 여전히 아카이브에 불과합니다." 그리고 작업 중에 이를 사용하려면 "인덱싱, 검색, 랭킹, 정확한 출처가 필요합니다." 인덱싱은 아카이브를 쿼리할 수 있게 만들 뿐, 그 내용을 최신 상태로 만들어 주지는 않습니다.

"쓰기 시점에 아무것도 정제되지 않는다"는 것은 실제로 어떤 대가를 치르게 하나요?

판단력입니다. 이 특성은 "원시 증거가 그대로 보존됩니다: 쓰기 시점에 어떤 것도 사실로 정제되지 않습니다"라는 장점으로 언급되지만, 그 대가는 상충되는 두 진술 중 어느 것이 다른 것을 대체했는지 기록하는 단계가 없다는 점입니다. 그 해결은 매 쿼리마다 읽기 시점으로 이동하게 됩니다.

최신성 랭킹이 오래된 결정 문제를 해결해 주지 않나요?

부분적으로는 그렇습니다. 쿼리 파이프라인은 "최신성에 따라 가중치를 재조정"하며, 이는 올바른 휴리스틱입니다. 하지만 그것이 분량을 압도하지는 못합니다. 몇 개의 짧은 메시지로 번복된 결정은 그것이 대체한 접근 방식에 대한 긴 토론보다 텍스트 신호가 적습니다.

로컬 인덱스가 호스팅된 메모리 서비스보다 더 안전한가요?

한 가지 종류의 노출을 제거합니다. 즉, "임베딩과 재정렬이 사용자의 장비에서 실행"되며 호스팅된 모델이 세션을 처리하지 않습니다. 하지만 대화 기록에 화면에 표시된 모든 내용이 포함된다는 사실 자체를 제거하지는 못합니다. 인덱싱 중 자격 증명 마스킹과 게시 시점 스캔은 문서화된 한계가 있는 완화 조치입니다.

로그를 인덱싱해야 할까요, 아니면 메모리 저장소를 큐레이션해야 할까요?

서로 다른 질문을 위해 둘 다 필요합니다. 증거(무엇이, 언제, 어떤 에이전트에 의해, 어떤 단어로 말해졌는지)를 위해서는 인덱싱을 하십시오. 상태(지금 무엇이 사실인지)를 위해서는 큐레이션을 하십시오. 이들은 서로 다른 대상이며, 그 차이는 AI memory versus a vector database에서 다루는 것과 동일합니다.

큐레이션된 계층은 얼마나 커야 하나요?

사람들이 예상하는 것보다 작습니다. 이력이 아닌 해결된 내용(현재 컨벤션, 대체된 것으로 표시된 이전 결정, 어휘, 소유권, 제약 조건과 그 이유)을 보관합니다. 대부분의 프로젝트에서 이는 수십 줄에 불과하며, 짧게 유지하는 것이 검토 가능성을 유지하는 비결입니다.