cb_no10 / app.py
7shiF9ug's picture
Update app.py
188a656 verified
# 必要なライブラリのインポート
import os
from dotenv import load_dotenv
import openai
import streamlit as st
from langchain_openai import ChatOpenAI
from langchain.chains import RetrievalQA
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
load_dotenv()
# Langsmithの設定
#LANGCHAIN_TRACING_V2 = true
#LANGCHAIN_ENDPOINT = "https://api.smith.langchain.com"
# APIキーの設定
openai.api_key = os.environ["OPENAI_API_KEY"]
# GPTの種類の設定
MODEL_NAME = "gpt-3.5-turbo-16k-0613"
# モデルが生成するテキストがどれくらいランダムになるか0から1の範囲で設定する。
MODEL_TEMPERATURE = 0.9
# Webアプリの見出しの設定
st.title("Welcome to TOKAI Chatbot.ver8 🔰")
st.markdown("お困りになっていることを教えてください。")
# FAISS vectorのロード
vectoreStore = FAISS.load_local("faiss_index/", OpenAIEmbeddings(), allow_dangerous_deserialization=True)
# Retrieverについて設定
retriever = vectoreStore.as_retriever(search_type="similarity", search_kwargs={"k": 3})
# メッセージ履歴を保持するリストの定義
if "messages" not in st.session_state:
st.session_state.messages = []
# メッセージ履歴の表示
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# ユーザーの入力を監視
if prompt := st.chat_input("ここに質問事項を入力してください。"):
# ユーザーによる質問の保存・表示
st.session_state.messages.append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
# LLMによる回答の生成
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(temperature=MODEL_TEMPERATURE, model_name=MODEL_NAME),
chain_type="stuff",
retriever=retriever,
return_source_documents=False
)
#query = f"東海大学の授業要覧以外に関する質問には答えないでください。次の質問に答えてください。:{prompt}"
query = f"東海大学の授業要覧以外に関する質問には答えないでください。次の質問に答えてください。:{prompt}"
res = qa.run(query)
# LLMによる回答の保存
st.session_state.messages.append({"role": "assistant", "content": res})
# LLMによる回答の表示
with st.chat_message("assistant"):
st.markdown(res)