본문 바로가기
  • think normal
새로워지기/마흔의 생활코딩

LLM | Langchain - 02 유형/단계별 RAG 실습

by 청춘만화 2023. 12. 17.
LLM | Langchain

 - 01 개요
👉  02 유형/단계별 RAG 실습

*실습 링크는 코랩 입니다. 

 

 

 

기본 대화 구성하기 

  • 준비, API KEY 발급
  • 실습, GPT와 대화하기
    • OpenAI - Documents
    • Langchain - Langchain(LLM)_실습
      • GPT 3, 3.5 비교
      • 매개변수 조절
        • temperature : 0일관적 답변, 2매번 다른 창의적 답변
        • StreamingStdOutCallbackHandler
      • 챗팅 모델에 역할 부여
        • input[ tuple]
          • HumanMessage : 사용자의 메시지
          • SystemMessage : 챗봇에 역할을 부여하는 메시지
        • output
          • AIMessage : 최종 답변
 

Langchain(LLM)_실습01.ipynb

Colaboratory notebook

colab.research.google.com

 

 

PromptTemplate

  • prompt
    • prompt 모델에 대한 입력( 여러 구성 요소를 가지고 있음)
    • prompt templet 이 입력의 (반복, 고정)구성을 담당( Langchain에서 다양한 class와 함수 제공)
      • 반복되는 부분을 함수화 "tell me a joke about {subject}”
  • 예제
    • 목차
      • GPT-3(davinch3) 예제
      • ChatGPT 예제
      • Few-shot 예제
        • 내가 원하는 형태의 대답 설정
      • Example Selector 예제
        • 동적 Few-shot 러닝
        [bug?!] : !pip install chromadb
      • Output Parser(출력값 조정) 예제
        • 서비스에 결합할 때 유용할 수 있도록 출력 형태(list, json..) 고정
 

PromptTemplate_실습2.ipynb

Colaboratory notebook

colab.research.google.com

 

 

RAG-1 : Document Loaders

  • RAG(Retrieval Augumented Generation)
    • LLM이 포함하고 있지 않은 지식을 답변할 수 있도록 하는 프레임워크
    • RAG 구조
      •  이미지 준비중}
    • RAG 워크플로
      •  이미지 준비중}
  • Document Loaders 모듈
    • 다양한 형태의 문서를 RAG 전용 객체로 불러들이는 모듈
      • RAG 완성했을 때 답변을 받아서 확인할 수 있는 정보
        • answer : LLM이 생성한 답변
        • sources : 답변의 출처 위치( Metadata)
  • 예제
    • 목차
      • URL Document Loader
        • WebBaseLoader, UnstructuredURLLoader
        • [bug?!] : !pip install …
      • PDF Document Loader
      • Word Document Loader
      • Loader DocumentCSV
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

RAG-2 : Text Splitters

  • 역할
    • Text Splitter는 토큰 제한이 있는 LLM이 여러 문장을 참고해 답변할 수 있도록 문서를 분할하는 역할
  • 임베딩 과정
    • Document → Chunk( 글 덩어리) → 임베딩 벡터( in Vector store) → 사용자 질문 → 최종 프롬프트 → LLM
    •  이미지 준비중}
  • Type of TextSplitter
    •  이미지 준비중}
    •  CharacterTextSplitter
      • 구분자 1개 기준으로 분할하므로, max_token을 지키지 못하는 경우 발생
    • RecursiveCharacterTextSplitter
      • 줄바꿈, 마침표, 쉼표 순으로 재귀적으로 분할하므로, max_token 지켜 분할
  • chunk_overlap( CharacterTextSplitter의 parameter)
  • 문맥을 놓치지 않기 위해 사람과 같이 나눠진 청크의 앞부분 일부를 추가로 참조하도록 구성
  • 예제
    • 목차
      • (글자 단위 분할)
        • CharacterTextSplitter
        • RecursiveCharacterTextSplit(재귀적 분할)
        • get_separators_for_language(def, class 단위)
      • (토큰 단위)
        • 텍스트 분할기
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

RAG-2 : Text Embeddings

  • 역할
    • 대부분의 경우 대용량의 말뭉치를 통해 사전학습된 모델을 통해 쉽게 임베딩합니다.
    • { 이미지 준비중}
    • Text Embeddings는 텍스트를 숫자로 변환하여 문장 간의 유사성을 비교할 수 있도록 합니다.
    • { 이미지 준비중}
  • 임베딩 모델 유형
    • 사전학습 임베딩 모델에는 대표적으로 OpenAl에서 제공하는 ada 모델과, HuggingFace의 모델들이 있습니다. 사용 목적과 요구사항에 따라 적절한 임베딩을 고르는 것은 RAG의 가장 중요한 부분입니다.( 한국어 전용 임베딩 모델도 있음)
    • { 이미지 준비중}
  • 예제
    •  목차
      • OpenAIEmbeddings - ada-002
      • Huggingface Embedding
        • BAAI/bge-small-en
        • ko-sbert-nli ( 한국어 사전학습 모델 임베딩)
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

