배경과 목표

LangChain은 복잡한 개념을 포함하고 있어 처음 접하는 사람들에게 어려울 수 있는데, 이 글에서는 LangChain의 핵심 개념인 LCELL을 쉽게 설명하여, 단순하고 명확하게 이해할 수 있도록 돕고자함.

목표

  • LangChain을 보면 Chain이 생각나고 각각의 고리들이 LCELL(|)로 연결되었다는 이미지가 머리에 떠오를 것

LangChain and LCELL

LangChain이란?

LangChain은 대규모 언어 모델(LLM)을 사용하여 질문에 답하는 과정을 단계적으로 연결하는 프레임워크. 각 단계는 연쇄적으로 연결되어 Chain을 형성.

LCELL은 Chain의 구성 요소를 나타내며, 각 단계는 | 기호로 구분됨.

LangChain의 장단점

장점

  • 편리함: 다양한 작업을 자동화하여 효율성을 높임
  • 확장성: 여러 LLM과 쉽게 통합할 수 있음

단점

  • 학습 곡선: 처음 접하는 사람들에게는 새로운 개념이 많아 어려울 수 있음
  • 복잡성: 설정과 구성 요소가 많아 초기 설정이 복잡할 수 있음

그외 장단점은 사용해 보면서 느끼자.

LCELL을 쓴 LangChain 예시

다음은 LCELL을 사용하여 LangChain을 구성하는 예시

  • chain = prompt | llm | output_parser
    • Prompt -> LLM -> OutPutParserChain으로 연결되었음
# 환경 변수 로드
from dotenv import load_dotenv, find_dotenv
load_dotenv(find_dotenv(), override=True)

# LangChain관련 라이브러리 로드
from langchain_openai import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser

# 객체 생성, ChatModel 사용
llm = ChatOpenAI(model = "gpt-3.5-turbo")
output_parser = StrOutputParser()

# 입력 템플릿 정의, 파라미터 없음
template = """You are a helpful assistant. Hello?"""
prompt = PromptTemplate.from_template(template)

# LCELL을 사용한 Chain 정의
chain = prompt | llm | output_parser

# Chain 실행 및 결과 출력
print(chain.invoke({}))

정리

위 예시에서 prompt | llm | output_parser은 LCELL로 연결된 구조이고, 이것이 Chain 처럼 보여야 LangChain의 기본을 이해하였다고 볼 수 있음.

참고