베하 ~ 😉
오늘은 저번 시간에 다뤘던 Langchain 패키지를 사용해서 간단한 실습 진행하겠습니다.
소설 PDF파일을 벡터DB에 임베딩하여 질문하면 답변할 수 있는 ‘문서 검색 챗봇’을 만들어보겠습니다.
* 이때, PDF파일은 꼭 소설이 아니더라도 하고 싶으신 파일을 사용해주시면 됩니다. 저는 데미안 소설로 진행하였습니다~
* 해당 실습 자료는 유튜브 참고하여 진행하였습니다~
1. Setting
(1) Langchain 패키지 설치
!pip install -q grobid-client langchain openai faiss-cpu PyPDF2 tiktoken
(2) OpenAI - Secret key 입력
- OpenAI를 사용하기 위하여 Secret key를 발급받아 입력해주셔야 합니다.
import openai
from PyPDF2 import PdfReader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import ElasticVectorSearch, Pinecone, Weaviate, FAISS
import os
os.environ["OPENAI_API_KEY"] = "key_입력"
(3) 사용할 텍스트 pdf파일 가져오기
- PDF파일 Github에서 불러오기
!wget https://raw.githubusercontent.com/kairess/toy-datasets/master/Demian.pdf
2. Preprocess a PDF file
- PdfReader를 통해 pdf파일을 불러와 for문을 통해 모든 텍스트를 추출해내는 명령어
- 이때는, 텍스트를 쪼개진 형태가 아닌 다 받아옵니다.
reader = PdfReader("Demian.pdf")
raw_text = ""
for i, page in enumerate(reader.pages):
text = page.extract_text()
if text:
raw_text += text
raw_text[:1000]
3. 청크 작업
- 빠르고 싸기 때문에 3버전으로 사용 (chatGPT는 3.5버전)
from langchain import OpenAI
from langchain.chains import AnalyzeDocumentChain
from langchain.chains.summarize import load_summarize_chain
llm = OpenAI(temperature=0)
summary_chain = load_summarize_chain(llm, chain_type="map_reduce")
summarize_document_chain = AnalyzeDocumentChain(combine_docs_chain=summary_chain)
summarize_document_chain.run(raw_text)
4. 질문 및 답변 테스트
- 이때, 한 질문 수행할 때마다 1~3분 소요됩니다.
from langchain.chains.question_answering import load_qa_chain
from langchain.chat_models import ChatOpenAI
model = ChatOpenAI(model="gpt-3.5-turbo")
qa_chain = load_qa_chain(model, chain_type="map_reduce")
qa_document_chain = AnalyzeDocumentChain(combine_docs_chain=qa_chain)
=> 질문
qa_document_chain.run(
input_document=raw_text,
question="싱클레어를 괴롭힌 사람은?")
+) 물론 … 프롬프트 질의를 좋게 하지 않으면 찾지 못할 때도 있습니다. 😂
정말 간단한 실습이라서 따라하기 쉬우실겁니다 ~
그럼 다음 시간에 봐요 ~
베빠 ~!
'Database' 카테고리의 다른 글
트랜잭션의 이해(ACID) (0) | 2023.09.15 |
---|---|
Cloud Composer의 내부DB 접근 (0) | 2023.09.14 |
[Airflow] Celery Executer (0) | 2023.09.04 |
LangChain이란? (0) | 2023.09.04 |
SQL과 NoSQL 데이터베이스 (0) | 2023.08.18 |
댓글