File size: 2,286 Bytes
f755f5a 531aec4 f755f5a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | import gradio as gr
import os
os.environ["OPENAI_API_KEY"] = os.getenv('OPENAI_API_KEY')
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain.chains import RetrievalQA
#Loader
loader = PyPDFLoader("2020_emaster_keynote.pdf")
pages = loader.load_and_split()
#Split
text_splitter = RecursiveCharacterTextSplitter(
# Set a really small chunk size, just to show.
chunk_size = 300,
chunk_overlap = 20,
length_function = len,
is_separator_regex = False,
)
texts = text_splitter.split_documents(pages)
#Embedding
embeddings_model = OpenAIEmbeddings()
# load it into Chroma
db = Chroma.from_documents(texts, embeddings_model)
# question = "๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์?"
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.5)
qa_chain = RetrievalQA.from_chain_type(llm,retriever=db.as_retriever())
# ์ธํฐํ์ด์ค๋ฅผ ์์ฑ.
with gr.Blocks() as demo:
gr.Image('images/emaster.png')
gr.Text('''
์ด๋ฐ ์ง๋ฌธ ์ด๋ ์ธ์?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์
''')
chatbot = gr.Chatbot(label="์ ๋ณด์ฒ๋ฆฌ์ฐ์
๊ธฐ์ฌ์ฑ๋ด") # ์ฒญ๋
์ ์ฑ
์ฑ๋ด ๋ ์ด๋ธ์ ์ข์ธก ์๋จ์ ๊ตฌ์ฑ
msg = gr.Textbox(label="์ง๋ฌธํด์ฃผ์ธ์!") # ํ๋จ์ ์ฑํ
์ฐฝ์ ๋ ์ด๋ธ
clear = gr.Button("๋ํ ์ด๊ธฐํ") # ๋ํ ์ด๊ธฐํ ๋ฒํผ
# ์ฑ๋ด์ ๋ต๋ณ์ ์ฒ๋ฆฌํ๋ ํจ์
def respond(message, chat_history):
result = qa_chain({"query": message})
# result = qa_chain(message)
bot_message = result['result']
# ์ฑํ
๊ธฐ๋ก์ ์ฌ์ฉ์์ ๋ฉ์์ง์ ๋ด์ ์๋ต์ ์ถ๊ฐ.
chat_history.append((message, bot_message))
return "", chat_history
# ์ฌ์ฉ์์ ์
๋ ฅ์ ์ ์ถ(submit)ํ๋ฉด respond ํจ์๊ฐ ํธ์ถ.
msg.submit(respond, [msg, chatbot], [msg, chatbot])
# '์ด๊ธฐํ' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ฑํ
๊ธฐ๋ก์ ์ด๊ธฐํ.
clear.click(lambda: None, None, chatbot, queue=False)
# ์ธํฐํ์ด์ค ์คํ.
demo.launch(debug=True, share=True) |