30

LangChain으로 RAG 파이프라인 설계하기

Day 4: RAG 파이프라인 구축

학습 목표

LangChain의 핵심 컴포넌트를 이해한다 RAG 파이프라인의 데이터 흐름을 설명할 수 있다 프롬프트 엔지니어링의 제조 도메인 적용을 학습한다

LangChain이란?

LLM 애플리케이션을 만드는 프레임워크. 레고 블록처럼 컴포넌트를 조합한다.

LangChain 핵심 컴포넌트 (RAG용):

Document Loaders  → 문서 로드 (PyPDFLoader 등)
Text Splitters    → 문서 청킹 (RecursiveCharacterTextSplitter)
Embeddings        → 벡터 변환 (OpenAIEmbeddings)
Vector Stores     → 벡터 저장/검색 (Chroma, Pinecone)
Retrievers        → 검색기 (유사도, MMR 등)
Prompts           → 프롬프트 템플릿
LLMs / ChatModels → LLM 호출 (GPT-4o 등)
Chains            → 위 컴포넌트 연결

RAG 파이프라인 데이터 흐름

Step 1: 색인 (Indexing)

문서 로드 → 청킹 → 임베딩 → 벡터 DB 저장

[코드 흐름]
loader = PyPDFLoader("manual.pdf")
docs = loader.load()
              ↓
splitter = RecursiveCharacterTextSplitter(...)
chunks = splitter.split_documents(docs)
              ↓
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vectorstore = Chroma.from_documents(chunks, embeddings)

Step 2: 검색 + 생성 (Retrieval + Generation)

질문 → 벡터화 → 유사 문서 검색 → 프롬프트 조합 → LLM → 답변

[코드 흐름]
retriever = vectorstore.as_retriever(
    search_kwargs={"k": 5}
)
relevant_docs = retriever.invoke("서보 에러 E-001 해결법")
              ↓
prompt = ChatPromptTemplate.from_template(
    "다음 문서를 참고하여 질문에 답하세요:\n"
    "{context}\n\n"
    "질문: {question}"
)
              ↓
chain = prompt | llm | output_parser
answer = chain.invoke({
    "context": format_docs(relevant_docs),
    "question": "서보 에러 E-001 해결법"
})

프롬프트 엔지니어링: 제조 도메인 핵심

일반적인 RAG 프롬프트:

"다음 문서를 참고하여 질문에 답하세요."

제조 도메인 전용 프롬프트:

당신은 제조 현장의 기술 전문가 AI 어시스턴트입니다.

[역할]
- 설비 매뉴얼, SOP, 안전 규정을 기반으로 정확한 답변을 제공합니다
- 반드시 제공된 문서에 근거하여 답변합니다
- 문서에 없는 내용은 "제공된 문서에서 확인되지 않습니다"라고 합니다

[답변 규칙]
1. 출처 명시: 반드시 문서명, 섹션 번호를 포함
2. 안전 주의: 안전 관련 절차는 반드시 주의사항을 포함
3. 파라미터 값: 수치는 정확히 인용 (범위 포함)
4. 절차 순서: 단계별로 명확하게 나열
5. 관련 문서: 추가 참고 문서가 있으면 안내

[제공된 문서]
{context}

[질문]
{question}

[답변]

왜 이렇게 구체적으로?

일반 프롬프트 답변:
"서보 에러가 나면 냉각팬을 확인하세요."

제조 전용 프롬프트 답변:
"서보 에러 E-001 대응 절차 (SOP-CNC-E001 v2.1):

 1. 주전원 차단 (안전 확인 필수)
    ⚠ 잔류 전압 방전 대기: 최소 5분
    ⚠ 검전기로 무전압 확인

 2. 서보 앰프 냉각팬 점검
    - 팬 회전 여부 목시 확인
    - 팬 모터 저항: 50-100 Ohm (정상)

 3. 파라미터 확인
    - #2012: 80-120 (서보 전류 제한)
    - #2024: 150 (과전류 감지 레벨)

 [출처: SOP-CNC-E001 v2.1, 섹션 4]
 [관련: CNC-3000 매뉴얼 Ch.12]"

프롬프트 하나의 차이가 쓸모없는 답변현장에서 바로 쓸 수 있는 답변을 가른다.


Retriever 유형: 어떤 검색 방법을 쓸 것인가

유형설명제조 적합도
similarity코사인 유사도 Top-K기본
mmr유사도 + 다양성 (중복 제거)권장
similarity_score_threshold유사도 임계값 이상만정밀 검색
# MMR (Maximal Marginal Relevance) 권장
retriever = vectorstore.as_retriever(
    search_type="mmr",
    search_kwargs={
        "k": 5,             # 최종 반환 수
        "fetch_k": 20,      # 후보 문서 수
        "lambda_mult": 0.7, # 유사도 vs 다양성 (0~1)
    }
)

# 장점: 비슷한 청크 3개 대신
#       다양한 관점의 청크 5개를 반환
AI로 학습하기 — 꿀팁
🤖LangChain 제조 RAG 파이프라인 코드 골격 생성AI 학습 팁

LangChain의 핵심 컴포넌트를 제조 설비 문서 RAG에 맞게 연결한 실행 가능한 코드 골격을 AI로 생성하면 학습 속도가 빨라진다.

LangChain을 사용해서 제조 설비 매뉴얼 RAG 파이프라인의 Python 코드 골격을 작성해줘. 다음 컴포넌트를 모두 포함해야 해: 1) DocumentLoader: 설비 매뉴얼 PDF 로딩 (메타데이터: 설비코드, 문서버전, 부서), 2) TextSplitter: 의미 단위 청킹 (RecursiveCharacterTextSplitter, 구분자: 챕터/섹션/절차 번호 패턴), 3) Embeddings: HuggingFaceEmbeddings (한국어 지원 모델), 4) VectorStore: Chroma (로컬 영속화), 5) Retriever: MMR(최대 한계 관련성) 방식 top-5, 6) Chain: RetrievalQAWithSourcesChain. 각 컴포넌트에 제조 현장 맥락에 맞는 설정값 주석을 달아줘. 실제 실행 가능한 완성 코드로 작성해줘.
이 팁이 도움이 됐나요?