아까부터 레디스를 계에에에속 언급하는거보면


'다중 사용자' 이걸로 관점을 보는데 애초에 내 코드는 개인 사용자용임


근데 뭐가 틀리고 다른지 제대로 설명해줌


1. 벡터 DB를 인스턴스로 올리고 땡처리하는가?
->FastAPI의 lifeSpan 이벤트 핸들러를 이용해서 인스턴스 한번 생성후, 참조가 필요한곳에 필요할때마다 주입하는거임


2. 코어당 여러개 연결 있고 get해서 써야한다

->RDBMS의 커넥션 풀링인데, ChromaDB는 로컬 파일 기반 벡터 DB 클라이언트라서, 병렬 읽기 쓰레드 세이브 자동 보정임.(쓰기는 보장 안됨, 그래서 순차 쓰기 )


3.Rag 기다리는 동안 사용감이 떨어지니까 Redis 같은걸로 관리

-> RAG 결과를 캐싱하는데 Redis 쓰라고하는데, RAG 작업을 백그라운드 큐로 돌려서하는거면 모를까, 이건 단일 사용자용으로는 과도함

그냥 FastAPI기반 asyncio 정도로 충분히 비동기 처리가 가능함. 애초에 레디스 쓴다는건 대규모 스택임


4. 벡터 연결에도 스코프가 있어야한다. 그런게 없다

-> 애플리케이션 스코프가 있음. lifespan으로 관리되는 store_instance가 바로 그거임. 요청 스코프가 아니라, 애플리케이션 스코프임


5. 100개 작업 처리해달라고 하면 지금 코드로는 어떻게 하느냐?

-> 100개의 RAG는 ProcessPoolExecutor로 가능함. 자기 컨텍스트에서 새롭게 여는거고


각 병렬 작업의 DI로 동일한 store_instance 참조 받음


쓰기 작업은 지금은 필요없어서 안했고, 추후에 대화 기록을 벡터 임베딩해야하면 애초에 이걸 리듀서로 추후에 구현하면됨.


자꾸 네가 말하는 스코프는 '대규모 사용자 기반 웹 서비스'


이거고 내가 말하는건 그냥 '단일 사용자 기반 멀티 에이전트' 이 차이임.


자꾸 레디스가 나오고 이러는게 이해가 안가는게 그거고 나는 저거 서버에 올릴 생각 없어.


저건 그냥 여러 LLM API를 조합해서 하나의 골을 주면 에이전트가 조합하는거지 서버에 올리는게 아님 QT6만 봐도 답 나오잖냐