본문 바로가기
코딩/LLM

랭체인의 LCEL 문법

by 킹형 2024. 2. 15.
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