데이터 분석/LLM(7)
-
LangChain을 이용한 RAG - (6) 여러 문서 RAG 태우기
2024.06.03 - [AWS] - [AWS Summit Seoul 2024] LLM의 프롬프트 엔지니어링2024.07.22 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (5) 생성 편아이디어이전에 AWS Summit에서 고급 RAG라고 해서, RAG로 문서와 관계 없는 질문을 하면 성능이 떨어지기 때문에 필요할 때만 RAG를 사용하도록 하라고 했었다.참고: [발표자료][생성형 AI 및 기계 학습] Amazon Bedrock을 활용한 프롬프트 엔지니어링 모범사례 (awscloud.com) 나는 이에 대해 아래와 같은 아이디어를 냈었는데 직접 구현해보기로 했다. 1. 주제가 다른 문서마다 벡터스토어를 따로 만들기2. 사용자의 질문이 들어오면 LLM을 통해 어느 벡터스토어를 거쳐야할..
2024.08.05 -
LangChain을 이용한 RAG - (5) 생성 편
2024.07.15 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (4) 검색 편Augment & GenerateRetriever를 통해 찾은 문서를 프롬프트에 증강(Augment)하고 LLM을 통해 답변을 생성(Generate)하는 과정이다. 이로써 RAG의 R, A, G가 모두 제 역할을 마치게 된다. Chain을 이용한 생성LangChain에 왜 Chain이 붙었는지에 대한 이유를 여기서 알 수 있게 된다.from langchain_openai import ChatOpenAIfrom langchain_core.output_parsers import StrOutputParserfrom langchain.schema.runnable import RunnablePassthrough..
2024.07.22 -
LangChain을 이용한 RAG - (4) 검색 편
2024.07.11 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (3) 벡터 DB 편Retrieve드디어 RAG의 R을 수행한다. LangChain에서는 벡터스토어를 통해 검색을 하게 되며, 3편을 보면 벡터스토어를 선언할 때 임베딩 모델을 함께 넣어주기 때문에 사용자 입력(쿼리)을 벡터스토어가 알아서 임베딩해주고 그 결과를 가지고 검색을 수행한다.vectorstore_faiss = FAISS.from_documents( documents=split_docs, embedding=hf # HuggingFaceBge 임베딩 모델) 벡터스토어를 통해 바로 검색하는 방법이 있고, 벡터스토어를 retriever(검색기)로 변환한 후 검색하는 방법이 있다.query = "리셀은 암표와..
2024.07.15 -
LangChain을 이용한 RAG - (3) 벡터 DB 편
2024.07.06 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (2) 문서 임베딩 편벡터 DB말 그대로 "벡터" 데이터를 효율적으로 저장하고 빠르게 검색하는데 최적화된 데이터베이스이다. 벡터 DB를 사용하는 이유는 1편에서 간단하게 설명했었다. 나는 거지이기 때문에 무료인 FAISS, Chroma DB를 사용하였다. 벡터스토어 생성벡터스토어는 벡터DB와 동일한 개념으로 사용되는 용어다. LangChain에서는 벡터스토어라고 표현을 했기 때문에 나도 그에 맞춰 작성을 하였다.from langchain_community.vectorstores import FAISS, Chromavectorstore_faiss = FAISS.from_documents( documents=spl..
2024.07.11 -
LangChain을 이용한 RAG - (2) 문서 임베딩 편
2024.07.01 - [데이터 분석/LLM] - LangChain을 이용한 RAG - (1) 이론편 임베딩 방식"문서를 어떻게 벡터화하지?"라는 근본적인 질문에는 Word2Vec, BERT 같은 임베딩 모델에 대해 직접 찾아보는 것을 추천한다.여기서는 LangChain을 이용하여 임베딩을 수행하는 방법을 설명하고자 한다. (1) 파일 불러오기pdf, csv, txt, docx 파일, 데이터프레임 등 다양하게 불러올 수 있다. `DirectoryLoader`를 이용하여 여러 파일을 동시에 불러올 수도 있다.from langchain.document_loaders import PyPDFLoader, CSVLoader, TextLoader, Docx2txtLoader, DataFrameLoader, Dire..
2024.07.06 -
LangChain을 이용한 RAG - (1) 이론편
RAG란Retrieve-Augmented Generation으로 굳이 한국어로 번역하자면 검색-증강 생성이 된다. 이는 LLM이 학습하지 않은 정보에 대해 답변을 잘 하지 못하는 문제를 해결하기 위해 나온 방법이다. GPT-3.5가 2021년까지의 데이터로 학습이 되었기 때문에 그 이후의 질문을 하면 대답을 잘 하지 못하거나 엉뚱한 답을 한다. 하지만 one-shot 프롬프트나 few-shot 프롬프트 엔지니어링을 통해 원하는 답을 만들게 할 수 있는데 이를 응용한 것이 RAG이다. 좀 더 쉽게 설명하자면, 프롬프트 안에 "정답지"를 주고 그 정보를 이용하여 답을 하게 만들게 하는데 결국 오픈북 시스템과 비슷하다고 볼 수 있다. RAG의 필요성그럼 이런 의문점이 생길 것이다. "정답을 알고 있는데 왜 굳..
2024.07.01 -
Jupyter에서 LLM response를 stream 형태의 Markdown으로 보기
1. 배경OpenAI나 Bedrock API 등의 LLM을 이용하여 프롬프트, 파라미터 조정 등 챗봇 테스트를 진행하고자 하는 경우가 있다. streamlit을 이용하여 챗봇 화면을 구성하여 테스트를 진행할 수도 있으나 jupyter notebook (혹은 jupyter lab)에서 수행하는 것이 더 적절할 때가 있다. 이럴 때 stream 형태(ChatGPT, Copilot처럼 토큰마다 답변이 생성되어 나오는 형태)로 답변을 받고자 했다. 물론 토큰 단위로 `print(..., end='')`하면 출력되는 값을 실시간으로 확인할 수 있지만 나는 답변을 Markdown으로 바꿔서 확인하고 싶었다. 챗봇 클래스를 만들어 이전 대화가 이어지게 하는 건 덤. 2. OpenAI API를 이용한 챗봇 클래스 구..
2024.06.25