여러 문서에서 검색/질문/답변하는 QA 챗봇 만들기 - LangChain, ChatGPT, Chroma DB - 빵형의 개발도상국
https://www.youtube.com/watch?v=ftXLn9DE7YY
QA ChatBot 을 만듬
Langchain
ChatGPT (gpt-3.5-turbo)
ChromaDB
!pip install -q langchain openai tictoken chromadb
techCrunch 기사 21개
!wget -q: https//github.com/kairess/toy-datasets/raw/master/techcrunch-articles.zip
!unzip -q techcrunch-articles.zip -d articles // articles 폴더에 저장
import os
os.environ["OPEN_API_KEY"] = ""
from langchain.vecrorstores import Chroma
from langchain.enbeddings import OpenAPIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.llms import OpenAI
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader
from langchain.document_loaders import DirectoryLoader
Load multiple and process documents
// loader = TextLoader('single_test_file.txt')
loader = DirectoryLoader('./articles', glob="*.txt", loader_cls=TextLoader)
documents = loader.load()
len(documents)
21 // 21 개의 txt file
Split Texts
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)
len(texts)
233 // 233개의 chunk
texts[2:4]
text file 의 내용을 split 해서 chunk 단위로 쪼개고 embedding 즉, 벡터 형태로 저장, chroma db 에 저장한다.
embedding 형태는 OpenAPIEmbeddings() 를 사용하고 이 데이터들을 db 라는 폴더에 저장함
persist_directory = 'db'
embedding = OpenAPIEmbeddings()
vectordb = Chroma.from_documents(
documents=texts, // 나눈 텍스트들
embedding=embedding, // OpenAIEmbeddings 를 이용
persist_directory=persist_directory) // DB 가 만들어지는데 db 폴더 아래에 만들어짐
DB 초기화
vectordb.persist()
vectordb = None
사용할 때는 DB에서 메모리로 로드해서 사용함
vectordb = Chroma(
persist_directory=persist_directory,
embedding_function=embedding)
Make a retriever
retriever = vectordb.as_retriever() // 백터 DB를 사용할때 retriever 를 사용
docs = retriever.get_relevant_documents("What is Generative AI?") // get_relevant_documents 가 질문과 연관된 문서를 찾는 역할 수행
for doc in docs:
print(doc.metadata["source"]) // 21개 text file 중의 출처를 출력함
결과를 K개 반환
retriever = vectordb.as_retriever(search_kwargs={"k":3}) // 결과를 3개만 보여달라는 뜻
docs = retriever.get_relevant_documents("What is Generative AI?")
chain 만들기
qa_chain = RetrievalQA.from_chain_type(
llm=OpenAI(),
chain_type="stuff",
retriver=retriever,
return_source_documents=True) // qa_chain 을 만들고 원본문서를 반환하도록 True 로 설정함
llm_response 내용 확인
def Process_lim_response(llm_response): // 이렇게 실제 나온 응답 값 llm_response 를 보기 쉽게 보여줌
print(lim_response['result']) // chatGPT 가 요약한 결과
print('\n\nSources:'])
for source in llm_resoinse["source_documents"]:
print(source.metadata['source']) // 원본 문서를 출력함
Query
query = "How much money did Pando raise?" //
llm_response = qa_chain(query)
process_llm_response(llm_response)
$30 million to $45 million
Query
query = "Who led the round in Pando?" //
llm_response = qa_chain(query)
process_llm_response(llm_response)
Iron Pillar and Uncorrelated Ventures.
Query
query = "What did Databricks acquire?" //
llm_response = qa_chain(query)
process_llm_response(llm_response)
acquired Okera
Query
query = "What is Generative AI?" //
llm_response = qa_chain(query)
process_llm_response(llm_response)
Generative AI is a type of artificial intelligence technology that can ~~ // ChatGPT 가 여러 소스에서 찾아 조합해서 보여줌
Query
query = "Who is CMA?" //
llm_response = qa_chain(query)
process_llm_response(llm_response)
CMA is the Competition and Markets Authority in the United Kingdom.
Langchain 과 Chroma DB 를 이용해서 사용자 질문을 받아서
여러 문서에서 찾아 답변과 소스 출처를 보여주는 내용
원본 Youtube 영상 : https://youtu.be/3yPBVii7Ct0