작동x |
||
|---|---|---|
| .mvn/wrapper | ||
| src | ||
| .gitattributes | ||
| .gitignore | ||
| API명세서.md | ||
| LICENSE | ||
| README.md | ||
| mvnw | ||
| mvnw.cmd | ||
| pom.xml | ||
README.md
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)
│ │ └── dto <-- Controller에서 사용하는 DTO
│ │ ├── request <-- 요청 DTO
│ │ └── response <-- 응답 DTO
│ │
│ ├── 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시)
- Redis 모든 key 스캔
- 특수문자/이모지 제거 → 데이터 정제
- 정제된 대화를 AI에게 전달
- AI가 "중요 기억만" 골라서 JSON으로 반환
- PostgreSQL에 최종 저장
- Redis는 비우거나 TTL로 자동 만료
3단계: 기억 조회 (검색)
AI가 메모리 조회 요청 시:
- 최근 기억 → Redis에서 빠르게 검색
- 장기 기억 → PostgreSQL에서 벡터 유사도 또는 키워드 검색
- 반환 후 AI가 응답 생성에 사용
🔍 추가 기능 (선택)
- 중복 제거 로직
- 대화 길이/이모지 비율 필터링
- 벡터 기반 유사도 검색
- 태그/카테고리 자동 분류
- 메모리 업데이트(PATCH)
- Garbage Collection (TTL 기반 자동 삭제)
📦 필요 기술 스택
- Java 21+
- Spring Boot
- Redis 7+ / RediSearch 모듈(Optional)
- PostgreSQL 16+
- MyBatis
- Spring Scheduler
🎯 목표 효과
- 방송 중 딜레이 없이 자유로운 기억 저장
- 불필요한 정보와 스팸 제거
- AI가 활용 가능한 고품질 장기기억 생성
- DB 폭주 방지 및 효율적인 데이터 관리
- 방송 시간대에 최적화된 빠른 검색 속도