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 : 최종 답변
- input[ tuple]
PromptTemplate
- prompt
- prompt 모델에 대한 입력( 여러 구성 요소를 가지고 있음)
- prompt templet 이 입력의 (반복, 고정)구성을 담당( Langchain에서 다양한 class와 함수 제공)
- 반복되는 부분을 함수화 "tell me a joke about {subject}”
- 예제
- 목차
- GPT-3(davinch3) 예제
- ChatGPT 예제
- Few-shot 예제
- 내가 원하는 형태의 대답 설정
- Example Selector 예제
- 동적 Few-shot 러닝
- Output Parser(출력값 조정) 예제
- 서비스에 결합할 때 유용할 수 있도록 출력 형태(list, json..) 고정
- 목차
RAG-1 : Document Loaders
- RAG(Retrieval Augumented Generation)
- LLM이 포함하고 있지 않은 지식을 답변할 수 있도록 하는 프레임워크
- RAG 구조
- 이미지 준비중}
- RAG 워크플로
- 이미지 준비중}
- Document Loaders 모듈
- 다양한 형태의 문서를 RAG 전용 객체로 불러들이는 모듈
- RAG 완성했을 때 답변을 받아서 확인할 수 있는 정보
- answer : LLM이 생성한 답변
- sources : 답변의 출처 위치( Metadata)
- RAG 완성했을 때 답변을 받아서 확인할 수 있는 정보
- 다양한 형태의 문서를 RAG 전용 객체로 불러들이는 모듈
- 예제
- 목차
- URL Document Loader
- WebBaseLoader, UnstructuredURLLoader
- [bug?!] : !pip install …
- PDF Document Loader
- Word Document Loader
- Loader DocumentCSV
- URL Document Loader
- 목차
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 단위)
- (토큰 단위)
- 텍스트 분할기
- (글자 단위 분할)
- 목차
RAG-2 : Text Embeddings
- 역할
- 대부분의 경우 대용량의 말뭉치를 통해 사전학습된 모델을 통해 쉽게 임베딩합니다.
- { 이미지 준비중}
- Text Embeddings는 텍스트를 숫자로 변환하여 문장 간의 유사성을 비교할 수 있도록 합니다.
- { 이미지 준비중}
- 임베딩 모델 유형
- 사전학습 임베딩 모델에는 대표적으로 OpenAl에서 제공하는 ada 모델과, HuggingFace의 모델들이 있습니다. 사용 목적과 요구사항에 따라 적절한 임베딩을 고르는 것은 RAG의 가장 중요한 부분입니다.( 한국어 전용 임베딩 모델도 있음)
- { 이미지 준비중}
- 예제
- 목차
- OpenAIEmbeddings - ada-002
- Huggingface Embedding
- BAAI/bge-small-en
- ko-sbert-nli ( 한국어 사전학습 모델 임베딩)
- 목차
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
- VectorStore
- 목차
- 예제 2
- RAG3-VectorStore_실습 02
- 목차
- 허깅페이스에서 임베딩 모델 불러오기
- 임베딩 생성 / BERT 등의 일반적인 언어 모델일 경우
- 임베딩 생성 / 문장 유사도 모델일 경우
- 코사인 유사도 분석
- RAG로 증강할 지식 문서 처리하기
- 벡터 데이터베이스 생성
- 벡터 데이터베이스 질의를 통한 문맥 및 '프롬프트 생성'용 함수들
- 실제 질의에 기반한 '프롬프트 생성'하기
실습 07. RAG-4 : Retriever
- 역할
- 사용자의 질문을
- 임베딩 모델을 통해서 임베딩 시키고
- 임베딩된 벡터를 백터 저장소에 있는 여러 텍스트 청크들과 비교를 하고
- 가장 유사한 문장을 뽑아서 컨텍스트로 넘기고
- 사용자의 질문과 함께 프롬프트로 엮어서
- 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호출 필요
- Stuff documents
- 이란?
- 예제
실습 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 툴킷 확장하기
실습 09. Gemini_RAG
- 예제
- Gemini_RAG
- Gemini 키 발급 받기(https://ai.google.dev/)
- Rag 시스템 구현체인 구성
- 랭체인의 Retriever QA에는 구글 제미니가 반영되지 않아 우회적으로
- Retriever QA이 아닌, ChatPromptTemplate으로 구성
- Gemini_RAG
Update !!!
- 에이전틱 청킹 Agentic Chunking
'새로워지기 > 마흔의 생활코딩' 카테고리의 다른 글
사요나라, 프롬프트 엔지니어링 (0) | 2024.02.20 |
---|---|
LLM | ollama 1부 - 로컬 터미널에서 실행하기 + 버전 업데이트하기 (0) | 2024.02.20 |
LLM | Langchain - 01 개요 (0) | 2023.12.17 |
cursor IDE_coding test 02 - Solid 프로토콜 (0) | 2023.12.13 |
cursor IDE_coding test01 - weather api (1) | 2023.12.08 |
댓글