ai-agents-for-beginners

AI 에이전트를 위한 메모리

Agent Memory

AI 에이전트를 만들 때의 고유한 이점을 논할 때 주로 두 가지가 이야기됩니다: 작업을 완료하기 위해 도구를 호출하는 능력과 시간이 지남에 따라 개선할 수 있는 능력입니다. 메모리는 더 나은 경험을 사용자에게 제공할 수 있는 자기 개선 에이전트를 만드는 기반에 있습니다.

이 수업에서는 AI 에이전트의 메모리가 무엇인지, 그리고 이를 어떻게 관리하고 애플리케이션에 유리하게 사용할 수 있는지 살펴보겠습니다.

소개

이 수업에서는 다음 내용을 다룹니다:

AI 에이전트 메모리 이해하기: 메모리가 무엇이며 에이전트에게 왜 필수적인지.

메모리 구현 및 저장 방법: 단기 및 장기 메모리에 중점을 두고 AI 에이전트에 메모리 기능을 추가하는 실용적인 방법.

AI 에이전트를 자기 개선형으로 만들기: 메모리가 과거 상호작용으로부터 배우고 시간이 지남에 따라 개선할 수 있게 하는 방법.

사용 가능한 구현

이 수업에는 두 가지 포괄적인 노트북 튜토리얼이 포함되어 있습니다:

13-agent-memory.ipynb: Mem0와 Azure AI Search를 사용해 Microsoft Agent Framework와 함께 메모리 구현

13-agent-memory-cognee.ipynb: 임베딩 기반 지식 그래프를 자동 구축하고, 그래프를 시각화하며 지능형 검색을 구현하는 Cognee를 사용한 구조화된 메모리 구현

학습 목표

이 수업을 완료하면 다음을 알게 됩니다:

작업 메모리, 단기 메모리, 장기 메모리를 포함한 다양한 AI 에이전트 메모리 유형과 인격 메모리, 에피소드 메모리 같은 전문화된 형태를 구별할 수 있습니다.

Microsoft Agent Framework를 사용해 단기 및 장기 메모리를 구현하고 관리하기, Mem0, Cognee, 화이트보드 메모리 등 도구를 활용하고 Azure AI Search와 통합하는 방법.

자기 개선 AI 에이전트의 원리 이해하기와 견고한 메모리 관리 시스템이 지속 학습과 적응에 어떻게 기여하는지.

AI 에이전트 메모리 이해하기

핵심적으로, AI 에이전트를 위한 메모리는 정보를 유지하고 회상할 수 있게 하는 메커니즘을 의미합니다. 이 정보는 대화에 관한 구체적인 세부사항, 사용자 선호, 과거 행동 또는 학습한 패턴일 수 있습니다.

메모리가 없으면 AI 애플리케이션은 상태가 없는(stateless) 경우가 많아, 모든 상호작용이 처음부터 시작됩니다. 이는 에이전트가 이전의 맥락이나 선호를 “잊어버려” 반복적이고 답답한 사용자 경험을 초래합니다.

메모리가 왜 중요한가?

에이전트의 지능은 과거 정보를 회상하고 활용하는 능력과 깊이 연관됩니다. 메모리가 있으면 에이전트는:

반영적: 과거 행동과 결과에서 학습함.

상호작용적: 진행 중인 대화의 맥락을 유지함.

능동적 및 반응적: 과거 데이터에 기반해 필요를 예측하거나 적절히 대응함.

자율적: 저장된 지식을 활용해 더 독립적으로 작동함.

메모리를 구현하는 목적은 에이전트를 더 신뢰할 수 있고 유능하게 만드는 것입니다.

메모리 유형

작업 메모리 (Working Memory)

이것은 에이전트가 단일 진행 중 작업 또는 사고 과정 동안 사용하는 스크래치 페이퍼와 같습니다. 다음 단계를 계산하는 데 필요한 즉각적인 정보를 보유합니다.

AI 에이전트에서는 작업 메모리가 긴 채팅 기록 전체가 아니라도 대화에서 가장 관련성 높은 정보를 포착하는 경우가 많습니다. 요구사항, 제안, 결정, 행동 같은 핵심 요소를 추출하는 데 집중합니다.

작업 메모리 예시

여행 예약 에이전트에서 작업 메모리는 사용자가 “파리로 여행 예약하고 싶다”고 현재 요청하는 내용을 포착합니다. 이 구체적 요구사항이 에이전트의 즉각적인 맥락에 저장돼 현재 상호작용을 안내합니다.

단기 메모리 (Short Term Memory)

이 메모리는 단일 대화나 세션 동안 정보를 유지합니다. 현재 대화의 맥락으로, 에이전트가 이전 대화 차례를 참고할 수 있게 합니다.

