Skip to content

HanMulBit/inflearn-rag-notebook

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAG를 활용한 LLM Application 개발 (feat. LangChain)

프로젝트 요약

  • 한국의 소득세법을 활용해서 RAG를 구성하고 LangChainChatOpenAI클래스를 활용하여 LLM과 연결합니다.
  • keyword 사전을 활용해서 retrieval 성능을 개선합니다

3.1 환경 설정과 LangChain의 ChatOpenAI를 활용한 검증

  • 패키지 설치 및 환경 변수 설정: python-dotenvlangchain-openai 패키지를 설치하고 .env 파일을 통해 OpenAI API 키를 설정합니다.
  • LangChain의 ChatOpenAI 사용: ChatOpenAI 클래스를 사용하여 OpenAI의 언어 모델을 통해 질문에 대한 답변을 생성합니다.
  • 실제 예제: "인프런에 어떤 강의가 있나요?"라는 질문에 대해 인프런의 강의 내용과 특징을 설명하는 답변을 생성합니다.

3.2 LangChain과 Chroma를 활용한 RAG 구성

  • 데이터 생성 및 분할: RecursiveCharacterTextSplitter를 사용하여 문서를 chunk로 분할하고, Docx2txtLoader를 통해 데이터를 로드합니다.
  • 데이터 임베딩 및 저장: OpenAI의 임베딩 모델을 사용하여 chunk를 벡터화하고, Chroma를 통해 벡터화된 데이터를 데이터베이스에 저장합니다.
  • 질의 응답 생성: 저장된 데이터를 유사도 검색을 통해 검색하고, RetrievalQA 체인을 사용하여 질문에 대한 답변을 생성합니다.

3.3 LangChain 없이 구성하는 RAG의 불편함

  • 데이터 생성 및 분할: python-docxtiktoken을 사용하여 문서를 chunk로 분할하고, 텍스트 데이터를 생성합니다.
  • 데이터 임베딩 및 저장: OpenAI의 임베딩 모델을 사용하여 chunk를 벡터화하고, Chroma를 통해 벡터화된 데이터를 데이터베이스에 저장합니다.
  • 질의 응답 생성: 저장된 데이터를 유사도 검색을 통해 검색하고, OpenAI의 언어 모델을 사용하여 질문에 대한 답변을 생성합니다.

3.4 LangChain을 활용한 Vector Database 변경 (Chroma ➡️ Pinecone)

  • 데이터 생성 및 분할: Docx2txtLoaderRecursiveCharacterTextSplitter를 사용하여 문서를 로드하고 chunk로 분할합니다.
  • 벡터 데이터베이스 변경: 기존 Chroma 벡터 데이터베이스를 Pinecone으로 변경하여 문서 임베딩을 저장하고 검색합니다.
  • 질의 응답 생성: RetrievalQA 체인을 사용하여 저장된 벡터 데이터베이스에서 문서를 검색하고, OpenAI의 언어 모델을 통해 질문에 대한 답변을 생성합니다.

3.5 Retrieval 효율 개선을 위한 데이터 전처리

  • 데이터 전처리 및 분할: Docx2txtLoaderRecursiveCharacterTextSplitter를 사용하여 문서를 로드하고 chunk로 분할합니다.
  • 벡터 데이터베이스 설정: Pinecone을 사용하여 벡터 데이터베이스를 설정하고, OpenAI 임베딩 모델을 통해 문서 임베딩을 저장합니다.
  • 질의 응답 생성: RetrievalQA 체인을 사용하여 저장된 벡터 데이터베이스에서 문서를 검색하고, OpenAI의 언어 모델을 통해 질문에 대한 답변을 생성합니다.

3.6 Retrieval 효율 개선을 위한 키워드 사전 활용방법

  • 데이터 로드 및 분할: Docx2txtLoaderRecursiveCharacterTextSplitter를 사용하여 문서를 로드하고 chunk로 분할합니다.
  • 벡터 데이터베이스 설정: Pinecone을 사용하여 벡터 데이터베이스를 설정하고, OpenAI 임베딩 모델을 통해 문서 임베딩을 저장합니다.
  • 질의 응답 생성: RetrievalQA 체인을 사용하여 저장된 벡터 데이터베이스에서 문서를 검색하고, OpenAI의 언어 모델을 통해 질문에 대한 답변을 생성합니다.
  • 사전 체인의 중요성: dictionary_chain을 사용하여 사용자의 질문을 사전에 정의된 키워드로 수정함으로써, 더 정확한 검색 결과와 답변을 제공합니다.

5.1 LangSmith를 활용한 LLM Evaluation

  • 데이터 생성 및 로드: langsmith를 사용하여 소득세법 관련 질문-답변 쌍을 생성하고, 데이터를 로드합니다.
  • 벡터 데이터베이스 설정: Pinecone을 사용하여 벡터 데이터베이스를 설정하고, OpenAI 임베딩 모델을 통해 문서 임베딩을 저장합니다.
  • 질의 응답 생성: RagBot 클래스를 사용하여 저장된 벡터 데이터베이스에서 문서를 검색하고, OpenAI의 언어 모델을 통해 질문에 대한 답변을 생성합니다.
  • 평가 및 검증: langsmith의 평가 도구를 사용하여 생성된 답변의 정확성, 유용성, 그리고 환각 여부를 평가합니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 100.0%