Copilot Studio 에이전트는 어떻게 기억을 유지할까: Memory 아키텍처 깊이 보기

대규모 언어 모델(LLM)은 본질적으로 “무상태(stateless)”입니다. 대화창을 닫고 새로 열면 모든 것이 사라집니다. 사용자가 두 번이나 고쳐준 파일 명명 규칙도, 3월에 바뀐 재무 승인자 정보도 — 매 세션은 완전한 타인으로 시작합니다. 검색창이라면 상관없지만, “동료”가 되어야 하는 에이전트에게는 치명적인 약점입니다.
Microsoft Copilot Studio Customer Advisory Team(CAT)이 최근 공개한 글 “Memory in Copilot Studio: How Agents Carry Knowledge Across Conversations”는 이 문제를 어떻게 공학적으로 풀었는지 설명합니다. 이번 포스팅에서는 그 핵심 개념과 Copilot Studio의 실제 구현 방식을 한국 메이커·개발자 관점에서 정리합니다.
왜 에이전트에게 기억이 필요한가
연구자가 일하는 방식을 떠올려 보세요. 프로젝트 중간에 “지난 화요일에 뭘 시도했더라?”라고 스스로 묻습니다. 향수에 젖어서가 아니라, 이미 실패한 실험을 반복하느라 한 주를 낭비하지 않기 위해서입니다. 그 답은 실험 노트에 있고, 그 노트가 쓸모 있으려면 세 가지가 필요합니다.
- 무엇을 적어둘 가치가 있는지 아는 것
- 나중에 정확한 페이지를 찾아내는 법을 아는 것
- 더 이상 사실이 아닌 내용을 지워야 할 때를 아는 것
이 세 가지 문제 — 무엇을 쓰고, 무엇을 꺼내 쓰고, 무엇을 잊을지 — 가 바로 에이전트 메모리 시스템이 풀어야 할 과제입니다. 메모리가 없으면 세션마다 처음부터 다시 시작하지만, 메모리가 있으면 이전 세션에서 쌓은 지식을 다음 세션이 그대로 이어받을 수 있습니다.
두 가지 시간 범위: 단기 기억과 장기 기억
단기 기억 — 살아있는 컨텍스트 윈도우
단기 기억은 에이전트가 별도로 조회하지 않고도 지금 바로 볼 수 있는 모든 것입니다. 현재 대화, 최근 도구 실행 결과, 진행 중인 추론 과정이 여기에 해당합니다. 즉시 접근 가능하고 비용이 들지 않지만, 유한합니다. 대화는 계속 길어지는데 컨텍스트 윈도우는 그렇지 않기 때문입니다.
이를 해결하는 공학적 답이 압축(compaction)입니다. 대화가 한계에 가까워지면 오래된 턴은 요약으로 압축하고, 최근 턴은 그대로 보존합니다. 압축은 사용자가 직접 요청하거나, 런타임이 컨텍스트 압박 임계값을 넘으면 자동으로 수행합니다. 어느 쪽이든 모든 단어를 보존하지는 않지만 대화의 맥락은 유지됩니다.
장기 기억 — 세션 밖에서도 남는 지식
압축은 한 대화 안에서의 여유 공간을 벌어줄 뿐, 다음 대화에는 아무 도움이 되지 않습니다. 장기 기억은 세션을 완전히 벗어나 존재하는 지식이며, 파일 저장소·데이터베이스·인덱스처럼 어딘가에 영속적으로 저장되어야 합니다. 런타임은 대화 중/이후에 저장소에 쓰고(write), 필요할 때 관련 내용을 다시 컨텍스트로 불러옵니다(retrieve).
| 구분 | 단기 기억 | 장기 기억 |
|---|---|---|
| 정체 | 살아있는 컨텍스트 윈도우 | 세션 밖에 저장된 지식 |
| 내용 | 현재 대화, 최근 도구 결과, 진행 중 추론 | 일화·의미·절차 지식 |
| 수명 | 휘발성, 창을 닫으면 사라짐 | 영속적, 세션을 넘어 유지 |
| 접근 | 즉시·무료지만 유한 | 명시적으로 쓰고, 다시 불러와야 함 |
| 핵심 기법 | 압축(Compaction) | 쓰기와 회상(Write & Recall) |
장기 기억의 세 가지 유형
“장기 기억”은 사실 서로 다른 세 종류의 지식을 아우르는 상위 개념입니다. 형성되는 방식도, 쓰이는 방식도, 안전성 측면에서 지니는 위험도도 각기 다릅니다.
| 유형 | 설명 | 예시 |
|---|---|---|
| 일화 기억 (Episodic) | 언제·어디서·어떻게 있었던 구체적 과거 사건의 기록. 날짜가 적힌 일기 항목에 가깝다 | 화요일: 사용자가 주문 XYZ 환불을 요청했고, 나는 이를 상급자에게 에스컬레이션했다 |
| 의미 기억 (Semantic) | 일화 기억을 증류한 결과. 경험을 사실로 전환하되, 그 사실이 더 이상 유효하지 않게 됐을 때 이를 알아채야 한다 | 경험: “앨리스가 베를린으로 이사한다고 했다” → 사실: “앨리스는 베를린에 산다” |
| 절차 기억 (Procedural) | 학습된 루틴·워크플로·경험칙. 에이전트의 “근육 기억”이며, 정책을 아는 것과 그것을 실행하는 법을 아는 것의 차이다 | 의미 기억: “500달러 이상 지출은 승인이 필요하다” → 절차 기억: 영수증 확인 → 분류 → 정책 대조 → 승인자에게 전달 → 파일링 → 확인 회신 |
절차 기억은 Copilot Studio의 Skill과 사촌 관계입니다. 재사용 가능한 검증된 루틴이라는 점에서, “사실을 아는 것”이 아니라 “작업을 수행하는 법을 아는 것”으로의 도약을 의미합니다.
Copilot Studio는 Memory를 어떻게 구현했나
Copilot Studio의 Memory는 의도적으로 구체적인 모델을 따릅니다. 에이전트는 사용자의 기억을 Microsoft 관리 스토리지 내 전용 폴더에 파일로 저장합니다. 에이전트마다 사용자 한 명당 별도 폴더를 유지하며, 상호작용이 이어질 때마다 그 폴더를 읽고 씁니다.
캡처 → 저장 → 적용의 3단계
- 캡처(Capture): 대화 중 공유된 선호도와 맥락 같은 신호를 기록
- 저장(Store): 그 신호를 사용자 전용 메모리 폴더에 파일로 저장
- 적용(Apply): 이후 상호작용에서 그 기억을 읽어 응답·결정에 반영
메이커는 Build 탭에서 에이전트별로 Memory를 켤지 결정합니다. 기억 자체는 개별 사용자에게 비공개이며, 다른 사용자나 메이커도 열람할 수 없습니다.
기억은 또한 사용자가 직접 통제합니다. 메모리가 켜진 에이전트와 새 채널에서 처음 상호작용하면, 에이전트의 응답에 해당 사용자의 메모리 포털 링크가 포함됩니다. 포털은 새 브라우저 탭에서 열리며, 사용자는 저장된 내용을 확인하거나 전체 기억을 지울 수 있습니다. 채팅 중에도 사용자는 에이전트가 기억하는 내용을 설명해 달라거나, 특정 기억을 수정·삭제하거나, 포털 링크를 다시 보여달라고 요청할 수 있습니다.
사용자별 분리, 보안 샌드박스에서 실행
두 가지 견고한 경계가 이 설계를 떠받칩니다.
- 모든 사용자는 에이전트마다 전용 메모리 폴더를 가지므로, 한 사람의 맥락이 다른 사람과 공유되지 않습니다.
- GitHub Copilot harness로 구동되는 에이전트는 각 작업을 Copilot Studio가 제공하는 보안 샌드박스 안에서 실행합니다.
리플렉션 — 더 넓은 메모리 설계 패턴
캡처·저장·적용이 “미래 상호작용을 어떻게 지원하는가”를 설명한다면, 리플렉션(Reflection)은 한 걸음 더 나아갑니다. 리플렉션 루프에서 에이전트는 실시간 대화 밖에서 저장된 경험을 다시 검토해 중요한 것을 통합하고, 중복을 병합하고, 오래된 정보를 갱신하고, 더 이상 쓸모없는 것을 폐기합니다. 매주 끝에 실험 노트를 다시 검토하는 것과 같은 원리로, 모든 항목을 영구불변의 진실로 취급하지 않는다는 뜻입니다.
신뢰하되 검증한다
이 동작 방식이 실제로 통하려면 검증이 필요합니다. Memory가 더 많은 고객에게 확대되기 전에 Microsoft의 엔지니어링·데이터 사이언스 팀이 직접 검증을 수행합니다. 메모리가 나쁜 에이전트는 충돌하지 않습니다. 그저 자신만만하게 틀릴 뿐입니다. 그래서 다음 행동들을 기준으로 평가합니다.
- 회상(Recall): 며칠 뒤 완전히 새로운 대화에서도 에이전트가 들었던 내용을 여전히 알고 있는가?
- 부정 회상(Negative recall): 기억이 오래됐거나 단순히 틀렸을 때, 에이전트가 이를 알아채는가, 아니면 자신 있게 반복하는가?
- 기권(Abstention): 실제로 말한 적 없는 내용에 대해, 에이전트가 모른다고 말하는가? 정확한 거절을 그럴듯한 추측과 맞바꾸는 에이전트는 더 신뢰할 만해진 것이 아니라 덜 신뢰할 만해진 것이다.
- 환각(Hallucination): 기억을 갖게 된 것이 모델로 하여금 메모리에 없던 세부사항을 지어내도록 유혹하는가?
Memory in Copilot Studio는 GitHub Copilot harness로 구동되는 에이전트에 대해 프로덕션 수준 프리뷰(production-ready preview) 단계입니다. 프리뷰 기능과 문서는 변경될 수 있습니다.
한국 메이커를 위한 시사점
- “더 많이 기억하는 것”이 아니라 “옳은 것을 기억하는 것”: 메모리 시스템의 가치는 회상량이 아니라, 불필요한 반복 질문을 없애는 데 있습니다. 상담·운영·분석 업무에서 “이 고객은 이미 두 번 에스컬레이션됐다”, “이 승인은 항상 2차 서명이 필요하다” 같은 맥락을 매번 설명하지 않아도 됩니다.
- 사용자 통제권이 기본값: 메모리 포털을 통한 열람·삭제 기능은 한국 기업이 흔히 우려하는 “에이전트가 내 정보를 모아 둔다”는 불안을 완화하는 장치입니다. 거버넌스 설계 시 이 투명성 모델을 참고할 만합니다.
- 절차 기억과 Skill의 연결고리: 절차 기억이 Skill과 사촌 관계라는 설명은, Copilot Studio에서 Skill을 설계할 때 “에이전트가 무엇을 아는가”뿐 아니라 “무엇을 실행할 줄 아는가”까지 염두에 두어야 함을 시사합니다.
- 프리뷰 단계임을 유의: 현재는 GitHub Copilot harness 기반 에이전트 대상 프로덕션 수준 프리뷰입니다. 정식 GA 범위와 타 harness 지원 여부는 공식 문서 업데이트를 지속 확인해야 합니다.
마무리
메모리는 에이전트를 “쓸 때마다 매번 설명해야 하는 도구”에서 “점점 나를 아는 동료”로 바꾸는 핵심 요소입니다. Copilot Studio는 사용자별 전용 폴더, 보안 샌드박스 실행, 포털을 통한 사용자 통제라는 명확한 경계 위에 캡처·저장·적용의 3단계 수명 주기를 구축했습니다.
여러분의 에이전트가 이제 그만 잊었으면 하는 첫 번째 것은 무엇인가요?
원문: Memory in Copilot Studio: How Agents Carry Knowledge Across Conversations (Microsoft Copilot Studio CAT Blog)
자세한 내용은 원문을 참조하세요.