RAG 체인 구성 방식: 단일 체인 vs create_stuff_documents_chain + create_retrieval_chain

문건희·2025년 3월 2일

RAG

목록 보기
10/12

1. 단일 체인 방식 (rag_chain)

rag_chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | llm
    | StrOutputParser()
)

이 코드는 RunnablePassthrough를 사용하여 질문과 문맥(컨텍스트)을 언어 모델(llm)에 전달하고, 그 후 StrOutputParser를 통해 최종 출력 형식을 문자열로 변환하는 흐름입니다.

주요 구성 요소:

  • Retriever: 문서를 검색하는 역할을 합니다. 여기서는 retriever가 문서를 검색합니다.
  • RunnablePassthrough(): 문서나 질문을 그대로 넘겨주는 역할을 합니다.
  • LLM (언어 모델): 질문과 문서 컨텍스트를 기반으로 답변을 생성합니다.
  • StrOutputParser(): 언어 모델의 출력을 문자열 형식으로 처리합니다.

2. create_stuff_documents_chaincreate_retrieval_chain을 사용하는 방법

# 문서 결합 체인 생성
question_answer_chain = create_stuff_documents_chain(llm, qa_prompt)

# 검색 기반 체인 생성
rag_chain = create_retrieval_chain(history_aware_retriever, question_answer_chain)

주요 구성 요소:

  • create_stuff_documents_chain: 문서들을 결합하여 언어 모델에 전달하는 역할을 합니다.
  • create_retrieval_chain: 문서를 검색하고, 그 검색된 문서를 question_answer_chain에 전달하여 답변을 생성하는 체인입니다.
  • history_aware_retriever: 대화 기록을 고려하여 문서를 검색하는 리트리버입니다.

3. 차이점 비교

구성 요소`rag_chain = {...}llm
구성 방식단일 체인 방식으로, 문서 검색과 답변 생성을 직접 연결합니다.문서 검색과 답변 생성을 별도의 체인으로 처리합니다.
복잡성간단하고 직관적입니다. 작은 시스템이나 실험적 코드에 유용합니다.유연하고 확장성이 있어 복잡한 시스템에 적합합니다.
문서 검색과 답변 생성의 분리 여부문서 검색과 답변 생성을 명시적으로 분리하지 않습니다.문서 검색과 답변 생성을 명확하게 분리하여 처리합니다.

결론

  • 단일 체인 방식은 간단하고 빠르게 답변을 생성할 수 있어, 실험적이거나 작은 시스템에서 유용합니다.
  • create_stuff_documents_chain + create_retrieval_chain 방식은 더 복잡한 시스템에서 문서 검색과 답변 생성을 명확하게 분리하여 처리할 수 있어, 유연성과 확장성이 필요할 때 적합합니다.

0개의 댓글