AI 이것만은 알고가자 1편 : LangChain이란?

안녕하세요 오늘은 BESPIN GLOBAL AX실 양재현님이 작성해주신 ‘AI 이것만은 알고가자 1편 : LangChain이란?’ 대해서 소개해드리도록 하겠습니다. 포스팅은 AI 관련된 기본 개념들에 대해 5편으로 나누어 공유 하고자 합니다.

목차

  1. lang chain 이란?
  2. langchain을 활용한 – PDF 챗봇 구축 예시

1. lang chain 이란?

  • 대규모 언어 모델 ( LLM ) 을 활용하여 복잡한 애플리케이션을 구축 할 수 있도록 도와주는 프레임워크입니다.
  • 강력하고 차별화된 애플리케이션은 api를 통해 언어 모델을 호출할 뿐만 아니라 이를 통해 개발될 것이라 믿습니다.
  • 데이터 인식 : 언어 모델을 다른 데이터 소스에 연결합니다. (벡터스토어 – 임베딩 )
  • 에이전트 기능 : 언어 모델이 환경과 상호 작용할수 있도록 합니다. ( 어떤 툴을 사용할지 랭체인이 결정 ) – 향후 에이전트의 묶음이 최종 chatgpt가 될 것으로 예상합니다.

따라서 lang chain이란 언어 모델을 더 잘 활용할 수 있게끔 도와주는 도구라고 이해하면 됩니다.

하지만 chatgpt 3.5는 파일업로드 기능 불가 등과 같은 한계점이 있습니다. 현재는 4o(멀티모달-추후 설명) , 4o-preview(추론) 은 이러한 문제를 해결할 수 있습니다.

  • chatgpt 3.5는 2021년까지의 데이터를 학습한 LLM 초거대언어모델이므로 2022년부터의 정보에 대해서는 답변을 하지 못합니다.
    -> 해결방안 : Vectorstrore 기반 정보 탐색 ( RAG ) or Agent를 활용한 검색 결합으로 대응이 가능합니다.
  • 토큰 제한 4096 , 8192 토큰이라는 입력 토큰 제한이 존재합니다.
  • TextSplitter를 활용한 문서 분할이 가능합니다.
  • 환경 현상 Fact에 대한 질문을 했을때 엉뚱한 대답을 하거나 거짓말을 하는 경우가 많습니다.(전문용어로 할루시네이션)
  • 주어진 문서에 대해서만 답하도록 프롬프트 입력하여 어느정도 해결이 가능합니다.

따라서 chatgpt를 개량하고 업그레이드 니즈가 필요합니다.

  • 파인튜닝(고비용) : 기존 딥러닝 모델의 weight를 조정하여 원하는 용도의 모델로 업데이트해야합니다. ( 미세조정 과정 )
     예시 ) gpt의 인코딩 구조를 가진 BERT를 미세조정하여 감성 분류 모델로 활용합니다.
  • N-shot learning : 0개~N개의 출력 예시를 제시하여, 딥러닝 용도에 알맞은 출력을 하도록 조정합니다.
  • In-context learning : 문맥을 제시하고, 이 문맥 기반으로 모델이 출력하도록 조정합니다.

따라서 langchain을 활용하면 위에 대한 문제를 해결 가능합니다.

  • LLM : 초거대 언어모델로 , 생성 모델의 엔진과 같은 역할을 하는 핵심 구성 요소입니다.
    – gpt 3.5 , Palm2 , llama , stablevicuna , wizardlm
  • 프롬프트 : 초거대 언어모델에게 지시하는 명령문입니다.
    – prompt template , chat prompt template , example selectors(n-shot), output Parsers
  • Index : LLM이 문서를 쉽게 탐색할 수 있도록 구조화 하는 모듈입니다.
    – document loaders, text splitters, vectorstores, retrivers
  • 메모리 : 채팅 이력을 기억하도록 하여 , 이를 기반으로 대화가 가능하도록 하는 모듈입니다.
  • chain 종류 : LLM 사슬을 형성하여 , 연속적인 LLM 호출이 가능하도록 하는 핵심 구성 요소입니다.
    – LLM chain , Question Answering , Summarization , Retrieval Question / answerring
  • Agents : LLM이 기존 Prompt template으로 수행할 수 없는 작업을 가능케하는 모듈입니다.
    – custom agent , Custom Multiaction agent , conversation agent

