배경
- 테디노트님의 강의를 보면서 카피하면서 RAG를 만들다가, 그냥 바로 질문 변수를 전달해도 될것 같은데, 사용하는지, 사용 이유가 궁금해 졌다.
RunnablePassthrough: 전체 개요 및 정리
RunnablePassthrough
는 LangChain에서 사용하는 Runnable
의 일종으로, 입력 데이터를 수정하지 않고 그대로 다음 단계로 전달하는 데 사용됩니다. 주로 체인에서 데이터 흐름을 제어할 때 유용하며, 특히 질문이나 다른 입력이 동적으로 변경될 가능성이 있는 경우에 많이 사용됩니다.
기본 개념:
핵심 역할:
RunnablePassthrough
의 핵심 역할은 입력된 데이터를 그대로 받아, 처리 없이 다음 단계로 전달하는 것입니다.- 이는 체인 내에서 특정 데이터 흐름을 유지하고, 필요한 경우 그대로 전달하기 위해 사용됩니다.
사용 패턴:
RunnablePassthrough
는 체인의 여러 단계에서 데이터를 가공하지 않고 전달하고자 할 때 사용됩니다. 입력된 데이터를 그대로 다른 단계로 넘겨야 할 필요가 있을 때, 이 클래스가 적합합니다.
주요 사용 사례:
질문이 동적으로 변경되는 경우:
- 대화형 시스템이나 실시간 입력 상황에서, 사용자가 입력하는 질문이 매번 다를 수 있습니다. 이 경우
RunnablePassthrough
를 사용하여 질문을 그대로 체인의 다음 단계로 전달할 수 있습니다.
- 대화형 시스템이나 실시간 입력 상황에서, 사용자가 입력하는 질문이 매번 다를 수 있습니다. 이 경우
질문을 수정 없이 그대로 전달해야 하는 경우:
- 질문을 전처리하거나 변환하지 않고 그대로 전달해야 할 때
RunnablePassthrough
를 사용합니다. 이는 체인 내에서 질문을 직접 사용하는 언어 모델이나 다른 처리 단계에 일관된 데이터를 전달하는 데 유용합니다.
- 질문을 전처리하거나 변환하지 않고 그대로 전달해야 할 때
입력 데이터의 일관된 전달:
- 여러 종류의 입력 데이터를 체인 내에서 일관되게 전달할 필요가 있는 경우,
RunnablePassthrough
는 입력 데이터가 그대로 다음 단계로 넘어가도록 보장합니다.
- 여러 종류의 입력 데이터를 체인 내에서 일관되게 전달할 필요가 있는 경우,
복잡한 체인 구성에서의 유연성:
- 체인이 복잡해지고 여러 단계로 구성될 때, 각 단계에서 입력을 명확히 제어하고 유지하는 것이 중요합니다.
RunnablePassthrough
는 데이터가 수정 없이 전달되는 것을 보장하여, 체인의 유연성과 확장성을 높입니다.
- 체인이 복잡해지고 여러 단계로 구성될 때, 각 단계에서 입력을 명확히 제어하고 유지하는 것이 중요합니다.
사용 예시:
context_chain = RunnableMap({
'context': lambda x: retrieved_docs, # 검색된 문서를 문맥으로 전달
'question': RunnablePassthrough() # 질문을 그대로 전달
})
- 이 예시에서
RunnablePassthrough
는question
을 그대로 다음 단계로 전달하는 역할을 합니다. 문맥(context
)은 이미 검색된 문서들로 설정되어 있고, 질문(question
)은 별도의 수정 없이 언어 모델에 전달됩니다.
장점:
유연성:
- 체인이 복잡한 경우나, 입력 데이터가 자주 변경되는 상황에서 유연하게 사용할 수 있습니다.
- 입력을 그대로 유지하며, 다양한 입력을 처리하는 체인을 구성할 수 있습니다.
일관성:
- 데이터 흐름을 일관되게 유지할 수 있습니다. 체인의 각 단계에서 데이터가 수정되지 않고 그대로 전달되기 때문에, 체인의 각 단계에서 동일한 입력을 사용하는 것이 보장됩니다.
확장성:
- 체인을 확장하거나 다른 입력 데이터를 추가해야 하는 상황에서,
RunnablePassthrough
를 통해 각 입력 데이터를 유연하게 처리할 수 있습니다.
- 체인을 확장하거나 다른 입력 데이터를 추가해야 하는 상황에서,
단점:
단순성:
- 데이터가 수정되지 않고 그대로 전달되기 때문에, 입력 데이터가 가공될 필요가 있을 때는
RunnablePassthrough
가 적절하지 않습니다. 이 경우 별도의 데이터 처리 단계가 필요합니다.
- 데이터가 수정되지 않고 그대로 전달되기 때문에, 입력 데이터가 가공될 필요가 있을 때는
직관성 부족:
- 체인의 동작을 처음 접하는 사람들에게는
RunnablePassthrough
의 사용이 직관적이지 않을 수 있습니다. 특히, 입력 데이터가 체인 내에서 어떤 식으로 처리되는지 명확하게 이해해야 효과적으로 사용할 수 있습니다.
- 체인의 동작을 처음 접하는 사람들에게는
언제 사용해야 하는가:
- 입력 데이터가 고정되지 않고, 동적으로 변할 가능성이 있는 경우.
- 여러 입력 데이터를 일관되게 유지하고 전달해야 하는 경우.
- 체인이 복잡하거나 확장 가능한 구조를 가지고 있어, 데이터 흐름을 명확히 제어해야 하는 경우.
결론:
RunnablePassthrough
는 LangChain의 체인 구성에서 데이터 흐름을 명확하고 일관되게 관리하는 데 매우 유용한 도구입니다. 특히, 질문과 같은 입력 데이터가 동적으로 변경되거나, 여러 단계에 걸쳐 동일한 데이터가 필요할 때 그 유용성이 극대화됩니다. 이러한 특성 때문에, 복잡한 체인 구조에서도 유연하게 사용될 수 있으며, 체인의 확장성과 유지보수성을 높이는 데 중요한 역할을 합니다.
'langchain 공부' 카테고리의 다른 글
Transformer와 GPT3까지 발전 과정 (LLM 역사와 발전2) (3) | 2024.09.01 |
---|---|
딥러닝 모델의 변화와 Transformer의 탄생(LLM 역사와 발전1) (9) | 2024.09.01 |
모든 Retriever(검색기) 비교 (0) | 2024.08.29 |
LLM 프로젝트를 기획할 때 겪게 되는 어려운 점들 (0) | 2024.08.12 |
langchain 퓨샷 프롬프트(prompt) (0) | 2024.08.04 |