File size: 3,290 Bytes
6a14bdd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a932599
 
 
6a14bdd
 
 
7ceb372
6a14bdd
 
7ceb372
6a14bdd
 
7ef75a6
8cec761
1b53a94
8cec761
a932599
6a14bdd
 
 
 
 
 
 
7ef75a6
 
6a14bdd
 
 
 
 
 
22d696c
6a14bdd
a932599
6a14bdd
 
 
 
 
 
 
22d696c
a932599
6a14bdd
a932599
042ff79
6a14bdd
a932599
 
6a14bdd
 
a932599
6a14bdd
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
83
84
85
86
#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 = "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"
#os.environ['OPENAI_API_KEY'] = 

openai.api_key = os.environ.get("OPENAI_API_KEY")
#os.environ['OPENAI_API_KEY'] = os.getenv('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()
#embeddings = OpenAIEmbeddings(api_key=os.environ['OPENAI_API_KEY'])

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 family members of advanced cancer patients as an expert of palliative care and hospice care 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="文件聊天机器人 Powered by ChatGPT plus langchain.ipynb",
    description= "Chat with Document(s) using OpenAI ChatGPT API and Text Embedding",
    article= (disclaimer),
)
# Web起動
app.launch()