Microsoft Agent Framework Python SDK 샘플에서 이는 agent.create_session()으로 생성되는 AgentSession에 해당합니다. 세션은 프레임워크 내장 단기 메모리로, 대화 맥락을 세션 재사용 동안에 유지하지만 세션 종료나 애플리케이션 재시작 시에는 유지되지 않습니다. 사실과 선호를 세션 간에도 유지하려면 일반적으로 데이터베이스, 벡터 인덱스 또는 다른 영속 스토어를 통한 장기 메모리를 사용하세요.

단기 메모리 예시

사용자가 “파리행 비행기 표는 얼마인가요?”라고 묻고 이어서 “거기 숙소는 어떻죠?”라고 물으면, 단기 메모리가 같은 대화에서 “거기”가 “파리”를 가리킨다는 것을 에이전트가 알게 합니다.

장기 메모리 (Long Term Memory)

복수의 대화나 세션에 걸쳐 정보를 유지합니다. 에이전트가 사용자 선호, 과거 상호작용, 일반 지식을 오랜 기간 기억하도록 합니다. 개인화에 매우 중요합니다.

장기 메모리 예시

장기 메모리는 “Ben은 스키와 야외 활동을 좋아하며, 산 전망이 있는 커피를 선호하고, 이전 부상 때문에 고급 스키 슬로프를 피하려 한다”는 정보를 저장할 수 있습니다. 과거 상호작용에서 학습한 이 정보는 이후 여행 계획 세션에서 맞춤형 추천을 만듭니다.

인격 메모리 (Persona Memory)

이 전문화된 메모리는 에이전트가 일관된 “성격”이나 “페르소나”를 개발하도록 도와줍니다. 에이전트가 자신에 관한 정보나 역할에 대해 기억하게 하여 상호작용을 더 유연하고 집중되게 만듭니다.

인격 메모리 예시
여행 에이전트가 “전문 스키 플래너”로 설계되었다면, 인격 메모리는 이 역할을 강화하여 전문가의 어조와 지식에 맞는 응답을 하도록 합니다.

워크플로우/에피소드 메모리 (Workflow/Episodic Memory)

복잡한 작업을 수행하는 동안 에이전트가 거치는 단계들의 순서를 저장합니다. 성공과 실패 모두 포함됩니다. 과거 경험을 기억해 학습하는 것과 같습니다.

에피소드 메모리 예시

에이전트가 특정 비행기 예약을 시도했으나 좌석이 없어 실패했다면, 에피소드 메모리가 이 실패를 기록해 후속 시도 시 대안 비행편을 제공하거나 문제 상황을 더 자세히 알릴 수 있게 합니다.

개체 메모리 (Entity Memory)

대화에서 사람, 장소, 사물 같은 특정 개체와 이벤트를 추출해 기억합니다. 이를 통해 에이전트는 논의된 주요 요소들의 구조화된 이해를 구축할 수 있습니다.

개체 메모리 예시

과거 여행 대화에서 “파리”, “에펠탑”, “Le Chat Noir 레스토랑에서 저녁 식사” 같은 개체를 추출할 수 있습니다. 이후 상호작용에서 에이전트가 “Le Chat Noir”를 기억해 새로운 예약을 제안할 수 있습니다.

구조화된 RAG (Structured RAG, Retrieval Augmented Generation)

RAG는 보다 넓은 기법이며, “구조화된 RAG”는 강력한 메모리 기술로 강조됩니다. 대화, 이메일, 이미지 같은 다양한 소스에서 밀도 있고 구조화된 정보를 추출해 응답의 정밀도, 재현율 및 속도를 향상시킵니다. 기존 RAG가 의미적 유사성에만 의존하는 것과 달리 구조화된 RAG는 정보의 본래 구조를 활용합니다.

구조화된 RAG 예시

단순 키워드 매칭 대신 이메일에서 비행기 세부사항(목적지, 날짜, 시간, 항공사)을 파싱해 구조화된 방식으로 저장할 수 있습니다. 예를 들어 “화요일에 예약한 파리행 비행기는 무엇인가요?” 같은 정밀한 쿼리가 가능해집니다.

메모리 구현 및 저장

AI 에이전트용 메모리 구현은 메모리 관리의 체계적인 과정을 포함합니다: 생성, 저장, 검색, 통합, 업데이트, 심지어는 “잊기”(삭제)까지. 이 중에서 검색은 특히 핵심적입니다.

전문화된 메모리 도구

Mem0

에이전트 메모리를 저장하고 관리하는 한 방법은 Mem0 같은 전문화된 도구를 사용하는 것입니다. Mem0는 지속적인 메모리 계층으로 작동해 에이전트가 관련 상호작용을 회상하고, 사용자 선호 및 사실적 맥락을 저장하며, 시간에 따라 성공과 실패에서 학습할 수 있도록 합니다. 무상태 에이전트가 상태 저장 에이전트로 변하는 개념입니다.

