|
import streamlit as st |
|
from langchain_community.llms import OpenAI |
|
import configparser |
|
|
|
import os |
|
from langchain_openai import OpenAIEmbeddings |
|
from langchain_community.vectorstores import FAISS |
|
from langchain_openai import ChatOpenAI |
|
from langchain_core.prompts import ChatPromptTemplate |
|
from langchain.chains import create_retrieval_chain |
|
from langchain.chains.combine_documents import create_stuff_documents_chain |
|
|
|
|
|
Config = configparser.ConfigParser() |
|
Config.read("config.ini") |
|
st.title('⚖️🔗 Поисковик по академической политике университета Narxoz') |
|
st.markdown('Наш чатбот ответ на вопросы по правилам из академической политики университета Narxoz') |
|
|
|
|
|
|
|
|
|
openai_api_key = st.secrets['openai'] |
|
|
|
os.environ["OPENAI_API_KEY"] = openai_api_key |
|
embeddings = OpenAIEmbeddings(model="text-embedding-3-large") |
|
new_db = FAISS.load_local("AcademicPolicy", embeddings,allow_dangerous_deserialization= True) |
|
retriever = new_db.as_retriever(search_type="similarity", search_kwargs={"k": 6}) |
|
llm = ChatOpenAI(model="gpt-3.5-turbo-0125") |
|
|
|
system_prompt = ( |
|
"Вы бот который отвечает на вопросы по внутренним правилам университета Narxoz." |
|
"Используйте следующий набор документов. " |
|
"Если не знаете ответ, ответьте что вы не знаете. " |
|
"Постарайте уложиться в три предложения." |
|
"Университет Narxoz также подчиняется правилам Республики Казахстан" |
|
"И входит в Болонскую систему образования" |
|
"\n\n" |
|
"{context}" |
|
) |
|
prompt = ChatPromptTemplate.from_messages( |
|
[ |
|
("system", system_prompt), |
|
("human", "{input}"), |
|
] |
|
) |
|
|
|
question_answer_chain = create_stuff_documents_chain(llm, prompt) |
|
rag_chain = create_retrieval_chain(retriever, question_answer_chain) |
|
|
|
import firestore_util |
|
@st.cache_resource |
|
def load_firestore_connection_ref(): |
|
db = firestore_util.load_firestore() |
|
doc_ref = db.collection('requests').document("client_queries") |
|
return doc_ref |
|
|
|
|
|
|
|
@st.cache_data |
|
def generate_response(input_text): |
|
response = rag_chain.invoke({"input": text}) |
|
|
|
|
|
return response |
|
|
|
|
|
with st.form('my_form'): |
|
text = st.text_area('Напишите свой вопрос:', '') |
|
submitted = st.form_submit_button('Submit') |
|
if submitted: |
|
response = generate_response(text) |
|
st.markdown(response['answer']) |
|
|
|
print(response['context']) |
|
for context in response['context']: |
|
with st.expander(context.metadata['title']): |
|
st.write(context.page_content) |
|
|