728x90
1. LCEL로 기본 체인 구성하기
from langchain_core.output_parsers import StrOutputParser # LLM의 답변만 잘라서 가지고 오는 것
from langchain_core.prompts import ChatPromptTemplate # 프롬프트
from langchain_openai import ChatOpenAI # OPEN AI
#프롬프트 템플릿 설정
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"})
prompt -> model이 넘겨받은 prompt를 통해 답변 생성 -> output_parser로 답변만 받음
1.2. Streaming 기능 추가를 더욱 쉽게, stream()
from langchain_core.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)
토큰 별로 타이핑 되듯이 나타난다.
1.3. 한꺼번에 여러 개 API 요청하고 답변 받기, batch()
1.3.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": "커피 한 잔이 지금 딱 필요해요."}
])
batch를 통해 리스트를 넣어
1.3.2. 1개 문장 번역 invoke 수행
%%time
prompt = ChatPromptTemplate.from_template("다음 한글 문장을 프랑스어로 번역해줘 {sentence}")
chain = prompt | model
chain.invoke({"sentence": "그녀는 매일 아침 책을 읽습니다."})
<결과>
1개의 문장의 소요시간이 0.67초이면 5개 문장을 실시하면 이보다 훨씬 더 오래걸려야 하지만 batch를 통해 1.1초 만 걸린것을 확인할 수 있다.
2. RunnablePassthroug
RunnablePassthrough는 가장 단순한 Runnable 객체로, 들어온 입력을 그대로 전달합니다.
from langchain_core.runnables import RunnablePassthrough
RunnablePassthrough().invoke("안녕하세요")
RunnablePassthrough는 assin 함수를 통해 새로운 변수에 계산된 값을 입력할 수 있습니다.
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
runnable = RunnableParallel(
extra=RunnablePassthrough.assign(mult=lambda x: x["num"] * 3),
modified=lambda x: x["num"] + 1,
)
runnable.invoke({"num": 1})
<결과>
3. RunnableLambda
RunnableLambda는 임의의 함수를 Chain에 결합할 수 있게 Runnable 객체로 변환합니다.
3.1. 체인을 시각적으로 확인하기 (gradalf=> ascii 코드로 확인 가능)
4. RunnableParallel
RunnableParallel은 여러 요소가 병렬 처리되도록 처리합니다
4.1. 2개의 체인도 동시에 설정하기
max_token값을 128로 주어 최대한 짧게 답변하도록 한다.
5. LCEL로 RAG 구축하기
728x90
'Chatbot 프로젝트 > LangChain' 카테고리의 다른 글
11. 고급 RAG 기법 (0) | 2024.11.26 |
---|---|
9. LCEL 소개 및 기본 구조 (0) | 2024.11.24 |
8. RAG를 위한 LangChain의 핵심 구성 요소 및 실습[Retrievers] (0) | 2024.11.24 |
7. RAG를 위한 LangChain의 핵심 구성 요소 및 실습[Vector Stores] (0) | 2024.11.24 |
6. RAG를 위한 LangChain의 핵심 구성 요소 및 실습[Embeddings] (0) | 2024.11.01 |