# AI 장기기억 시스템 프로젝트 (Dewey) - 본 프로젝트는 **Open-LLM-VTuber 방송중 발생하는 대화 및 상호작용 데이터**를 효율적으로 수집·정제·저장하기 위한 **장기기억(Long-Term Memory, LTM) 관리 시스템**을 구축하는 것을 목표로 한다. 시스템은 Spring Boot·Redis·PostgreSQL을 기반으로 구성된다. 추후 더 나아가 다양한 콘텐츠에서도 사용할 수 있도록 범용성 있는 MCP를 구성 --- ## 📌 프로젝트 목표 * 발생하는 방대한 텍스트 데이터를 **실시간으로 수집** * 저장 후보 데이터를 Redis에 **임시 저장 및 정제** * 매일 00시 배치 작업을 통해 Redis 데이터를 **AI가 자동 요약·중요도 판단** * 최종 정제된 "장기 기억 데이터"만 PostgreSQL에 **영구 저장** * AI가 필요할 때 PostgreSQL 또는 Redis에서 기억을 **조회·검색**할 수 있는 구조 제공 --- ## 💻 테스트 환경 * 4코어 8쓰레드 CPU * 10TB 저장공간 * 64GB의 메모리 * 추후 쌓이는 데이터량을 확인후 최소한의 저장용량으로 수정할 예정. --- ## 📐 전체 아키텍처 ``` AI ↔ Spring Boot(Dewey) ├── Redis (단기 메모리 + 캐시 + 벡터 검색) └── PostgreSQL (정제된 장기기억 영구 저장) ``` ### 폴더구조 ``` /src └── main ├── java │ └── com.pandol365.dewey │ ├── api <-- 외부로 노출되는 REST API 계층 │ │ ├── controller <-- 요청을 받아 Service 호출하는 곳 (Endpoint) │ │ ├── request <-- Controller에서 사용하는 요청 DTO │ │ └── response <-- 응답 DTO (API Response 전용) │ │ │ ├── config <-- Spring 설정, Bean 등록, CORS, Filter, ModelConfig 등 │ │ │ ├── domain <-- 핵심 비즈니스 도메인 계층 │ │ ├── memory <-- Memory Store 엔티티, MemoryService 등 │ │ └── embedding <-- 로컬 임베딩 모델 로딩 및 처리 로직 │ │ (ONNX 모델 실행, 텍스트→벡터 변환) │ │ │ ├── vector <-- 벡터 저장·검색 기능 (FAISS, HNSW, Lucene 등) │ │ Embedding 결과를 인덱싱, 탐색하는 모듈 │ │ │ ├── exception <-- 글로벌 예외 처리, 커스텀 예외 클래스 │ │ │ └── DeweyApplication.java <-- Spring Boot 메인 실행 파일 │ └── resources ├── application.yml <-- Spring 설정 파일 ├── model/ <-- 로컬 ONNX 임베딩 모델 저장 위치 └── other configs... <-- (logback.xml 등) ``` --- # ⭐ 시스템 구성 요소 ## 1. Spring Boot (Dewey API) Spring Boot는 전체 장기기억 처리의 중심 역할을 수행한다. ### 주요 기능 ### ✔ 실시간 기억 수집 API * 방송 중 AI가 "기억 후보 데이터"를 전송하면 Redis에 저장 * 전체 대화 중 약 **30%(사용자 조정)만 자동 선별**하여 Redis에 기록 ### ✔ 장기기억 조회 API * AI가 특정 질문을 할 때, PostgreSQL 또는 Redis에서 관련 데이터를 검색 후 반환 ### ✔ 배치 처리 (00시 자동 실행) * Redis에서 모든 raw memory 데이터를 수집 * 특수문자/이모티콘 제거 및 정제 * 정제된 데이터를 AI에게 전달 * AI가 "최종 저장용 메모리"를 반환 * PostgreSQL에 저장 --- ## 2. Redis (단기 캐시 + 벡터 검색) Redis는 빠른 처리용 메모리 DB로 사용된다. ### 역할 * 방송 중 저장 요청되는 모든 메모리 후보를 임시 저장 * TTL(예: 3일)을 기반으로 자동 관리 * 불필요한 데이터(맞춤법 엉망, 이모지, 중복)도 임시 저장 후 배치에서 필터링 * RediSearch를 이용한 **벡터 검색 기능** 확장 가능 ### 장점 * 초고속 읽기/쓰기 * 대규모 텍스트도 부담 없음 * 캐시 기반이므로 서버 리소스 절약 --- ## 3. PostgreSQL (영구 장기기억 저장) Redis에서 정제된 메모리를 AI가 선별하여 반환한 뒤 최종 저장하는 공간. ### 특징 * 사용자의 핵심 정보, 특징, 취향, 약속, 반복적 패턴 등 * 벡터 임베딩도 함께 저장 가능 * 중요도/카테고리/태그 필드 지원 ### 예시 필드 * id * user_id * memory_text * importance (1~5) * tags (json) * created_at * embedding (vector) --- # 🧠 장기기억 처리 흐름 ## 1단계: 실시간 처리 (방송 중) ``` AI → 기억 후보 요청 → Spring Boot → Redis 저장 ``` * 전체 메시지 중 약 30% 자동 선택해 저장 * TTL 기반으로 며칠간 보관 --- ## 2단계: 일일 배치 처리 (00시) 1. Redis 모든 key 스캔 2. 특수문자/이모지 제거 → 데이터 정제 3. 정제된 대화를 AI에게 전달 4. AI가 "중요 기억만" 골라서 JSON으로 반환 5. PostgreSQL에 최종 저장 6. Redis는 비우거나 TTL로 자동 만료 --- ## 3단계: 기억 조회 (검색) AI가 메모리 조회 요청 시: 1. 최근 기억 → Redis에서 빠르게 검색 2. 장기 기억 → PostgreSQL에서 벡터 유사도 또는 키워드 검색 3. 반환 후 AI가 응답 생성에 사용 --- # 🔍 추가 기능 (선택) * 중복 제거 로직 * 대화 길이/이모지 비율 필터링 * 벡터 기반 유사도 검색 * 태그/카테고리 자동 분류 * 메모리 업데이트(PATCH) * Garbage Collection (TTL 기반 자동 삭제) --- # 📦 필요 기술 스택 * **Java 21+** * **Spring Boot** * **Redis 7+ / RediSearch 모듈(Optional)** * **PostgreSQL 16+** * **MyBatis** * **Spring Scheduler** --- # 🎯 목표 효과 * 방송 중 딜레이 없이 자유로운 기억 저장 * 불필요한 정보와 스팸 제거 * AI가 활용 가능한 고품질 장기기억 생성 * DB 폭주 방지 및 효율적인 데이터 관리 * 방송 시간대에 최적화된 빠른 검색 속도 ---