[7기 랭체인] 랭체인 스터디 시작 II


여러 문서에서 검색/질문/답변하는 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


5

👉 이 게시글도 읽어보세요

모집 중인 AI 스터디