[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 내 함수 기반 분리로 유지보수 용이
  • ✅ 향후 체계적인 확장에 유연한 구조 확보 가능