chat_files / app.py
EagleLoveAI's picture
Update app.py
8cec761
#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()