728x90
300x250
https://python.langchain.com/docs/expression_language/get_started
langChain Expression Language (LCEL)는 체인을 쉽게 구성 할 수있는 선언적인 방법입니다
기본 : 일자식 구성
프롬프트 + 모델 + 출력 파서
chain = prompt | model | output_parser
분기 : RunnableParallel과 RunnablePassThrough를 이용
심화 : 사용자 함수와 함께, Runable하게 구성하기
def format\_docs(docs):
backgrounds = \[\]
max\_token = 3000
count\_token = 0
for doc in docs:
count\_token += len(tokenizer.encode(doc.page\_content))
if count\_token < max\_token:
backgrounds.append(doc.page\_content)
else:
break
return "\\n\\n".join(backgrounds)
rag\_chain = (
{"backgrounds": retriever | format\_docs,
"language": RunnablePassthrough(),
"question": RunnablePassthrough()}
| chat\_prompt
| llm\_model
| StrOutputParser()
)
rag\_chain.invoke({'language': language, 'question': question})
※ retriever를 사용할 때, 여러개의 input이 들어가게 되면 질문은 꼭 "question"으로 해야된다. langchain 내부 retriever에서 그렇게 지정되어 있다.
좋은 예시)
LCEL을 이용해서 복잡한 체인을 구성한 다음, invoke, stream, batch 마음껏 사용가능하고, 필요한 경우 앞단에 선언한 model, prompt등등만 수정하면 동일하게 돌아가게된다.
홈페이지 참조 : https://python.langchain.com/docs/expression_language/why
728x90
300x250
'코딩 > LLM' 카테고리의 다른 글
랭체인 CacheBackedEmbeddings으로 캐시 임베딩 만들기 (0) | 2024.02.26 |
---|---|
랭체인을 이용한 리트리버 검색기 활용 (1) | 2024.02.16 |
OpenAI의 Function Calling의 원리를 알아보자 (1) | 2024.02.13 |
DPO LLM 강화학습법에 대해서 (0) | 2024.01.24 |
Efficient Training of Language Models to Fill in the Middle 언어 모델 효과적인 훈련을 위한 중간 부분 채우기 | 논문 리뷰 영상 감상 (0) | 2024.01.18 |