Chatbot 프로젝트/LangChain

1. 다중 쿼리 생성(Multi-query Retriever) 기법1.1. 기존 RAG의 문제점기존의 RAG는 사용자의 질문이 모호할 경우, 벡터 DB 내 문장들과 매칭되지 않는 경우가 있다.1.2. MultiQueryRetriever 원리MultiQueryRetriever는 사용자 질문의 의도를 LLM이 이해하여 이를 여러 질문으로 재생성합니다. 1.3. 1.3. Chroma DB에 문서 벡터 저장from langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langcha..
1. LCEL로 기본 체인 구성하기from langchain_core.output_parsers import StrOutputParser # LLM의 답변만 잘라서 가지고 오는 것from langchain_core.prompts import ChatPromptTemplate # 프롬프트 from langchain_openai import ChatOpenAI # OPEN AI#프롬프트 템플릿 설정prompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")#LLM 호출model = ChatOpenAI(model="gpt-4o-mini")#출력 파서 설정output_parser = StrOutputParser()#LCEL로 프롬..
1. LCEL(Langchain Expression Language)은 Langchin 프레임워크에서 사용되는언어로, 다양한 장점(9가지)이 있다.  2. LCEL의 형태2.1. LCEL은 파이프 오퍼레이터(“|”)를 통해 짧은 코드만으로 Chain을 구성할 수 있다.2.2. LCEL은 가독성 높은 코드를 바탕으로,  invoke 함수를 통해 LLM의답변을받아볼 수 있다. 2.3. LCEL을 사용하면 Chain의 내장함수인 Stream을 통해 두줄만으로 LLM 답변 스트리밍이 가능하다.  2.4. LCEL을 사용하면 여러 프롬프트를 한꺼번에 실행하는 Batch 처리가 용이합니다.  2.5. LCEL을 사용하면 여러 프롬프트를 한꺼번에 실행하는 Batch 처리가 용이합니다.
1. RAG의 핵심, 문서 검색기 Retriever1.1. Retriever의 기본형, 벡터DB 기반 Retrieverfrom langchain.document_loaders import PyPDFLoaderfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddingsfrom langchain_community.vectorstores import Chromaos.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"#헌법 PDF 파일 로드loader = PyPDFLoader(r"/content/drive/MyDrive/마소캠퍼스/대하..
1. Vector Stores의 개념 elsatic search, redis, mongo db, postgreSQL의 기존 데이터베이스와 달리 chroma, pinecone, faiss 같은 벡터 DB는 고차원적인 벡터 데이터를 다루는 것에 가장 유용하다. 기존 DB는 구조를 가지는 정형화된 반면, 벡터 DB는 비정형적인 db(몽고 DB)같은 DB들이 뜨다가, 벡터 임베딩을 다루는 DB들이 점차 증가하게 되었다.  vector library는 DB로서의 기능(CRUD)은 없다. 이는 벡터 임베딩을 임시적으로 저장하고, 내가 원하는 유사도가 높은 임베딩을 찾아내는 그런 검색에 특화된 라이브러리이다. FAISS는 메타에서 만든 라이브러리인데, 이것만 잘 활용해도 RAG 시스템을 구축하는데 문제가 없다. 다만..
1. Embeddings의 개념 각각의 차원들이 뜻하는 바는 이 문장의 특성을 나타낸다. 단어의 이중적인 의미를 768차원에 담는다.즉, 주어진 문장을 몇차원의 벡터 임베딩에 담아내느냐에 따라 문장이 다르다. 2. Embeddings의 원리대용량의 말뭉치를 통해서 사전학습된 모델을 통해 쉽게 임베딩을 할 수 있다.이 임베딩 모델은 Transformer 아키텍처에서 인코더 모델을 학습시킨 경우가 많다.인코더 모델에 굉장히 많은 양의 데이터를 학습을 시키면 이 모델 자체적으로 문장 내에 이런이런 뜻이 있고, 문법적으로 이런이런 순서와 이런이런 뜻을 갖고 있다는 것을 모델이 파악할 수 있게 해준다. 따라서, 사전 학습된 임베딩 모델을 통해 문장을 바로 숫자로 표현 가능하다. (따로 학습이 필요없다.)임베딩 -..
1. Text Splitter의 개념1.1 Text Splitter는 문서를 여러개의 Chunk로 분할하는 것1.1.1. RAG는 Document Loader로 불러온 문서를 벡터 임베딩으로 변환하여 벡터DB에 저장하고, 이를 활용1.1.2. LLM에게 문서를 그대로 입력하여 답변하도록 하면 입력값 길이 제한으로 인해 오류가 발생할 수 있다.예를 들어, GPT-4O모델의 경우에는 12만 8천 토큰, Claude 3.5 sonnect의 경우에는 20만 토큰까지 입려가능하다. 다만 , 한글과 영어에 토큰 개수 차이가 존재한다. 한글 문서를 LLM에게 넘겨줬을때 영어 토큰보다 빨리달고, 한글문서로 따지면 몇장 안되어 에러가 발생한다. 1.1.3. 문서를 여러개의 조각(Chunk)로 분할하여 벡터DB에 저장하고..
1. Prompt와 PromptTemplate1.1. Prompt: 모델에 대한 입력을 의미한다. 실제 LLM 서비스들 의경우, 사용자가 전부 입력하도록 만들지 않고 Back 단에서 여러 구성 요소를 통해 편리한 입력을 지원하도록 한다.1.2. PromptTemplate: 이러한 편리한 입력 지원을 위한 모듈이다. Langchain은 프롬프트를 쉽게  구성하고 작업할 수 있도록 여러클래스와 함수를 제공한다.  위의 Day1, Day2, Day3 에서 반복적으로 물어보게 했는데, 이를 템플릿 화 해서 공통질문으로 자동으로 물어보게 할 수 있다.   2. PromptTemplate의 종류2.1. PromptTemplate한 프롬프트에 매개 변수를 지정한다.2.2. ChatPromptTemplate위와 달리 ..
조찬국
'Chatbot 프로젝트/LangChain' 카테고리의 글 목록