본 내용은 RAG 시스템 구축을 위한 랭체인 실전 가이드 교재 및 강의 자료, 실습 자료를 사용했음을 알립니다.


LCEL?


  • LangChain Expression Language
  • 랭체인 모듈 결합 과정에서의 번거로움과 유지 보수 측면에서의 효율성을 고려하여 만들어짐

쉬운 코드 작성과 효과적인 모듈 관리

  • 랭체인의 핵심 과정
    • 여러 모듈을 엮어 하나의 파이프라인인 Chain을 만드는 것이 핵심 ➡️ 이 과정을 간단하게 만들어 주는 것이 LCEL
  • 모듈을 각각 구성한 후, 파이프 오퍼레이터 기반 체인을 빠르게 생성 가능

  • LCEL 기반 기본 체인 구성
    • 일반적인 체인 구성 : 프롬프트 템플릿-LLM(모델)-출력 파서 3단 결합
    • 프롬프트 템플릿으로 사용자 프롬프트를 원하는 형태로 가공한 후 ➡️ LLM에게 넘겨줌 ➡️ LLM이 출력한 값을 출력 파서로 다듬는 과정

LCEL.ipynb


LCEL로 기본 체인 구성

  • 라이브러리 호출 제외 단 5줄로 "프롬프트 템플릿", "LLM", "출력 파서" 3단 결합 가능
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

#프롬프트 템플릿 설정
prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")

#LLM 호출
model = ChatOpenAI(model="gpt-4o-mini")

#출력 파서 설정
output_parser = StrOutputParser()

#LCEL로 프롬프트템플릿-LLM-출력 파서 연결하기
chain = prompt | model | output_parser

#invoke함수로 chain 실행하기
chain.invoke({"topic": "ice cream"})

기대 효과

  • 모듈 간 의존성 줄어듦
  • | : 파이프 오퍼레이터 기호를 통해 모듈 연결 ➡️ 구분 복잡성을 최대한 제거

스트리밍 기능을 쉽게 추가하는 stream()

  • LCEL을 활용하면, Chain에 대한 스트리밍 기능 역시 LLM API 스트리밍 기능 수행하듯 간단히 작성해 사용 가능
from langchain.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI

#Chain 선언
model = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("tell me a joke about {topic}")
chain = prompt | model

#Chain의 stream()함수를 통해 스트리밍 기능 추가
for s in chain.stream({"topic": "bears"}):
    print(s.content, end="", flush=True)


여러 개 API를 요청하고 받는 batch()

  • 번역 작업
    • 여러 입력 값과 출력 값을 한 번에 얻고 싶다면,병렬 실행 기능이 필요
    • LCEL의 batch() 활용 시 쉽게 구현 가능

  • 여러 개의 한글 문장을 불어 문장으로 변역하는 작업을 한꺼번에 수행하는 실습

1. 5개 문장 번역 batch() 수행

%%time
model = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("다음 한글 문장을 프랑스어로 번역해줘 {sentence}")
chain = prompt | model

chain.batch([
    {"sentence": "그녀는 매일 아침 책을 읽습니다."},
    {"sentence": "오늘 날씨가 참 좋네요."},
    {"sentence": "저녁에 친구들과 영화를 볼 거예요."},
    {"sentence": "그 학생은 매우 성실하게 공부합니다."},
    {"sentence": "커피 한 잔이 지금 딱 필요해요."}

])


2. 1개 문장 번역 invoke() 수행

%%time
model = ChatOpenAI(model = 'gpt-4o-mini')
prompt = ChatPromptTemplate.from_template("다음 한글 문장을 프랑스어로 번역해줘 {sentence}")
chain = prompt | model

chain.invoke({"sentence": "그녀는 매일 아침 책을 읽습니다."})

실행 시간(Wall time) : 5개 문장을 한꺼번에 수행할 경우와 1개 문장을 수행한 경우가 비슷함!

profile
언젠가 내 코드로 세상에 기여할 수 있도록, Data Science&BE 개발 기록 노트☘️

0개의 댓글

관련 채용 정보