랭체인은 LLM을 사용하여 애플리케이션 생성을 단순화하도록 설계된 프레임워크이다.
랭체인을 이해하기 위해서는 아래의 세 가지 개념이 핵심적이다.
LCEL은 LangChain의 컴포넌트들을 선언적으로 연결하는 방식으로, LangChain이 정의한 구조이자 문법이라고 생각하면 이해하기 쉽다.
LangChain (Language + Chain)의 이름에서도 알 수 있듯이, 여러 컴포넌트를 사슬처럼 연결하여 하나의 Chain으로 만든다.
이를 통해 Chain에 input을 넣으면 첫번째 컴포넌트에서 생성된 output이 다음 input으로 입력되어, LLM 애플리케이션을 만들기 위한 복잡한 단계를 하나의 Chain으로 구성하는 것이다.
여기서 컴포넌트는 Chain을 만들기 위한 구성 요소이다. 레고 블럭처럼 컴포넌트들을 연결하여 Chain을 만드는 것이다.
LangChain Expression Language (LCEL)은 LangChain의 컴포넌트들을 선언적으로 연결하는 방식으로, 다양한 언어 모델 워크플로우를 효율적으로 구성할 수 있는 도구입니다.
LCEL의 설계는 처음부터 프로토타입을 프로덕션 환경에 배포할 수 있도록 지원하도록 고안되었으며, 코드 변경 없이도 간단한 체인부터 복잡한 체인까지 모두 대응할 수 있습니다. LCEL을 사용하는 주요 이유는 다음과 같습니다:
LCEL은 이전의 체인들(예: LLMChain 또는 ConversationalRetrievalChain)에서 감춰져 있던 중요한 세부 사항을 보다 명확히 드러내며, 커스터마이징이 가능하도록 설계되었습니다.
LangChain Expression Language(LCEL)은 Runnables를 체인으로 구성하는 선언적인 방식입니다. 이렇게 구성된 체인은 자동으로 동기(sync), 비동기(async), 배치(batch), 스트리밍(streaming)을 지원합니다.
LCEL의 주요 구성 요소(프리미티브)는 RunnableSequence와 RunnableParallel입니다.
| 연산자를 사용하거나, 여러 Runnables를 리스트로 RunnableSequence에 전달하여 구성할 수 있습니다.RunnableParallel에 전달하여 구성할 수 있습니다.이 방식은 복잡한 비즈니스 로직을 체인으로 쉽게 구현할 수 있으며, 각 Runnable을 순차적으로 또는 병렬로 실행할 수 있는 유연성을 제공합니다.
LangChain의 Runnable 인터페이스
LangChain에서 Runnable 프로토콜을 사용하여 사용자 정의 체인을 쉽게 만들 수 있습니다. 이 프로토콜은 다양한 컴포넌트들이 표준화된 방식으로 실행될 수 있도록 해주며, 다음과 같은 기본적인 메서드를 제공합니다:
비동기 방식도 지원하며, 이를 위해 asyncio의 await 구문을 사용합니다:
각 컴포넌트는 입력 스키마와 출력 스키마를 제공하며, Pydantic 모델을 기반으로 자동 생성되어 입력과 출력의 유효성을 검사하는 데 사용됩니다.