[V2] LangChain 적용여부 - 100-hours-a-week/6-nemo-ai GitHub Wiki
✅ LangChain 미적용 구조 설계안 (버전 2 기준)
1. 미적용 배경
구분 |
설명 |
리소스 문제 |
LangChain 도입 시 메모리 사용량 증가, 초기 세팅 및 추상화 구조로 인해 코드 복잡도 상승 |
유연한 유지보수 |
직접 FastAPI 기반 로직으로 구현할 경우 디버깅과 로직 변경이 명확하고 직관적 |
2. 전체 아키텍처 흐름도 (LangChain 미적용 기준)
[1] 첫 질문 생성 (로컬 텍스트 생성 모델)
↓
[2] 사용자 응답 저장 (프론트 + 백엔드 상태 관리)
↓
[3] 다음 질문 직접 구성 (프롬프트 템플릿 내 조건 분기, 이전 응답 기반)
↓
[4] 응답 누적 → 최종 관심사 키워드 도출
↓
[5] 관심사 키워드 → 임베딩 모델 → 벡터 추출
↓
[6] ChromaDB 유사도 검색 → 상위 3개 모임 추천
3. 기능별 구현 방식
단계 |
기능 |
구현 방식 (비 LangChain) |
사용 도구 |
1 |
첫 질문 생성 |
FastAPI 서비스 내 프롬프트 직접 구성 후 모델 호출 |
transformers , FastAPI |
2 |
응답 저장 |
클라이언트 or 서버 세션 or DB에 저장 |
Redis or 상태관리 객체 |
3 |
다음 질문 생성 |
조건 기반 if-else 템플릿 로직 구성 |
Python 함수 |
4 |
관심사 추론 |
누적 응답 텍스트 → 프롬프트 구성 → 모델 호출 |
텍스트 생성 모델 |
5 |
키워드 벡터화 |
임베딩 모델로 토큰 임베딩 수행 |
transformers , sentence-transformers |
6 |
유사도 검색 |
ChromaDB에 임베딩 검색 |
ChromaDB Python API |
중요: 멀티스텝 처리를 함수 단위로 직접 구성하여, 모델 호출과 상태 저장의 흐름만 명확히 관리하면 LangChain 없이도 동일한 효과 구현 가능.
4. 코드 구성 예시 (예상 구조 요약)
src/
├── router/
│ └── [chatbot.py](http://chatbot.py/) ← 질문/응답 API
├── services/
│ ├── question_writer.py ← 질문 생성 함수
│ ├── keyword_extractor.py← 관심사 추론 함수
│ └── [recommender.py](http://recommender.py/) ← 벡터 검색 기반 추천 함수
├── models/
│ └── [schemas.py](http://schemas.py/) ← Pydantic 모델
├── core/
│ └── chroma_client.py ← ChromaDB 연결 로직
5. 설계 시 고려사항
항목 |
미적용 시 주의점 |
대응 방안 |
체인 추적성 |
LangChain의 체인 로깅 불가 |
각 단계별 로그 수동 기록 (logger.info ) |
상태 관리 |
세션/스토리지 연결 직접 처리 필요 |
Redis , DB , 또는 프론트 상태 관리 |
프롬프트 통합 관리 |
체계적인 템플릿 관리 필요 |
jinja2 또는 텍스트 템플릿 유틸 별도 구현 |
코드 복잡도 |
멀티스텝 로직 직접 처리 |
서비스 계층별로 함수 분리 및 문서화 강조 |
6. 향후 확장성 고려
항목 |
확장 시 고려사항 |
사용자 수 증가 |
멀티 유저 요청 동시 처리 → 큐 처리 구조, 캐싱 필요 |
질문 커스터마이징 |
프롬프트 템플릿에 조건문 추가 및 가중치 반영 |
관심사 분류 자동화 |
rule 기반 → 분류 모델 기반 전환 고려 |
체인 재도입 시기 |
① 기능 고도화 필요 + ② 사용자 증가 + ③ 유지보수 복잡해질 때 LangChain 단계적 도입 고려 |
🔍 요약: LangChain 미적용 전략의 핵심 장점
- ✅ 경량화된 구조로 로딩 속도 및 비용 최소화
- ✅ FastAPI 내 함수 기반 분리로 유지보수 용이
- ✅ 향후 체계적인 확장에 유연한 구조 확보 가능