김형 BLOG

랭체인의 LCEL 문법

langChain Expression Language (LCEL)는 체인을 쉽게 구성 할 수있는 선언적인 방법입니다

https://python.langchain.com/docs/expression_language/get_started

기본 : 일자식 구성
프롬프트 + 모델 + 출력 파서

chain = prompt model output_parser

image

분기 : RunnableParallel과 RunnablePassThrough를 이용

image

심화 : 사용자 함수와 함께, 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에서 그렇게 지정되어 있다.

image

좋은 예시)

LCEL을 이용해서 복잡한 체인을 구성한 다음, invoke, stream, batch 마음껏 사용가능하고, 필요한 경우 앞단에 선언한 model, prompt등등만 수정하면 동일하게 돌아가게된다.

홈페이지 참조 : https://python.langchain.com/docs/expression_language/why