Caching Structure
- 🧠 전체 구조 그림
사용자 Query
│
▼
[1] 메모리 캐시 조회 (Fast, RAM)
│ └─ Hit → 바로 응답
│ └─ Miss → 디스크 캐시 조회
▼
[2] 디스크 캐시 조회 (sqlite or diskcache)
│ └─ Hit → 바로 응답
│ └─ Miss → 벡터DB 검색
▼
[3] VectorDB (Chroma/FAISS 등)
│
▼
[4] Reranker (선택) → top-k 정제
│
▼
[5] Prompt 조립
│
▼
[6] LLM 호출 (ZeroGPU 느림 주의)
│
▼
[7] 결과 저장
├─ 메모리 캐시 업데이트
└─ 디스크 캐시 업데이트
- 📚 각 단계 설명
단계 | 설명 | 기술 스택 추천 |
---|---|---|
1. 메모리 캐시 조회 | 최근 사용한 검색어-결과를 RAM에서 바로 응답 | in-memory dict , cachetools |
2. 디스크 캐시 조회 | 오래된 결과는 디스크(SSD)에 저장하고 꺼내기 | sqlite3 , diskcache , tinydb |
3. VectorDB 검색 | 실제 RAG 검색 (law_db, exam_db) | chromadb , faiss |
4. Reranker | BGE-reranker로 top-k를 다시 정렬 | bge-reranker-base-ko |
5. Prompt 조립 | Retrieved 문서들을 하나로 묶어 prompt로 만들기 | 직접 |
6. LLM 호출 | ZeroGPU로 LLM 호출 (느리지만 정확) | Gradio SDK, spaces.GPU |
7. 캐시 업데이트 | 생성된 답변을 메모리+디스크에 동시 업데이트 | dict + sqlite |
- 🗺️ 전체 흐름 한눈에 요약
- RAM 캐시 (0.01초 이내)
- 디스크 캐시 (0.1초 이내)
- 벡터DB 검색 + Rerank (1~2초)
- LLM 호출 (5~20초, ZeroGPU)
캐시 성공률을 높이면 → LLM 호출을 최소화해서
속도 10배 빨라지고, 비용 절감도 가능해.
- 🔥 추가 심화
- 메모리 캐시는 LRU(Least Recently Used) 알고리즘 적용 (최신 것 유지)
- 디스크 캐시는 TTL(Time to Live)로 오래된 것 자동 삭제
- 검색어를 해시(hash)해서 캐시 키(key)로 사용
- 캐시는 Retrieval 결과 + 생성 답변 둘 다 저장할 수 있음
- ✨ 정리해서 요약하면
키워드 | 설명 |
---|---|
Memory Cache | RAM에 질문-답변 저장 (초고속) |
Disk Cache | SQLite에 질문-답변 저장 (내구성) |
VectorDB | ChromaDB에서 관련 법령/문제 검색 |
Reranker | BGE로 유사도 높은 문서 재정렬 |
LLM | Prompt 기반 문제 생성 |
📢 정말 중요한 핵심:
VectorDB 검색이 느리면 캐시가 1차 방어선이고,
LLM이 느리면 캐시가 2차 방어선이야.
이걸 잘 짜면 ZeroGPU 환경에서도 실사용 가능하게 만들어.
👉 원하면 바로 이 구조로 코드 스캐폴딩(템플릿) 만들어줄게.
질문:
- Memory Cache는 어떤 라이브러리로 할까? (cachetools / built-in dict / fastapi-cache 등)
- Disk Cache는 sqlite3 + custom? 아니면 diskcache 라이브러리?
(추천은diskcache
야, 빠르고 간편해)