요약 개요
-
목적
- AI 에이전트가 대화·문서에서 필요한 정보를 자동으로 추출하고 장기적으로 저장·검색할 수 있도록 지원하는 메모리 프레임워크
-
핵심 설계
- 전체 원문인 Memory value는 그대로 보존하고, 검색에는 Primary abstraction과 Cue anchors를 사용
-
주요 차별점
- 원문 전체를 직접 임베딩하는 일반적인 RAG보다 정보 손실과 검색 모호성을 줄이는 구조를 지향
-
주요 기능
- 메모리 자동 추출, 중복 제거, 병합·갱신, 의미 기반 검색, 키워드 검색, LLM 기반 다단계 검색 지원
-
적용 대상
- 장기 대화형 AI, 다중 에이전트 시스템, 개인화 서비스, 문서 기반 지식 관리
-
현재 상태
- Python 기반 MIT 라이선스 공개 프로젝트이며, 벤치마크와 실험 기능을 포함하지만 초기 공개 단계에 가까움
서론
에이전트 메모리 관리의 복잡성 해결
-
기존 AI 에이전트 개발에서는 다음 문제를 개발자가 직접 처리해야 함
- 어떤 정보를 메모리로 저장할 것인지 결정
- 저장된 정보를 언제 갱신하거나 삭제할 것인지 판단
- 사용자 질문과 관련된 기억을 검색
- 중복되거나 충돌하는 기억을 관리
-
Memora는 이러한 메모리 생명주기를 프레임워크 내부에서 처리하는 것을 목표로 함
-
개발자는 저수준 저장·검색 로직보다 에이전트의 업무 기능과 응답 생성에 집중할 수 있음
기존 메모리 구조의 한계
-
일반적인 RAG 시스템
- 문서나 대화 원문을 일정 크기로 분할
- 각 조각을 임베딩하여 벡터 데이터베이스에 저장
- 질문과 의미적으로 가까운 조각을 검색
-
이 방식은 구현이 간단하지만 다음 문제가 발생할 수 있음
- 긴 문맥이 여러 조각으로 분리됨
- 유사한 표현의 정보가 중복 저장됨
- 단순한 의미 유사도가 실제 질문 의도와 일치하지 않을 수 있음
- 압축된 요약만 저장하면 세부 정보가 손실될 수 있음
-
그래프형 지식베이스는 관계 표현에는 유리하지만 스키마와 관계 구조를 지속적으로 관리해야 하는 부담이 있음
본론
원문과 검색 구조를 분리
- Memora의 각 메모리는 세 가지 요소로 구성됨
Memory value
- 실제 저장되는 전체 정보
- 원문과 세부 내용을 압축하지 않고 보존
- 검색 인덱스에는 직접 포함하지 않음
- 정보 손실 없이 원래 문맥을 유지하는 역할
Primary abstraction
- 해당 메모리가 무엇에 관한 것인지를 나타내는 대표 요약
- 하나의 메모리마다 하나씩 생성
- 검색, 갱신, 병합, 중복 제거의 기준으로 활용
- 메모리의 정체성을 나타내는 표준 단위로 사용
Cue anchors
- 하나의 메모리에 접근할 수 있는 여러 의미적 단서
- 인물, 대상, 사건, 핵심 속성 등을 조합하여 구성
- 하나의 기억에 여러 단서를 연결할 수 있음
- 여러 기억이 동일한 단서를 공유하는 다대다 구조를 형성
검색 대상의 선택적 인덱싱
-
Memora는 모든 원문을 직접 인덱싱하지 않음
-
실제 검색에는 다음 정보만 사용
- Primary abstraction
- Cue anchors
-
검색이 완료되면 연결된 원본 Memory value를 반환
-
이 구조의 목적
- 검색 표현과 실제 저장 정보를 분리
- 검색 인덱스를 간결하게 유지
- 원문의 세부 정보를 그대로 보존
- 원문 임베딩에서 발생할 수 있는 의미적 잡음을 감소
RAG와 그래프 구조의 중간 형태
-
일반 RAG보다 구조화된 검색 단서를 제공
-
그래프 데이터베이스처럼 모든 관계를 엄격한 스키마로 정의하지 않음
-
기억 위에 추상화 계층을 추가하여 유연성과 구조성을 동시에 확보하려는 방식
-
핵심 방향
- 원문은 자유로운 형태로 저장
- 검색과 연결에는 구조화된 표현 사용
- 저장 구조와 검색 구조를 독립적으로 관리
메모리 생성부터 응답까지의 처리 흐름
1. 메모리 수집
-
에이전트가 대화 또는 문서를 처리
-
내용에서 다음 정보를 자동 추출
- 사실 정보
- 사건 및 경험
- 절차와 작업 방법
-
긴 대화는 주제별 에피소드로 분할
-
핵심 정보를 구조화된 메모리 항목으로 변환
2. 지능형 저장
-
ChromaDB 벡터 데이터베이스를 기본 저장소로 사용
-
의미 임베딩을 이용하여 메모리를 저장
-
새 정보가 입력되면 기존 메모리와 비교
-
유사하거나 중복되는 정보에 대해 다음 작업 수행
- 중복 제거
- 기존 기억과 병합
- 오래된 정보 갱신
-
선택적으로 Cue index를 생성하여 구조화된 검색을 지원
3. 적응형 검색
- 질문 유형과 설정에 따라 여러 검색 전략을 제공
Semantic 검색
- 질문과 메모리 표현 사이의 벡터 유사도를 계산
- 구현이 단순하고 일반적인 질문에 적용 가능
- 표현이 다르더라도 의미가 유사한 정보를 찾을 수 있음
Prompted 검색
- LLM이 검색 과정을 단계적으로 수행
- 최초 검색 결과를 바탕으로 검색어와 검색 범위를 반복 조정
- 복합 질문이나 여러 기억을 결합해야 하는 질문에 적합
- LLM 호출이 추가되므로 비용과 응답 시간이 증가할 수 있음
Hybrid 검색
- 벡터 기반 의미 검색과 BM25·키워드 검색을 결합
- 의미적 유사성과 정확한 단어 일치를 함께 활용
- 고유명사, 제품명, 코드, 날짜 등의 검색 누락을 줄이는 데 유리
GRPO 검색
- 강화학습으로 훈련된 검색 정책을 사용
- 질문에 필요한 메모리를 선택하는 방법 자체를 학습
- LLM 기반 반복 검색을 로컬 미세조정 모델로 대체하는 것을 목표로 함
- 현재 실험적 기능으로 분류됨
4. 답변 생성
- 검색된 메모리를 정해진 형식으로 구성
- 해당 내용을 LLM 프롬프트에 삽입
- LLM은 질문과 검색된 기억을 함께 사용하여 응답 생성
- 답변이 저장된 메모리에 근거하도록 유도
메모리 품질을 유지하는 관리 기능
-
메모리를 계속 추가하기만 하는 평면형 저장소와 달리 기존 메모리의 상태를 관리
-
주요 관리 기능
- 중복 기억 제거
- 유사 기억 병합
- 변경된 사실 갱신
- 메모리 구조 재정리
-
Primary abstraction을 메모리 갱신과 통합의 기준으로 사용
-
시간이 지나면서 메모리가 무제한으로 중복 축적되는 문제를 줄이는 것을 목표로 함
다양한 메모리 유형 지원
- 메모리 값과 추상화 방식을 다르게 구성하여 여러 유형의 기억을 표현할 수 있음
사실적 기억
- 인물, 장소, 속성, 설정 등 비교적 안정적인 정보
- 예: 특정 사용자의 근무지, 선호 도구, 프로젝트 기술 스택
일화적 기억
- 특정 시점에 발생한 사건이나 대화
- 예: 과거 회의에서 결정된 내용, 특정 오류를 해결한 과정
절차적 기억
- 작업 방법이나 반복 가능한 절차
- 예: 서버 배포 절차, 오류 점검 순서, 문서 생성 규칙
다중 에이전트의 기억 공유와 격리
-
같은 환경에서 동작하는 여러 에이전트가 공통 메모리 공간을 사용할 수 있음
-
한 에이전트가 저장한 정보를 다른 에이전트가 재사용할 수 있음
-
에이전트 또는 역할별로 메모리 범위를 제한할 수도 있음
-
기대 효과
- 에이전트 간 지식 중복 감소
- 작업 인수인계 개선
- 공통 프로젝트 정보의 일관성 유지
-
접근 제어와 격리 기능을 통해 선택적 공유와 개인정보 보호를 지원하는 구조
저장 인프라와 표현 구조의 분리
-
메모리 표현 방식이 특정 저장소에 강하게 종속되지 않도록 설계
-
프로젝트 구조에는 다음 데이터베이스 연결 기능이 포함됨
- ChromaDB
- Redis
-
로컬 또는 원격 저장 환경에 적용 가능
-
저장 백엔드를 변경하더라도 메모리의 추상화·단서 구조는 유지할 수 있음
기본 사용 방식
- Python 3.10 이상 필요
- GitHub 저장소를 복제한 뒤 패키지를 설치
- MemoraClient를 생성하고 사용자 또는 에이전트 식별자를 지정
- add()를 사용하여 대화나 문서를 메모리에 추가
- query()를 사용하여 의미 기반 검색 수행
- advance_query()를 사용하여 Prompted 또는 GRPO 방식의 고급 검색 수행
에이전트 연동 구조
-
사용자 메시지를 받으면 관련 메모리를 먼저 검색
-
검색 결과와 사용자 질문을 이용하여 답변 생성
-
생성된 답변과 사용자 메시지를 하나의 대화 기록으로 구성
-
해당 대화를 다시 Memora에 저장
-
반복 과정
- 질문 수신
- 관련 기억 검색
- 응답 생성
- 대화 저장
- 이후 질문에서 재사용
장기 메모리 성능 평가
LoCoMo 벤치마크
-
장기간 이어지는 대화에서 기억 검색 능력을 평가
-
주요 평가 유형
- 단일 단계 질문
- 여러 정보를 결합하는 다단계 질문
- 시간 관계 질문
- 개방형 질문
-
Semantic, Prompted, Cue index 등의 조합을 실험할 수 있음
LongMemEval 벤치마크
- 장기 메모리 시스템의 다양한 질문 처리 능력을 평가
- 에피소드 메모리와 의미 검색 설정을 적용할 수 있음
- 실제 장기 대화 환경에서 정보 유지와 검색 성능을 검증하는 용도
GRPO 기반 검색 정책 학습
-
검색 절차를 강화학습 정책으로 학습시키는 실험 기능
-
처리 단계
- 현재 정책으로 검색 경로 생성
- 검색 결과의 근거성·중복·비용 평가
- 그룹 상대적 이점을 계산
- GRPO 방식으로 검색 정책 학습
-
Qwen 3B 또는 7B 계열 모델과 LoRA 미세조정을 예시로 제시
-
학습에는 GPU가 필요
-
목표
- 매 검색마다 외부 LLM을 호출하는 비용 감소
- 특정 데이터와 업무에 최적화된 검색 전략 구축
-
제한점
- 학습 데이터와 평가 기준이 필요
- 모델 훈련과 운영 관리가 추가됨
- 일반 사용자가 바로 적용하기에는 Semantic 검색보다 복잡함
주요 장점
- 원문 세부 정보를 압축하지 않고 보존 가능
- 검색용 표현과 실제 정보가 분리되어 메모리 구조가 명확함
- 메모리 중복 제거와 갱신을 체계적으로 처리할 수 있음
- 의미 검색, 키워드 검색, LLM 검색, 강화학습 검색을 선택할 수 있음
- 사실적·일화적·절차적 기억을 하나의 프레임워크에서 관리 가능
- 여러 에이전트가 동일한 기억을 공유할 수 있음
- 기존 에이전트 시스템에 비교적 적은 변경으로 연동하는 것을 목표로 함
- 로컬 및 원격 저장 구조를 모두 지원할 수 있음
구조적 한계와 주의점
- Primary abstraction과 Cue anchors의 품질이 검색 성능에 직접 영향을 줌
- 자동 생성된 추상화가 부정확하면 원문이 정확하더라도 검색에서 누락될 수 있음
- 원문을 직접 인덱싱하지 않는 구조는 세부 문구나 희소 정보 검색에 불리할 가능성이 있음
- 중복 제거와 병합 과정에서 서로 다른 사건이 하나의 기억으로 잘못 통합될 수 있음
- Prompted 검색은 여러 번의 LLM 호출로 비용과 지연 시간이 증가할 수 있음
- GRPO 방식은 GPU, 학습 데이터, 평가 체계가 필요하여 운영 복잡도가 높음
- 다중 에이전트 공유 메모리는 접근 권한과 정보 격리를 명확히 설계해야 함
- 개인정보나 민감한 대화를 저장할 경우 별도의 암호화·삭제·보존 정책이 필요함
- 공개 저장소에는 릴리스가 없고 참여자와 이용 지표가 적어, 대규모 운영 안정성이 충분히 검증되었다고 보기 어려움
결론
구조화된 접근 계층을 추가한 장기 메모리 방식
-
Memora는 원문 전체를 단순히 벡터화하는 방식에서 벗어나 다음 구조를 제안함
- 세부 내용은 Memory value에 보존
- 대표 의미는 Primary abstraction으로 표현
- 다양한 검색 경로는 Cue anchors로 구성
-
핵심 가치는 정보 보존과 검색 효율 사이의 균형에 있음
-
단순한 문서 검색보다 다음 환경에서 활용 가능성이 높음
- 장기간 사용자와 상호작용하는 개인화 에이전트
- 다수의 개발·업무 문서를 지속적으로 축적하는 시스템
- 여러 역할의 에이전트가 지식을 공유하는 환경
- 과거 결정과 작업 절차를 재사용해야 하는 프로젝트
도입 전 검증 필요
-
실제 적용 시에는 다음 요소를 우선 검증해야 함
- 한국어 문서의 추상화와 Cue 생성 품질
- 기존 RAG와 비교한 검색 정확도
- 메모리 병합 과정의 오류율
- 장기간 운영 시 데이터 증가량과 검색 속도
- LLM 및 임베딩 API 비용
- 개인정보 저장과 접근 제어 방식
-
초기 단계에서는 핵심 문서 일부를 대상으로 소규모 PoC를 수행하고, 일반 RAG 및 하이브리드 검색 방식과 성능을 비교하는 접근이 적절함

18 hours ago
4








English (US) ·