2. langchain을 활용한 – PDF 챗봇 구축 예시

  1. 문서 업로드 – 도큐먼트 로더 (pypdfloader를 활용한 문서 가져오기)
  2. 문서 분할 – text splitter ( pdf 문서를 여러 문서로 분할 ) – 각각의 청크
  3. 문서 임베딩 ( 임데딩 투 벡터스토어 ) – LLM이 이해할수 있도록 문서 수치화
  4. 임베딩 검색 – 벡터스토어 retriever “ what is python?” – 질문과 연관성이 높은 문서 추출
  5. 답변 생성 – Qa achain ( qustion – relevant ) – 질문과 연관성이 높은 문서 추출
  6. 사용자 질문에 대한 답변 생성
  7. 전체 워크플로우 실행
  • 샘플 코드 공유
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

# 1. 문서 업로드 – 도큐먼트 로더 (PyPDFLoader를 활용한 문서 가져오기)

def load_pdf(file_path):
    loader = PyPDFLoader(file_path)
    documents = loader.load()
    return documents

# 2. 문서 분할 – text splitter (PDF 문서를 여러 문서로 분할) – 각각의 청크

def split_documents(documents, chunk_size=1000, chunk_overlap=100):
    splitter = RecursiveCharacterTextSplitter(
        chunk_size=chunk_size,
        chunk_overlap=chunk_overlap,
        length_function=len
    )
    chunks = splitter.split_documents(documents)
    return chunks

# 3. 문서 임베딩 (임베딩 투 벡터스토어) – LLM이 이해할 수 있도록 문서 수치화

def create_vectorstore(chunks):
    embeddings = OpenAIEmbeddings()
    vectorstore = FAISS.from_documents(chunks, embeddings)
    return vectorstore

# 4. 임베딩 검색 – 벡터스토어 retriever “What is Python?” – 질문과 연관성이 높은 문서 추출

def get_retriever(vectorstore):
    retriever = vectorstore.as_retriever()
    return retriever

# 5. 답변 생성 – QA Chain (질문과 연관성이 높은 문서 추출 및 답변 생성)

def create_qa_chain(retriever):
    llm = OpenAI()
    qa_chain = RetrievalQA.from_chain_type(
        llm=llm,
        chain_type="stuff",
        retriever=retriever,
        return_source_documents=False
    )
    return qa_chain

# 6. 사용자 질문에 대한 답변 생성

def answer_question(qa_chain, question):
    answer = qa_chain.run(question)
    return answer

# 7. 전체 워크플로우 실행

ef main():
    # PDF 파일 경로 설정
    pdf_path = "example.pdf"  # 여기에 실제 PDF 파일 경로를 입력하세요.

위 코드를 보면 LangChain은 

  • 파일 로딩
  • 분할 
  • 임베딩
  • 검색

등의 작업을 처리하고 , chatgpt LLM 모델은 언어 생성 및 응답 생성에 활용됨으로써 종합적인 솔루션을 제공합니다.

따라서 langchain은 대규모 언어 모델(LLM) 을 활용하여 복잡한 애플리케이션을 구축할수 있도록 설계된 오픈소스 라이브러리로, 개발자들이 손쉽게 자연어 처리 기능을 통합하고 확장할 수 있게 도와줍니다. 

여기까지 ‘AI 이것만은 알고가자 1편 : LangChain이란?’에 대해 소개해드렸습니다. 유익한 정보가 되셨길 바랍니다. 감사합니다. 

Written by 양 재현/ AX실

BESPIN GLOBAL