RetrievalQA 대신 LangChain Expression Language을 이용하여 RAG(Retrieval-Augmented Generation) 검색처리
해당 단계는
데이토 로드. 텍스트 분할, 인텍싱, 검색, 생성
1. 데이터 로드
RAG에 사용할 데이터를 불러오는 단계 외부 데이터 소스에서 정보를 수집하고, 필요한 형식으로 변환하여 시스템에 로드
langchain.document_loaders 모듈에서 UnstructuredFileLoader 클래스를 이용하여 데이터를 호출하고 있음
2. 텍스트 분할(Text Split)
불러온 데이터를 작은 크기의 단위(chunk)로 분할하는 과정
자연어 처리(NLP) 기술을 활용하여 큰 문서를 처리가 쉽도록 문단, 문장 또는 구 단위로 나누는 작업
검색 효율성을 높이기 위한 중요한 과정
LLM 모델이나 API의 입력 크기에 대한 제한이 있기 때문에, 제한에 걸리지 않도록 적정한 크기로 텍스트의 길이를 줄일 필요가 있음
프롬프트가 지나치게 길어질 경우 중요한 정보가 상대적으로 희석되는 문제 발생
3. 인덱싱(Indexing)
분할된 텍스트를 검색 가능한 형태로 만드는 단계
인덱싱은 검색 시간을 단축시키고, 검색의 정확도를 높이는 데 중요한 역할
LangChain 라이브러리를 사용하여 텍스트를 임베딩으로 변환하고, 이를 저장한 후, 저장된 임베딩을 기반으로 유사성 검색을 수행
즉 OpenAI의 임베딩 모델을 사용하여 텍스트를 벡터로 변환하고, 이를 Chroma 벡터저장소에 저장
여기서는 FAISS 벡터 저장소를 이용
vectorstore.similarity_search 메소드는 주어진 쿼리 문자열에 대해 저장된 문서들 중에서 가장 유사한 문서들을 찾음
4. 검색(Retrieval)
사용자의 질문이나 주어진 컨텍스트에 가장 관련된 정보를 찾아내는 과정
사용자의 입력을 바탕으로 쿼리를 생성하고, 인덱싱된 데이터에서 가장 관련성 높은 정보를 검색
LangChain의 retriever 메소드를 사용
5. 생성(Generation)
검색된 정보를 바탕으로 사용자의 질문에 답변을 생성하는 최종 단계
LLM 모델에 검색 결과와 함께 사용자의 입력을 전달
모델은 사전 학습된 지식과 검색 결과를 결합하여 주어진 질문에 가장 적절한 답변을 생성
vectorstore.as_retriever() 메소드는 Chroma 벡터 스토어를 검색기로 사용하여 사용자의 질문과 관련된 문서를 검색
여기서는 Chroma 가 아닌 FAISS 를 이용
[결과] AIMessage(content='Victory Mansions is a building in London that is described as having a roof from which you can see four other buildings of similar appearance and size. It is said to contain three thousand rooms above ground level and corresponding ramifications below. The building dwarfs the surrounding architecture. It is the home of the Ministry of Truth, which deals with news, entertainment, education, and the fine arts, among other things.')
'python' 카테고리의 다른 글
[GPT] streamlit (0) | 2024.04.08 |
---|---|
[GPT] Map Reduce LCEL Chain (0) | 2024.04.04 |
[GPT] RetrievalQA (0) | 2024.04.04 |
[GPT] Vector Store (0) | 2024.04.03 |
[GPT] LangChain 한국어 튜터리얼 (0) | 2024.04.03 |