LangChain 기술을 활용하여, 최신 계정의 스포츠 룰 PDF 문서 기반 Q&A 시스템을 구축하는 프로젝트입니다.
RAG(Retrieval-Augmented Generation) 구조를 바탕으로 문서 검색 및 응답 시스템을 구현하고, 전체 모델 생애주기를 관리 가능한 파이프라인으로 구성했습니다.
- 프로젝트 기간: 2025.04.02 ~ 2025.04.15
- 주제: LangChain 기반 스포츠룰 + Q&A 자동화 시스템
이름 | 역할 | GitHub | 담당 기능 |
---|---|---|---|
손봉교 | 팀장 | GitHub 링크 | streamlit 초기 적용, Chat History 구현, 코드 리뷰 |
박인수 | 팀원 | GitHub 링크 | streamlit UI 개선, SemanticChuncker 적용, 코드 리펙토링 |
- 최신으로 개정된 스포츠 룰에 대한 대한 빠르고 정확한 자동 응답 시스템 구축
- 데이터 수집
- PDF, 웹서치, 크롤링 활용
- 문서 파싱 및 전처리
- LangChain의 DocumentLoader
- PDFLoader
- Chunking, SemanticChunker, Text Cleaning
- 임베딩 및 벡터화
- Upstages AI / Embedding 모델 사용
- FAISS / Weaviate / Qdrant 등을 활용한 벡터 DB 구축
- 데이터 버전 관리
- Github를 통한 형상 관리 (v1.x, v2.x)
- LangChain의 RetrievalQA 모듈 활용
- Chain 구성: Embedding → Retriever → Prompt → LLM
- LLM: Upstages AI Solar Pro
- 터미널 기반 CLI로 즉시 테스트 가능
- 로컬에서 Streamlit으로 웹페이지 구현
- MCP의 경우 Cursor AI에 로컬 시스템으로 구축
- 트래킹 시스템 활용
- LangSmith 활용
로컬 환경 또는 터미널 기반으로 실행 가능합니다.
# 1. 프로젝트 클론
git clone https://github.com/UpstageAILab6/upstageailab-nlp-langchainpjt-langchain-5.git
cd upstageailab-nlp-langchainpjt-langchain-5
# 2. 가상환경 설정 및 패키지 설치
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
# 3. 환경 변수 설정
export UPSTAGES_API_KEY=your-api-key
# 4-1. 실행 (CLI 기반)
python main.py
# 4-2. 실행 (Streamlit) -> http://localhost:8501/ 로컬 접속
streamlit run main.py --server.address=0.0.0.0
- 소스 관리: GitHub
- 프로젝트 관리: GitHub 칸반보드
- 커뮤니케이션: Slack
- 버전 관리: Git
- 매년 새롭게 추가되거나 삭제되는 스포츠 룰에 대한 포괄적인 이해 가능
- 새롭게 떠오르는 추세인 MCP 적용방안에 대한 고찰
- 향후 다양한 도메인 문서(QA, 정책, 교육자료 등)에 확장 적용 예정
프로젝트 진행 중 담당 강사님과의 피드백 세션을 통해 얻은 주요 인사이트는 다음과 같습니다.
- 주제선정
→ LLM이 해결하기에 Hallucination이 빈번하거나, 문서를 직접 뜯어보아야 하는 문제에 대한 문제를 파악하여 주제를 선정해야함 - RAG에 대해 기초적인 지식이 부족함
→ 기초적인 강의를 빠르게 습득 후 프로젝트에 수행해야 함
- WorkFlow 정의 필요
- WorkFlow를 명확하게 정의하여 한번 그려보고, 순차적으로 작업할 필요가 있음
- 읽기 어려운 PDF 데이터에 대한 여러 전처리 방안 시도 필요
- 표, 이미지 등을 어떤 방식으로 처리 후 임베딩하여 더 많은 정보를 이끌어 낼 수 있을지에 대한 고민이 필요함
- PDF -> HTML 변환을 사용하여 밑줄 친 (축구 24/25년도 개정안 규칙) 규칙을 인식할 수 있는 태그 확인 필요
- OCR 추출, Upstages에서 제공하는 다양한 Chunking 및 DataLoader에 대해 파악해보고 시도해보기
- 정량적 평가의 필요성
- HuggingFace 리더보드 참고
- 스코어 내보기
- 웹 서치 및 GroundCheck 도입
- 원하는 답변을 내올 수 없을 시에 LLM이 생성하게 하거나 웹 서치를 활용하는 방안
- 프롬프트 엔지니어링
- 다양한 프롬프트 엔지니어링 시도
- Retriever, Embedding 뜯어보기
- 각 단계에서 일어나는 프로세스 직접 파악해보기
- 코드 리펙토링 미흡
- 각 함수마다 변수타입 힌트 지정
- 모듈 및 패키지 import 순서 명확하게 하기 ( 빌트인 - 서드파티 - 커스텀모듈 - 로컬모듈)
- import 중복 피하기
- 주석 삭제하기
- 모듈을 이어 붙일 때 Class선언하기
- 함수명은 동사+명사 형태로 작성 (소문자 시작)
- Class 선언 시 첫 글자는 대문자, 두 번째 단어의 첫 글자를 대문자로 하여 구분
- llm 모듈을 main.py에 지정했으면 더 좋았을 것임 (모델을 바꾸기에 용이함)
- Git Commit
- git commit의 컨벤션은 매우 준수하나 commit 할 때 Enter 친 후 커밋하기
- git commit시에 소문자로 컨벤션 시작하여 동사+명사 형태로 작성 후 커밋하기
- 발표자료 피드백
- 코드를 보여주기 보다는 WorkFLow 순서로 설명하는 것을 추천함