인공지능/RAG

LangChain (1) 개요

BangPro 2024. 3. 23. 20:17
728x90

LangChain의 개념

  • Langchain은 언어 모델로 구동되는 애플리케이션을 개발하기 위한 프레임워크
  • 강력하고 차별화된 애플리케이션은 API를 통해 언어 모델을 호출하고 이를 통해 개발 가능하다
  • 기능
    • 데이터 인식 : 언어 모델을 다른 데이터 소스에 연결
    • 에이전트 기능 : 사용자가 구체적인 툴이나 방법론을 제시하지 않아도 언어 모델이 환경과 상호 작용할 수 있도록 한다.

결론적으로, 언어모델을 잘 활용하기 위해 사용할 수 있는 도구.

LangChain의 필요성

기존 LLM들의 한계

ChatGPT

ChatGPT의 경우 여러 한계가 존재합니다.

  1. 정보 접근 제한
    chatGPT는 2021년까지의 데이터를 학습한 LLM으로 2022년 이후의 정보에 대해서는 답변을 하지 못하거나, 거짓된 답변을 제공한다.
  2. 토큰 제한
    ChatGPT에서 제공하는 모델 GPT-3.5, GPT-4는 각각 4096, 8192 토큰이라는 입력 토큰 제한이 존재.
  3. 환각 현상
    사실에 대한 질문을 했을때, 잘못된 대답(거짓된 대답)을 내놓는 경우가 있다.

LLM 개량 방법

ChatGPT를 개량하기 위해서는 다양한 방법이 존재한다.

  1. Fine-tuning
    기존의 LLM 모델뿐만 아니라 딥러닝 모델들의 가중치를 조정해서 원하는 Downstream Task(용도)에 맞게 재구성하는 방법
  2. N-shot Learning
    n개의 출력 예제를 제공해서 딥러닝 모델이 용도에 알맞은 출력을 하도록 조정하는 것.
  3. In-context Learning
    문맥을 제시하고, 이 문맥을 기반으로 모델이 출력을 하도록 조정

LangChain

위의 3가지 방법론 중에서 LangChain은 3번 In-context Learning을 통한 접근 방식을 택함
실무에서 사용하기 가장 적합한 방법론은 3번임.
Fine-tuning의 경우 모델을 재학습시켜야 하는데 이 과정에서 필요한 비용, 시간등을 고려해보면 비용이 많이 든다.
N-shot learning의 경우는 LLM에 정보를 제공해야하므로 보안문제가 발생할 수 있다.

LangChain을 통한 ChatGPT의 한계 극복

  1. 정보 접근 제한
    Vectorstore 기반의 정보 탐색, Agent를 활용한 검색을 결합해서 다양한 자료에 접근 가능하다.
  2. 토큰 제한
    TextSplitter를 활용해서 문서를 분할 할 수 있다. 문서들을 기반으로 답변을 요약하고 정리해서 최종 답변을 받을 수 있다.
  3. 환각 현상
    주어진 문서에 대해서만 답하도록 Prompting 가능

LangChain의 종류와 역할

LangChain의 구성 요소

1. LLM

LLM은 초거대 언어 모델로, 생성 모델의 엔진과 같은 역할을 하는 핵심 구성 요소입니다.
LLM의 예시로는 GPT-3.5, PALM-2,LLAMA,StableVicuna,WizardLM,MPT 등이 있습니다.

2. Prompt

LLM에 지시하는 지시문
요소: Prompt Templates, Chat Prompt Template, Example Selectors, Output Parsers

  • Example Selectors : 내가 원하는 출력 형식을 몇가지 예시를 통해서 전달할 수 있는데 이때 어떤 예시를 선택해서 LLM을 이해시키는 것도 자동으로 가능
  • Output Parser : 질문을 하면 LLM이 문장으로 출력해주는데 이때 원하는 형식으로 대답이 나오게 할 수 있다.

3. Index

LLM이 문서를 쉽게 탐색할 수 있게 구조화 하는 모델
예시 : Document Loaders, Text Splitter, Vectorstores, Retrievers...

4. Memory

채팅 이력을 기억하도록 하여, 이를 기반으로 대화가 가능하도록 하는 모듈
예시 : ConversationBufferMemory, Entity Memory, Conversation Knowledge Graph Memory...

5. Chain

LLM 사슬을 형성하여, 연속적인 LLM 호출이 가능하도록 하는 핵심 구성 요소
예시 : LLM Chain, Question Answering, Summarization, Retrieval Question/Answering...

  • 원래 Prompt를 주면 출력이 하나가 나오는데 거기서 끝나는게 아니라 Prompt를 줬을때 백엔드에서 LangChain이 그 Prompt를 받아서
    그 뒤에 Prompt를 만들고, 그걸 또 받고 만드는 과정
    chain을 구성할 때 어떤 목적을 통해서 출력을 받고 싶은지 생각하고 구성해야함. 예를 들어서 QA의 경우 간단하게 물어보더라고 그에 대해서
    더 나은 대답을 위해 백엔드에서 Prompt Template이 들어가있다.

6. Agent

LLM이 기존 Prompt Template으로 수행할 수 없는 작업을 가능케하는 모듈
예시 : Custom Agent, Custom MultiAction Agent, Conversation Agent
사실 Agent 자체보다는 agent에 들어가는 툴들이 다양하다. 예를 들어, web 검색이 가능하다던가, sql 쿼리를 통해 정보를 받는다던가 ...
그런 여러가지 Tool들을 LLM이 자체적으로 판단해서 사용하게 하는 것이 Agent이다.

LangChain 활용 예시

PDF 챗봇 구축

문서를 기반으로 챗봇을 구축하는 경우, 아래와 같은 과정을 통해 대화가 가능하도록 한다

  1. 문서 업로드
    문서를 업로드하는 과정에서도 LangChain이 사용된다. pdf를 Document Loader라는 객체를 통해 업로드하게 되면 추후에 유사도 검색을 통해서 정보를 가져올때 정보의 위치를 파악하는데 Document Loader를 통해서 한다.
  2. 문서 분할
    ChatGPT는 토큰 제한이 있기 때문에 대화를 할때 문서를 통째로 주고 대화하는건 불가능하다. 긴 문서를 여러 개로 분할하게 된다.
    분할 시 장점은 질문과 가장 유사한 내용을 분할된 pdf에서 일부만 가져올 수 있다는 점이다.
  3. 문서 임베딩
    문서를 LLM이 이해할 수 있도록 vector화한다.
  4. 임베딩 검색
    pdf를 기반으로 ChatGPT와 대화를 하겠다고 하면 결국 질문의 답에 해당하는 정보를 가져와서 ChatGPT에게 말을 시키는 과정이다.
    그 역할을 해주는게 임베딩 검색 과정이다. LangChain에서는 VectorStoreRetriever를 통해서 분할된 문서를 임베딩한 곳에서
    검색을 한다.
  5. 답변 생성
    LLM이 QA chain을 통해서 답변을 생성한다. 질문을 하게되면 가장 유사한 텍스트를 가져오고 그것을 Prompt 첫번째 것으로 만들어내고
    그걸 다시 ChatGPT한테 주고 Prompt를 생성하고 다시 질문을 해서 최종 답변을 생성한다.

Reference

모두의 AI 유튜브 채널[https://www.youtube.com/@AI-km1yn]