File size: 2,494 Bytes
443fe94
 
 
 
 
 
 
 
 
 
 
6b0ea08
 
241d45f
 
6b0ea08
443fe94
 
 
363cf96
cb70cf7
bc35e6b
cb70cf7
443fe94
363cf96
cb70cf7
 
443fe94
 
 
 
363cf96
 
 
cb70cf7
 
 
443fe94
cb70cf7
 
 
 
443fe94
c9e872a
cb70cf7
443fe94
cb70cf7
f03cf3f
cb70cf7
f03cf3f
977b354
cb70cf7
6a33096
6db681b
6a33096
aae4041
6a33096
 
6db681b
e0b46f5
188a656
6db681b
443fe94
f03cf3f
c9e872a
 
 
 
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
# 必要なライブラリのインポート
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)