RAG-3 : Vectorstores

  • 역할
    • Chroma는 대표적인 오픈소스 벡터 저장소 & 검색 Retrieve 역할 수행
    • { 이미지 준비중}
  • 종류
    • { 이미지 준비중}
    • Pure vector databases : DB crud
      • Chroma~~($)~~, Pinecone($), Weaviate($), Q drant
    • Vector libraries : 벡터 유사도 계산 특화 툴
      • FAISS( facebook에서 만든 ai 시맨틱 서치 툴)
      • Annoy, Hnswlib ..
    • Text search databases
      • elasticsearch, SOpenSearch, Apache Solr ..
    • Vector-capable SQL databases
      • Postgres, SingleStore ..
    • Vector-capable NoSQL databases
      • MongoDB, redis, neo4j ..
  • 예제 01
    • 목차
      • VectorStore
        • similarity_search()
      • Chroma
        • similarity_search_with_score()
      • FAISS
        • similarity_search_with_relevance_scores
        • max_marginal_relevance_searc
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

  • 예제 2
    • RAG3-VectorStore_실습 02
    • 목차
      • 허깅페이스에서 임베딩 모델 불러오기
      • 임베딩 생성 / BERT 등의 일반적인 언어 모델일 경우
      • 임베딩 생성 / 문장 유사도 모델일 경우
      • 코사인 유사도 분석
      • RAG로 증강할 지식 문서 처리하기
      • 벡터 데이터베이스 생성
      • 벡터 데이터베이스 질의를 통한 문맥 및 '프롬프트 생성'용 함수들
      • 실제 질의에 기반한 '프롬프트 생성'하기
 

RAG3-VectorStore_실습 02

Colaboratory notebook

colab.research.google.com

 

 

실습 07. RAG-4 : Retriever

  • 역할
    1. 사용자의 질문을
    2. 임베딩 모델을 통해서 임베딩 시키고
    3. 임베딩된 벡터를 백터 저장소에 있는 여러 텍스트 청크들과 비교를 하고
    4. 가장 유사한 문장을 뽑아서 컨텍스트로 넘기고
    5. 사용자의 질문과 함께 프롬프트로 엮어서
    6. LLM에 넘겨주는 역할 전반에 관여
  • 이용 방법
    • 분할된 텍스트 청크를 Context에 그대로 주입합니다. 토큰 이슈가 발생할 수 있어, 주의를 요합니다
  • Chain
    • 이란?
      • { 이미지 준비중}
      • 어떤 식으로 사용자의 질문에 대처하는지 잘 수행하고 있는지 확인
      • 어떤 매개 변수를 어떻게 사용하는지,
    • 종류
      • Stuff documents
        • { 이미지 준비중}
        • 분할된 텍스트 청크를 Context에 그대로 주입합니다. 토큰 이슈가 발생할 수 있어, 주의를 요합니다.
      • Map reduce documents chain
        • { 이미지 준비중}
        • map : (병렬)분할된 텍스트 청크마다 요약을 생성하고,
        • reduce : 이를 합친 최종 요약을 생성
        • 단점 - 다수 호출이 필요, 속도가 느림, 여러 번 LLM호출 필요
      • Refine documents chain
        • { 이미지 준비중}
        • 분할된 텍스트 청크를 순회하면서 누적 답변을 생성합니다.
        • 품질이 뛰어남
        • 단, 병렬 처리 부분이 없고 순서가 정해져 있어서 시간이 오래 걸립니다.
      • Map re-rank documents chain
        • { 이미지 준비중}
        • 분할된 텍스트 청크를 순회하면서 누적 답변을 생성합니다.
          • 질문 : 텍스트 청크(컨텍스트) : LLM 답변(답변, 스코어) = 1:1:1
          • → 연관성 스코어가 가장 높은 답변 채택
        • 품질이 뛰어남
        • 단, 시간이 오래 걸리고 여러 번 LLM호출 필요
  • 예제
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

실습 08. SQL_Agent : 자연어로 SQL 쿼리 만들기

  • 예제7. SQL_Agent
    • 실습 테이블( Download SQLite sample database)
    • 예제목차
      • Text-to-SQL query
      • Text-to-SQL query and execution
      • SQL 에이전트
        • Agent task example #1 - Running queries
        • Agent task example #2 - Describing a Table
        • SQL 툴킷 확장하기
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

실습 09. Gemini_RAG

  • 예제
    • Gemini_RAG
      • Gemini 키 발급 받기(https://ai.google.dev/)
      • Rag 시스템 구현체인 구성
        • 랭체인의 Retriever QA에는 구글 제미니가 반영되지 않아 우회적으로 
        • Retriever QA이 아닌, ChatPromptTemplate으로 구성
 

Google Colaboratory Notebook

Run, share, and edit Python notebooks

colab.research.google.com

 

 

 

 

 

 

 

 


Update !!!

 

 

RAG3-VectorStore_실습 02

Colaboratory notebook

colab.research.google.com

 

 

LLM | Five Levels of Chunking( 스압 주의!)

1. 개요 Chunking Chunking은 고품질의 응답에 많은 영향을 미치는 중요한 과정으로써 텍스트를 관리를 쉽고, 명확하게 중요한 부분으로 나누는 과정으로 맥락의 효율적인 처리와 검색을 위해 사용

normalstory.tistory.com

 

댓글