두 단계 메모리 파이프라인: 추출과 업데이트로 작동합니다. 먼저, 에이전트 스레드에 추가된 메시지가 Mem0 서비스로 보내져, 대형 언어 모델(LLM)을 활용해 대화 기록을 요약하고 새 메모리를 추출합니다. 뒤이어 LLM 기반 업데이트 단계에서 메모리를 추가, 수정, 삭제할지 결정하여 벡터, 그래프, 키-값 데이터베이스를 포함하는 하이브리드 저장소에 저장합니다. 이 시스템은 다양한 메모리 유형을 지원하며, 개체 관계 관리를 위한 그래프 메모리도 통합할 수 있습니다.

Cognee

또 다른 강력한 방식은 Cognee를 사용하는 것입니다. Cognee는 AI 에이전트용 오픈소스 의미론적 메모리로, 구조화 및 비구조화 데이터를 임베딩으로 지원되는 쿼리 가능한 지식 그래프로 변환합니다. Cognee는 벡터 유사도 검색과 그래프 관계를 결합한 이중 저장소 아키텍처를 제공해, 에이전트가 단순히 유사한 정보를 이해하는 것뿐 아니라 개념 간 관계도 이해할 수 있게 합니다.

벡터 유사도, 그래프 구조, LLM 추론을 혼합하는 하이브리드 검색에 뛰어나며, 원시 청크 조회에서 그래프 인식 질의응답까지 지원합니다. 시스템은 연결된 하나의 그래프 형태로 계속 진화하고 성장하는 실시간 메모리를 유지하며, 단기 세션 컨텍스트와 장기 지속 메모리를 모두 지원합니다.

Cognee 노트북 튜토리얼 (13-agent-memory-cognee.ipynb)은 이 통합 메모리 계층 구축을 시연하며, 다양한 데이터 소스 흡수, 지식 그래프 시각화, 에이전트 요구에 맞춘 다양한 검색 전략을 활용한 쿼리 예제를 제공합니다.

RAG를 통한 메모리 저장

mem0 같은 전문 메모리 도구 이외에도, Azure AI Search 같은 강력한 검색 서비스를 백엔드로 활용해 메모리를 저장하고 검색할 수 있습니다. 특히 구조화된 RAG에 적합합니다.

이를 통해 에이전트 응답을 자체 데이터에 기반하게 하여 더 관련성 높고 정확한 답변을 제공합니다. Azure AI Search는 사용자 특정 여행 메모리, 제품 카탈로그 또는 기타 도메인별 지식을 저장하는 데 사용될 수 있습니다.

Azure AI Search는 대규모 데이터셋(대화 기록, 이메일, 이미지 등)에서 밀도 있고 구조화된 정보를 추출하고 검색하는 데 탁월한 구조화된 RAG 기능을 지원합니다. 이는 전통적인 텍스트 청킹과 임베딩 방식에 비해 “초인적 정밀도와 재현율”을 제공합니다.

AI 에이전트 스스로 발전시키기

자기 개선형 에이전트의 일반적인 패턴은 “지식 에이전트”를 도입하는 것입니다. 이 별도의 에이전트는 사용자와 주 에이전트 간의 주요 대화를 관찰합니다. 역할은 다음과 같습니다:

  1. 가치 있는 정보 식별: 대화 중 일반 지식이나 특정 사용자 선호로 저장할 가치가 있는 부분을 결정함.

  2. 추출 및 요약: 대화에서 핵심 학습 내용이나 선호를 추출·요약함.

  3. 지식 베이스에 저장: 이 추출 정보를 벡터 데이터베이스 등에 영속적으로 저장해 나중에 조회할 수 있도록 함.

  4. 향후 쿼리 증강: 사용자가 새 쿼리를 시작할 때 지식 에이전트가 관련 저장 정보를 검색해 사용자 프롬프트에 덧붙여 주요 에이전트에게 중요한 컨텍스트를 제공합니다 (RAG와 유사).

메모리 최적화

지연시간 관리: 사용자 상호작용 속도를 저하시킬 위험을 줄이기 위해, 초기에는 더 저렴하고 빠른 모델을 사용해 저장/검색할 가치가 있는 정보인지 빠르게 판단하며, 필요할 때만 복잡한 추출/검색 과정을 호출합니다.

지식 베이스 관리: 지식 베이스가 커짐에 따라, 자주 쓰지 않는 정보는 비용 관리를 위해 “콜드 스토리지”로 옮겨둘 수 있습니다.

에이전트 메모리에 대해 더 궁금한 점이 있나요?

Microsoft Foundry Discord에 참여해 다른 학습자들과 만나고, 오피스 아워에 참석하며 AI 에이전트 질문에 대한 답변을 받아보세요.


면책 조항: 이 문서는 AI 번역 서비스 Co-op Translator를 사용하여 번역되었습니다. 정확성을 기하기 위해 노력하고 있으나, 자동 번역은 오류나 부정확한 부분이 있을 수 있음을 유의하시기 바랍니다. 원본 문서의 원어본이 권위 있는 자료로 간주되어야 합니다. 중요한 정보의 경우, 전문가의 인간 번역을 권장합니다. 이 번역 사용으로 인해 발생하는 오해나 잘못된 해석에 대해 당사는 책임을 지지 않습니다.