4. LangChain 기반 멀티스텝 AI 구현 검토 - 100-hours-a-week/20-real-wiki GitHub Wiki

📕 1. AI 추론 흐름도

📌 LangChain 의 RetrievalChain 사용 이유

  • 단일 질문 처리에 적합

    ConversationalRetrievalChain은 대화 흐름(chat_history)을 고려하는 구조로, 챗봇 서비스에 적합한 체인

    하지만 본 서비스는 사용자 질문 간 연속성이 없고, 대화 이력을 저장하지 않기 때문에, 매 질문을 독립적으로 처리하는 RetrievalChain이 더 적합

  • 다양한 문서 소스 대응 가능

    RetrievalChain은 PDF, 웹페이지, CSV 등 다양한 형식의 문서를 임베딩하여 벡터DB에 저장하고,

    이들을 기반으로 유사 문서를 검색해 응답을 생성할 수 있어 확장성과 범용성이 높음

    따라서 문서 기반 질의응답 시스템 구현에 용이

📌 RetrievalChain 추론 흐름도

  • 화살표는 RetrievalChain 의 추론 방향
  • 체인은 RetrievalChain 의 역할을 시각적으로 표현

image

사용자 질문질문 임베딩 (Embedding Model)
   ↓
벡터 DB에서 유사 문서 검색 (Retriever)
   ↓
검색된 문서 + PromptTemplateLLM 응답 생성 (LLM)
   ↓
최종 응답 반환




📗 2. 체인 내에서 사용된 도구나 외부 리소스


🔧 체인 내 도구

분류 도구
문서 검색기 VectorStoreRetriever
프롬프트 구성기 PromptTemplate
LLM Qwen2.5-7B-Instruct

🌐 외부 리소스

분류 도구
임베딩 모델 multilingual-e5-large-instruct
벡터 데이터베이스 FAISS
검색 대상 문서 markdown



📌 임베딩 모델 multilingual-e5-large-instruct

  1. 기능 소개
  • Hugging Face에서 제공하는 고성능 임베딩 모델로, 다양한 언어(한국어 포함)를 처리 가능
  • Instruct tuning이 적용되어 질의응답에 특화된 형태의 문장 임베딩을 생성함
  1. 사용 이유
  • 한국어 등 비영어권 문서에 대한 임베딩 품질이 뛰어나, 다국어 환경에 적합
  • 검색 기반 QA(RAG) 구조에서 질문과 문서 간 의미 유사도를 잘 파악하여 정확도 향상
  • LLM의 생성 성능과 무관하게 검색 품질을 안정적으로 보완해줌

📌 벡터 데이터베이스 FAISS

  1. 기능 소개
  • Facebook AI에서 만든 벡터 유사도 검색 라이브러리
  • 고차원 벡터 간의 거리 계산을 통해 유사한 항목을 빠르게 검색함
  1. 사용 이유
  • 오픈소스로 로컬에서도 실행 가능하며, 검색 속도가 빠른 편
  • 초기 비용 없이 벡터 기반 검색 시스템을 구성할 수 있어 실습·시제품 개발에 유리
  • 대규모 문서에도 대응 가능하여 확장성 확보

📌 문서 검색기 VectorStoreRetriever

  1. 기능 소개
  • LangChain에서 제공하는 벡터 기반 문서 검색 컴포넌트
  • 사용자의 질문 벡터와 유사한 문서 Top-k를 자동으로 검색
  1. 사용 이유
  • FAISS 등 다양한 벡터 DB와 연동되어 빠르게 질의-문서 매칭 수행
  • LangChain 내에서 RetrievalChain과 자연스럽게 연결되며, 모듈화되어 확장/유지보수에 용이
  • 단순히 검색하는 것을 넘어 필터링, 우선순위 지정 등의 커스터마이징도 가능

📌 검색 대상 문서 markdown

  1. 기능 소개
  • 텍스트 기반의 경량 마크업 언어로, 다양한 문서 구조(제목, 목록, 표, 코드블럭 등)를 간결하게 표현 가능
  • GitHub, Notion, Jupyter 등 여러 플랫폼에서 기본 포맷으로 사용됨
  1. 사용 이유
  • 문서의 계층 구조와 강조 포인트를 명확히 표현할 수 있어, LLM이 문맥을 잘 이해함
  • HTML, PDF에 비해 가볍고 수정·관리하기 쉬워 실무에 적합
  • 프롬프트 작성 시 구조화된 입력값으로 활용 가능

