1
2
데이터 연결 ?
사용자가 질문하고, PDF 등 데이터에서 정보를 가져오려면 데이터 연결이 필요하다.
3
데이터 연결 순서 ?
미리 벡터 데이터 베이스에 저장해 놓는다.
4
상세 ?
5
# 데이터 연결 실습 예제 - 코랩사용
# 데이터 연결을 위해서는 필요 라이브러리 설치
랭체인 설치, pdf 라이브러리 등 설치
문서 가져오기 - 다양한 곳에서 문서를 가져온다.
문서 변환(document transformers) - 입력 데이터를 청킹하여 분할 하거나 다시 결합 작업등 진행한다. 분할해야 응답을 잘한다.
문서 임베딩(embedding model) - 데이터를 벡터 형태로 변환한다.
벡터 데이터 베이스(벡터 저장소,vector stores) - 변환된 벡터를 저장/검색/관리한다.
검색기가 필요하다. (retrievers) - 정보검색 역할을 한다.
# 랭체인 설치, pdf 라이브러리 등 설치
!pip install pypdf
!pip install tiktoken
!pip install faiss-cpu
!pip install sentence-transformers
# t2.pdf 다운로드 - 호텔 예약 파일
# pdf파일은 코랩에 올려놓는다
코랩 왼쪽 폴더 클릭 > 업로드 클릭 > 파일 올리기 > 파일이름은 t2.pdf 로 하자.
9
# 문서 변환(document transformers)
입력 데이터를 청킹하여 분할 하거나 다시 결합 작업등 진행한다. 분할해야 응답을 잘한다.
아래 내용은 PDF 6 페이지중 5,000 글자를 읽어오라는 의미이다.
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("t2.pdf")
document = loader.load()
document[2].page_content[:5000]
11
# 문서 임베딩(embedding model) - 데이터를 벡터 형태로 변환한다.
임베딩이란 자연어처리에서 사람이 쓰는 자연어를 기계가 이해할 수 있도록 숫자형태인 vector로 바꾸는 과정 혹은 일련의 전체 과정을 의미합니다.
단어나 문장 각각을 벡터로 변환해 벡터 공간(Vector space)으로 끼워넣는다는 의미에서 임베딩이라고 합니다.
# 벡터 데이터 베이스(벡터 저장소,vector stores) - 변환된 벡터를 저장/검색/관리한다.
# 임베딩을 오픈 AI에서 제공하는 임베딩 모델 사용
# 벡터 데이터베이스로 파이스 사용
import os
os.environ["NCP_CLOVASTUDIO_API_KEY"] = "NTA0MjU2MWZNDJiYxqjRuCbOfkIy4Svs+M"
os.environ["NCP_APIGW_API_KEY"] = "OOJfdUkIfDJEhIsinKpG"
os.environ["NCP_CLOVASTUDIO_APP_ID"] = "7a1b56e593a7"
from langchain.vectorstores import FAISS
from langchain_community.embeddings import ClovaXEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter # Import the text splitter
embeddings = ClovaXEmbeddings(
model="clir-emb-dolphin",
)
# Split the document into smaller chunks
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 500, # Adjust the chunk size as needed
chunk_overlap = 0, # Adjust overlap as needed
)
docs = text_splitter.split_documents(document) # Split your document list
# Now create the FAISS vectorstore using the split documents
db = FAISS.from_documents(docs, embeddings)
13
# 검색기가 필요하다. (retrievers) - 정보검색 역할을 한다.
from langchain_community.chat_models import ChatClovaX
# Now instantiate the ChatClovaX class:
chat = ChatClovaX(model="HCX-003")
from langchain.chains import RetrievalQA
retriever = db.as_retriever()
qa = RetrievalQA.from_chain_type(
llm=chat,
chain_type="stuff",
retriever=retriever)
query = " 숙소 조식은 제공 되는가요 ?"
result = qa({"query": query})
print(result['result'])
# 임베딩 도구 이용
2
https://python.langchain.com/docs/integrations/text_embedding/naver/
3
https://guide.ncloud-docs.com/docs/clovastudio-dev-langchain
4
https://guide.ncloud-docs.com/docs/clovastudio-playground01
5
# 네이버 임베딩 자료
감사합니다.