본문 바로가기

IT, Computer

Retrieval Augmented Generation(RAG) 복습 (4) Langchain Hub

반응형

썸네일


 

 

목차

     

     

     


    서론

    지난 포스팅에서는 LangChain을 어떻게 활용하는지에 대해 알아보았다. 이번 포스팅에서는 LangChain-Hub를 쓰는걸 실습하고자 한다. 우선 왜 langchain hub를 쓰는가?에 대해 알아보고 이후에는 이것을 어떻게 쓰는지 알아볼 것이다. 지난 포스팅을 보면 유사도 검색 과정에서 페르소나를 주기 위해 prompt를 작성했다. 그런데 Langchain hub는 이러한 prompt를 다양하게 갖고있기에 코드를 짜는 사람이 prompt를 짜지 않아도 된다는 강점이 있다. 그럼 지난 포스팅에서 사용한 것과 이번 포스팅에서 사용하는 것을 비교해보자.


    similarity_search 이용

    순서상 RetrivalQA, Langchain-hub가 먼저와야 될 것 같지만 이 부분은 지난 포스팅과 완전히 같으므로, 비교를 위해 langchain-hub와 비교되는 코드만 다시 작성하겠다.

    from langchain_openai import ChatOpenAI
    from langchain_chroma import Chroma
    
    retrived_docs = database.similarity_search('질문')
    
    prompt = f"""[Identity]
    - 당신은 최고의 ㅇㅇㅇ 입니다.
    - [Context]를 참고해서 사용자의 질문에 답변해주세요.
    [Context]
    {retrived_docs}
    Question:{query}
    """
    
    print(llm.invoke(prompt))

    RetrivalQA, LangChain-Hub이용

    우선 앞단은 지난 포스팅에서 나온 코드와 같게 하고, prompt를 선언한다. 그리고 qa_chain을 만든다. RetrievalQA가 갖고 있는 변수는 llm모델, database.as_retriever(), chain_type_kwargs가 있다. qa_chain을 선언하게 되면, 뒷단에 데이터가 들어가서 query만 넣어주면 된다.

    from langchain import hub
    from langchain.chains import RetrievalQA
    
    prompt = hub.pull("rlm/rag-prompt")
    qa_chain = RetrievalQA.from_chain_type(
    	llm,
        retriever=database.as_retriever(),
        chain_type_kwargs={"prompt":prompt})
    
    print(qa_chain({"query":query})) # 답변

     


    두 방법의 차이점은?

    우선 공통점은 RAG를 사용한다는 점이다. 두 방식의 비교되는 장단점에 대해서 알아보겠다. 우선 RetrievalQA를 활용한 방식은 체인을 생성한다는 점이 눈에 띈다. RetrievalQA.from_chain_type을 사용함으로써 검색과 답변 생성을 한번에 한다. prompt 역시 이 함수안에 있다. 그렇기에 구조가 간단하다. 나아가 LangChain에서 제공하는 다양한 기능을 활용할 수 있다. 하지만 짧은 코드로 자동화가 진행된 만큼 유연성이 상대적으로 낮다. 반면 similarity_search를 사용한 방법은, 유사문서를 직접 검색하고, prompt를 직접 적어야 된다. 이렇게 prompt를 직접 적어야 된다는 점이 장점이자 단점인데 장점인 이유는 유연한 제어가 가능하다는 사실이고 단점은 아무래도 직접 짜야된다는 것이다. 부수적으로 더 써야 되는 코딩은 뭐 별 차이나지 않으므로 딱히 단점이라하긴 그렇다고 본다. 한줄 요약은 prompt를 직접 작성하는가로 장단점이 갈린다고 보면 되겠다. 


    끝으로

    이번 포스팅에서는 langchain hub에 대해서 코드와 함께 알아보았다. 다음 포스팅에선 pinecone을 활용하여 llm을 학습할 계획이다. 다음포스팅을 보려면 여기로 가면 된다. 다음 포스팅에서 봅시다.