도도네를 개발하면서 예상보다 훨씬 오래 붙잡고 있는 고민이 하나 있습니다. 바로 채팅창에서 대화의 맥락을 어떻게 이어갈 것인가입니다. AI 에이전트 서비스를 만들다 보면 처음에는 단순하게 생각하기 쉽습니다. 이전 대화를 전부 컨텍스트에 넣으면 되는 것 아닐까요?
모델의 컨텍스트 윈도는 계속 커지고 있습니다. 수십만 토큰은 물론이고 100만 토큰을 지원하는 모델도 등장했습니다. 그렇다면 사용자가 나눈 대화를 가능한 한 많이 넣어주는 것이 가장 좋은 방법처럼 보입니다. 하지만 도도네를 개발하며 내린 결론은 조금 달랐습니다.
AI의 기억은 얼마나 많이 넣을 수 있느냐의 문제가 아니라, 무엇을 지금 기억해야 하는지를 결정하는 문제에 가깝습니다.
긴 대화를 처리하는 가장 직관적인 방법
Claude Code나 Hermes 같은 AI 에이전트는 긴 작업을 이어가기 위해 Compaction이라는 방법을 씁니다. Anthropic도 장시간 실행되는 에이전트의 컨텍스트 관리 핵심으로 compaction을 이야기합니다. 대화가 길어지면 오래된 대화 전체를 계속 유지하는 대신 중요한 내용을 요약하고, 최근 대화와 함께 새로운 컨텍스트를 구성하는 방식입니다. Claude Code 역시 오래된 메시지와 작업 내용을 압축하면서도 중요한 설계 결정이나 미해결 문제, 구현 정보는 보존합니다.
Hermes의 구현은 조금 더 구체적입니다. 메시지가 몇 개인지가 아니라 토큰 예산을 기준으로 압축합니다. 현재 API 호출에서 실제로 쓰인 prompt token이 컨텍스트 윈도의 일정 비율에 도달하면 자동으로 압축이 시작됩니다. 기본 threshold는 50%이고, 512K보다 작은 모델에서는 너무 이른 압축을 막기 위해 최소 75%까지 끌어올립니다. 최근 메시지 일부는 원문 그대로 보호하고 가운데 구간을 요약하는 방식입니다.
굉장히 합리적인 구조입니다. 특히 하나의 코딩 작업이나 리서치처럼 단일한 목표를 오래 이어가는 작업에는 잘 맞습니다. 그런데 도도네는 조금 다른 문제를 안고 있었습니다.
도도네는 왜 전체 대화를 계속 넣지 않았을까
도도네는 AI 직원들이 일하는 가상의 오피스입니다. 한 명의 AI와 하나의 주제를 몇 시간씩 깊게 이야기하는 구조만 있는 것이 아닙니다. 마케팅 직원과 이야기하다 개발 직원에게 일을 맡기고, 프로젝트 채널에서 회의한 뒤 다시 특정 직원에게 후속 작업을 넘기고, 하루가 지나 그 직원을 다시 찾기도 합니다.
즉 도도네에서 채팅은 단순한 대화창이 아니라 업무가 발생하는 인터페이스입니다. 이 차이가 컨텍스트 설계를 바꿨습니다. 대화가 길어질 때 모든 과거 대화를 계속 모델에게 전달하면 기억은 많이 할 수 있지만, 동시에 세 가지 문제가 생깁니다.
첫 번째는 비용입니다. LLM은 매 요청마다 컨텍스트를 다시 읽습니다. 대화가 길어질수록 같은 과거 대화를 계속 다시 보내게 됩니다. 특히 컨텍스트 윈도가 매우 큰 모델에서 압축이 늦게 일어나면 세션 전체 비용이 크게 늘 수 있습니다. Hermes에서도 1M 모델에 기본 50% threshold라면 첫 compaction이 50만 토큰에서야 발생할 수 있다는 비용 논의가 있습니다.
두 번째는 속도입니다. 입력 토큰이 많아지면 모델이 처리할 정보도 많아집니다. 이번 질문과 상관없는 몇 주 전 대화까지 매번 읽게 만들 필요는 없습니다.
하지만 제가 더 중요하게 본 것은 세 번째, Context Pollution이었습니다.
컨텍스트는 많다고 항상 좋은 것이 아닙니다
Anthropic은 Context Engineering을 설명하며 긴 컨텍스트에서도 정보의 관련성과 context pollution 문제가 계속 존재한다고 지적합니다. 꽤 중요한 지점입니다. 컨텍스트 윈도가 100만 토큰이라고 해서 100만 토큰을 가득 채우는 것이 가장 좋은 상태라는 뜻은 아닙니다.
예를 들어 마케팅 AI 직원과 이런 대화를 나눴다고 해보겠습니다. 지난주에는 신규 서비스의 브랜딩을 이야기했고, 며칠 전에는 인스타그램 광고 카피를 만들었고, 어제는 제품 가격 정책을 검토했습니다. 그리고 오늘은 보도자료를 써 달라고 합니다. 기술적으로는 이 모든 대화를 모델에게 전달할 수 있습니다. 하지만 오늘 할 일이 보도자료 작성이라면, 몇 주 전 인스타그램 카피 수정 과정까지 원문 그대로 들어오는 것이 과연 도움이 될까요? 오히려 지금 작업과 상관없는 정보가 판단에 끼어들 여지가 생깁니다.
그래서 도도네는 처음부터 '얼마나 많은 대화를 넣을 것인가'보다 '얼마나 가까운 대화까지 원문으로 유지할 것인가'를 더 중요하게 봤습니다.
도도네의 방식 — 최근은 선명하게, 과거는 압축해서
지금 도도네는 최근 8건의 작업을 상세 컨텍스트로 유지합니다. AI 직원과의 대화는 약 20K자, 마스터 채널은 약 16K자의 상세 컨텍스트 예산을 씁니다. 최근 8건까지는 세부 내용을 최대한 그대로 유지하고, 그보다 오래된 대화는 Rolling Summary로 압축해 이전 맥락을 이어갑니다.
구조를 단순화하면 이렇습니다. 1~12번째 과거 업무는 Rolling Summary로, 13~20번째 최근 업무는 Detailed Context로, 그리고 지금 하는 일은 Current Mission으로 둡니다.
중요한 것은 오래된 대화를 삭제하는 것이 아니라 해상도를 낮추는 것입니다. 최근 대화는 고해상도로, 과거 대화는 저해상도로 기억합니다. 저는 이 방식이 사람의 기억과도 꽤 닮아 있다고 생각합니다. 우리는 일주일 전 대화를 문장 하나하나 기억하지 않습니다. 하지만 '그 프로젝트에서 가격을 29달러로 정했다', '고객 타깃은 솔로프리너로 정했다', '다음 작업은 랜딩페이지 제작이었다' 같은 중요한 맥락은 남습니다. AI의 장기 대화도 이런 구조가 더 자연스럽다고 판단했습니다.
그런데 요약에도 한계가 있습니다
물론 Rolling Summary가 만능은 아닙니다. 요약은 결국 정보 압축이고, 압축이 반복될수록 세부 정보는 줄어들 수밖에 없습니다. 특히 20개, 30개, 50개의 업무가 하나의 대화에 계속 쌓이면 또 다른 문제가 생깁니다. 사용자가 실제로 같은 일을 계속하고 있는지조차 불분명해집니다.
처음에는 마케팅 전략을 논의하다가, 중간에는 홈페이지를 만들고, 이후에는 채용 이야기를 하고, 다시 콘텐츠 제작을 시작할 수도 있습니다. 기술적으로는 하나의 세션으로 계속 이어갈 수 있습니다. 하지만 기술적으로 가능하다는 것과 좋은 UX라는 것은 다른 문제입니다. 그래서 도도네에는 최근 재미있는 장치를 하나 더했습니다.
AI가 먼저 '새 대화를 시작해보세요'라고 말합니다
현재 세션에서 미션이 20건에 도달하면 도도네가 사용자에게 먼저 알려줍니다. 상세하게 유지되는 최근 8건과 Rolling Summary로 접힌 약 12건이 누적된 시점입니다. 그때 이런 메시지가 표시됩니다.
“💡 이 대화가 꽤 길어졌어요. 주제가 바뀌었다면 새 세션 시작하기를 추천해요. 응답이 더 정확해지고 AI 사용료도 줄어듭니다. 이어서 진행해도 이전 흐름은 요약으로 유지돼요.”
여기서 중요한 것은 세션을 강제로 끝내지 않는다는 점입니다. 같은 프로젝트를 계속하는 사용자라면 그냥 이어가면 됩니다. 하지만 주제가 이미 바뀌었다면 새 세션을 만드는 편이 훨씬 낫습니다. 새 세션을 만들어도 필요한 이전 흐름은 요약된 컨텍스트로 이어집니다. 결국 선택권은 사용자에게 남깁니다.
이 알림을 어디서 보여줄 것인가도 중요했습니다
긴 대화 알림을 단순히 메시지 개수로 띄우는 것으로 끝내지 않았습니다. 도도네는 두 군데에서 이를 검사합니다.
첫 번째는 업무 지시가 들어오는 순간입니다. 직원과의 1:1 대화, 마스터 채널, 전체 채널, 미팅 후속 작업, 프로젝트 등 어떤 경로로 업무가 들어오든, 지시가 접수된 직후 세션 길이를 비동기로 검사합니다. 조건에 도달했다면 방금 보낸 지시 아래에 안내가 자연스럽게 나타납니다.
두 번째는 사용자가 채널에 진입하는 순간입니다. 오피스에서 AI 직원을 클릭해 대화창을 열거나 프로젝트 채널에 들어갈 때 현재 세션 상태를 검사합니다. 이미 충분히 긴 세션이라면 새 메시지를 보내기 전에도 바로 안내를 볼 수 있습니다. 그리고 같은 세션에서는 한 번만 알립니다. 사용자가 새 세션을 시작하면 다시 알림 가능한 상태가 됩니다. 아주 작은 UX지만, 에이전트 서비스에서는 이런 것이 꽤 중요합니다.
AI 에이전트에서 Memory와 Context는 다릅니다
도도네를 만들며 점점 분명해지는 것이 하나 있습니다. Memory와 Context를 같은 것으로 보면 안 된다는 것입니다.
Memory는 AI 직원이 장기간 알아야 할 정보입니다. 사용자의 선호, 회사의 정보, 업무 방식, 반복되는 규칙, 과거 프로젝트에서 결정된 중요한 사실. 이런 정보는 며칠 뒤나 몇 달 뒤에도 필요할 수 있습니다. 반면 Context는 지금 이 일을 하기 위한 작업 기억(Working Memory)에 가깝습니다. 바로 직전 요청, 현재 작업 중인 파일, 최근에 정한 사항, 지금 풀어야 하는 문제. 이 둘을 모두 채팅 히스토리에 욱여넣어 해결하려 하면 시스템이 금방 무거워집니다.
그래서 좋은 에이전트 시스템은 결국 여러 층의 기억을 가지게 된다고 생각합니다. 지금 수행 중인 일(Current Mission), 최근 몇 개의 상세한 상호작용(Recent Context), 과거 작업의 압축된 흐름(Rolling Summary), 그리고 세션과 무관하게 오래 유지해야 할 사실과 규칙(Long-term Memory). 모델의 컨텍스트 윈도는 이 가운데 필요한 것을 그 순간 조합하는 공간일 뿐입니다.
컨텍스트 윈도가 커질수록 Context Engineering이 더 중요해집니다
아이러니한 점이 있습니다. 컨텍스트 윈도가 작던 시절에는 개발자가 어쩔 수 없이 정보를 줄여야 했습니다. 128K, 200K, 1M으로 커지면서 이제는 많은 것을 넣을 수 있게 됐습니다. 그러자 새로운 문제가 생겼습니다. 무엇을 넣지 않을 것인가를 결정해야 합니다.
좋은 AI 에이전트는 어쩌면 모든 것을 기억하는 AI가 아닐지도 모릅니다. 지금 필요한 것은 선명하게 기억하고, 오래된 것은 적절히 압축하고, 중요한 것은 장기 기억으로 옮기고, 주제가 달라지면 새 작업 공간을 만드는 AI입니다. 결국 에이전트를 만들며 점점 더 많이 하게 되는 일은 Prompt Engineering이 아니라 Context Engineering입니다.
핵심 질문도 바뀌고 있습니다. 예전에는 '모델에게 무엇을 알려줄 것인가'였다면, 지금은 오히려 '지금 이 순간, 모델이 무엇까지 알고 있어야 하는가'에 가깝습니다.
도도네를 개발하며 제가 가장 오래 붙잡고 있는 것도 이 문제입니다. AI에게 더 많은 것을 기억시키는 것보다, 필요한 것을 필요한 순간에 기억하게 만드는 것. 앞으로 AI 에이전트의 품질을 가르는 중요한 차이는 여기서 만들어질 것이라고 생각합니다.
— 도도네를 만드는 솔로프리너, 고승원