File size: 2,970 Bytes
1445abd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e569c3b
1445abd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#Manual Q&A bot powered by chatGPT plus langchain.ipynb
#
#reference:
#https://blog.devgenius.io/chat-with-document-s-using-openai-chatgpt-api-and-text-embedding-6a0ce3dc8bc8
#Sung Kim Mar/09/2023
#
#Chat with Document(s) using OpenAI ChatGPT API and Text Embedding
#How to chat with any documents, PDFs, and books using OpenAI ChatGPT API and Text Embedding

# Import Python Packages
import os
import platform
import openai
import chromadb
import langchain
import magic
import os
import nltk

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import TokenTextSplitter
from langchain.llms import OpenAI
from langchain.chains import ChatVectorDBChain, VectorDBQA
from langchain.document_loaders import GutenbergLoader
from langchain.document_loaders import UnstructuredPDFLoader
from langchain.document_loaders import UnstructuredURLLoader
from langchain.document_loaders import OnlinePDFLoader
from langchain.document_loaders import PDFMinerLoader
from langchain.document_loaders import UnstructuredFileLoader

disclaimer = ("""
#### Disclaimer and Precautions
######  Use of this tool is at your own risk. The creator cannot be held responsible for any harm caused by this tool.
######  The creator is not responsible for any damages caused to users or third parties as a result of such content.
""")

# Configure Chroma
persist_directory="/data/"

#Convert local file to Embedding (txt file is better)
loader = UnstructuredFileLoader('ChatGPT_S_ND.txt')
paldoc = loader.load()

openai.api_key = os.environ.get("OPENAI_API_KEY")

#OPENAI_API_KEY = os.getenv('openai_api_key')
#OPENAI_API_KEY = "openai_api_key"

#local file
text_splitter = TokenTextSplitter(chunk_size=100, chunk_overlap=30)
paldocs = text_splitter.split_documents(paldoc)

embeddings = OpenAIEmbeddings()

vStore = Chroma.from_documents(paldocs, embeddings)

from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# RetrievalQA
model = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(temperature=0.5, model_name="gpt-3.5-turbo-16k", max_tokens = 256), 
    chain_type="stuff",
    retriever=vStore.as_retriever()
)

#open as a demo Web app using Gradio
import gradio as gr
# 関数を定義
def askandanswer(question, Language): return model.run("Please create a simple answer to the question from  in " + Language + ". [Question] " + question) 
# Webアプリを作成
app = gr.Interface(fn=askandanswer,
                   inputs= [gr.Textbox(placeholder="Please input query "),
                            gr.Dropdown(["中文 Chinese", "英語 English"], label="言語 Language")],
                   outputs="text",
                  title="Chat with Document(s) using OpenAI ChatGPT API and Text Embedding",
    description= "How to chat with any documents, PDFs, and books using OpenAI ChatGPT API and Text Embedding",
    article= (disclaimer),
)
# Webアプリを起動
app.launch()