📌 프롬프트 구성기 PromptTemplate

  1. 기능 소개
  • LangChain에서 제공하는 프롬프트 자동 구성 도구
  • 변수와 고정된 문장을 혼합해 일관성 있는 프롬프트를 쉽게 생성
  1. 사용 이유
  • 검색된 문서와 질문을 LLM 입력 형식에 맞게 구성하여 최적화된 응답을 유도
  • 프롬프트 구조를 코드처럼 템플릿화하여 재사용과 유지보수가 쉬움
  • 잘 설계된 프롬프트는 LLM 성능을 극대화하는 핵심 요소 중 하나

자세한 내용은 👉 (링크) 참고

📌 LLM Qwen2.5-7B-Instruct

  1. 기능 소개
  • Alibaba에서 공개한 78억(7.8B) 파라미터 규모의 중형 LLM
  • Instruct 기반 튜닝이 적용되어 자연스러운 질의응답, 추론, 문서 생성이 가능함
  1. 사용 이유
  • 한국어를 포함한 다양한 언어에서 안정적인 성능을 보이며, 비용 대비 품질이 우수함
  • Hugging Face에서 쉽게 로드 가능하며, RAG 구조에 적합한 성능 보유
  • Colab, 서버 환경 등 다양한 인프라에서도 활용 가능하며, 적당한 VRAM으로도 실행 가능




📘 3. 실제 구현한 코드의 일부

📌 프롬프트 구성 (PromptTemplate)

#  프롬프트 생성
prompt_template = PromptTemplate.from_template("""
You are an assistant for question-answering tasks.
Use the context below to answer the question.
Answer in Korean.

[질문]
{question}

[문서 내용]
{context}

[답변]
""")

📌 Chain 코드

# 체인 생성
chain = (
     {"context":retriever, "question":RunnablePassthrough()}
     | prompt
     | llm
     | StrOutputParser()
)

📌 RetrievalChain 의사코드

1. 사용자가 질문을 입력한다: "RAG에서 임베딩 모델은 왜 필요한가요?"

2. 질문을 벡터로 임베딩한다multilingual-e5 모델을 사용

3. 임베딩된 질문 벡터를 FAISS 벡터DB에 전달한다

4. FAISS는 벡터  유사도를 비교해 관련 있는 markdown 문서 청크들을 검색해온다

5. 검색된 문서들을 하나로 합쳐 context로 만든다stuff 방식 사용

6. PromptTemplate을 사용해 다음 형태로 프롬프트를 구성한다:
   [질문] {question}
   [참고 문서] {context}

7. 완성된 프롬프트를 Qwen2.5 LLM에 전달한다

8. Qwen2.5 질문 + 문서를 바탕으로 답변을 생성한다

9. 생성된 답변을 사용자에게 반환한다




📒 4. 서비스를 위해 멀티스텝 체인을 도입한 경우, 그에 따른 장점

🔗 멀티스텝 체인을 도입한 이유 및 서비스 연관성

LangChain의 RetrievalChain 구조를 기반으로 한 다단계 추론 체인을 도입하여, 단순 질의응답이 아닌, 문서 기반의 신뢰성 있는 답변을 생성

📌 멀티스텝 체인 도입의 장점

  1. 정확도 향상
    • 단순한 언어 모델 호출이 아닌, 사용자의 질문을 벡터화하여 관련 문서를 선행 검색함으로써, 답변의 정확도와 문서 기반 근거의 일치도를 높임
  2. 모듈화와 확장성
    • 각 단계(질문 임베딩, 문서 검색, 프롬프트 구성, 답변 생성)가 분리되어 있어 기능별 튜닝 및 교체가 용이하며, 향후 다음과 같은 확장도 수월:
      • 프롬프트 최적화 → 프롬프트만 교체
      • LLM 변경 → 모델만 교체
      • 필터링 기능 추가 → Retriever 확장
  3. 사용자 맞춤형 응답 구조화
    • 사용자의 질문 패턴에 따라 프롬프트 또는 문서 필터링 로직을 커스터마이징하여, 공지사항 챗봇, 정책 문서 Q&A 등 다양한 목적에 맞게 분기 처리가 가능
⚠️ **GitHub.com Fallback** ⚠️