199 lines
6.3 KiB
Markdown
199 lines
6.3 KiB
Markdown
# 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 폭주 방지 및 효율적인 데이터 관리
|
|
* 방송 시간대에 최적화된 빠른 검색 속도
|
|
|
|
--- |