[Langchain] Passthrough를 활용한 간단한 Chain 구성하기

2024. 11. 14. 21:22Python

서론

안녕하세요! 오늘은 Langchain에서 Chain을 구성할 때 자주 사용되는 Passthrough에 대해서 알아보려고 합니다. 특히 LCEL(Langchain Expression Language)에서 많이 활용되는 기능인데요, 이름 그대로 데이터를 '통과'시키는 역할을 하지만 생각보다 활용도가 높답니다.

 

무엇이 좋을까?

Passthrough는 다음과 같은 장점이 있습니다:

  1. Chain 구성을 단순화할 수 있습니다.
  2. 입력 데이터를 그대로 전달하면서도 추가적인 처리가 가능합니다.
  3. 다른 Chain들과 조합하기 쉽습니다.

코드로 살펴보기

간단한 예제 코드로 살펴보겠습니다.

from langchain.chat_models import ChatOpenAI
from langchain.schema.runnable import RunnablePassthrough
from langchain.prompts import ChatPromptTemplate

# LLM 모델 설정
llm = ChatOpenAI()

# 프롬프트 템플릿 생성
prompt = ChatPromptTemplate.from_template("""
다음 주제에 대해 설명해주세요: {topic}
추가 컨텍스트: {context}
""")

# Passthrough를 활용한 Chain 구성
chain = (
    {
        "topic": RunnablePassthrough(),
        "context": lambda x: f"이 주제는 {x}와 관련이 있습니다."
    }
    | prompt
    | llm
)

# 실행
response = chain.invoke("파이썬 비동기 프로그래밍")
print(response)


실행 결과 
AIMessage(content='파이썬 비동기 프로그래밍은 동시성 프로그래밍을 구현하는 중요한 방법입니다.
이는 I/O 바운드 작업을 효율적으로 처리할 수 있게 해주며, async/await 키워드를 통해 직관적인 코드 작성이 가능합니다...')

주의할 점

  1. Passthrough는 단순히 데이터를 전달하는 것처럼 보이지만, Chain 구성에서 중요한 역할을 합니다.
  2. 데이터 형식을 잘 맞춰줘야 합니다. 특히 딕셔너리 형태로 전달할 때 키값을 잘 확인해야 합니다.
  3. 람다 함수와 함께 사용할 때는 입력값의 타입을 잘 확인해야 합니다.

마치며

Passthrough는 정말 단순한 기능이지만, 이를 잘 활용하면 복잡한 Chain도 깔끔하게 구성할 수 있습니다. 저도 처음에는 단순히 '통과'시키는 용도로만 생각했는데, 실제로 사용해보니 다양한 활용이 가능하더라구요. 특히 LCEL과 함께 사용하면 더욱 강력한 기능을 발휘할 수 있습니다. 여러분도 한번 시도해보시는 건 어떨까요?

다음에는 더 심화된 내용으로 찾아뵙도록 하겠습니다. 감사합니다! 😊