From 1b24e01eea7299166d529a8d462509f0aa91bb20 Mon Sep 17 00:00:00 2001 From: Molochko1990 Date: Thu, 30 May 2024 20:48:19 +0500 Subject: [PATCH 1/2] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8E=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=B3=D0=BF=D1=82,=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BC=D0=BF=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chatgpt/gpt_manager.py | 24 ++++++++++++------------ database/knowledge_base.db | Bin 151552 -> 0 bytes search/semantic_search.py | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 40 insertions(+), 20 deletions(-) delete mode 100644 database/knowledge_base.db diff --git a/chatgpt/gpt_manager.py b/chatgpt/gpt_manager.py index feaef08..15df733 100644 --- a/chatgpt/gpt_manager.py +++ b/chatgpt/gpt_manager.py @@ -6,15 +6,15 @@ def fetch_gpt_response(question_and_answer=None): - messages = [{"role": "system", - "content": "Ты должен опираясь на ответ из базы знаний ( данные хранятся в формате вопрос ; ответ) дать логичный ответ на поставленный вопрос пользователя. Не придумывай лишней информации. Использую только то, что есть в базе знаний. Можно переформулировать ответ."}, - {"role": "user", "content": question_and_answer}] - - gpt_response = client.chat.completions.create( - model="gpt-3.5-turbo", # gpt-4-turbo-preview - messages=messages - ) - # Вывод ответа модели - return gpt_response -s=str(input()) -print(fetch_gpt_response(s)) \ No newline at end of file + messages = [{"role": "system", + "content": "Согласно контексту из базы знаний дай ответ пользователя на поставленный вопрос. Не придумывай лишней информации. Использую только то, что есть в базе знаний. Ответ дай максимально кратким."}, + {"role": "user", "content": question_and_answer}] + + gpt_response = client.chat.completions.create( + model="gpt-3.5-turbo", # gpt-4-turbo-preview + messages=messages + ) + + return gpt_response + + diff --git a/database/knowledge_base.db b/database/knowledge_base.db deleted file mode 100644 index 798a35d71486ce34f0b81858096e2e5afeb8e5ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151552 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ꑱo)apm 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 z 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 {grDTBNeBFh)<3eUfY!(nrU%oq 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 o)ygZO0xel5?QKxGt|ty9ey Date: Thu, 30 May 2024 23:24:40 +0500 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D1=80=D0=BE=D0=BC=D1=82=20=D0=B2=20gpt=5F?= =?UTF-8?q?manager,=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0,=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20elasticsearch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/frontend.py | 132 ++++++++++++++++++ app/streamlit.py | 11 -- chatgpt/chatgpt.py | 18 +++ chatgpt/gpt_manager.py | 20 --- database/knowledge_base.db | Bin 0 -> 184320 bytes {search => elastic_search}/__init__.py | 0 {search => elastic_search}/semantic_search.py | 0 7 files changed, 150 insertions(+), 31 deletions(-) create mode 100644 app/frontend.py delete mode 100644 app/streamlit.py create mode 100644 chatgpt/chatgpt.py delete mode 100644 chatgpt/gpt_manager.py create mode 100644 database/knowledge_base.db rename {search => elastic_search}/__init__.py (100%) rename {search => elastic_search}/semantic_search.py (100%) diff --git a/app/frontend.py b/app/frontend.py new file mode 100644 index 0000000..31f1d1b --- /dev/null +++ b/app/frontend.py @@ -0,0 +1,132 @@ +import streamlit as st +import sqlite3 +from database import semantic_search as ss +from chatgpt import chatgpt as gpt +# Для оформления + +left1_column, right2_column = st.columns([1, 4]) +inside_left, inside_right = right2_column.columns([4, 1]) + +st.markdown( + """ + + """, + unsafe_allow_html=True +) + +results = '' +ResultsList = [] +ResultsListSub = [] + +st.sidebar.image("logo.png") + + + +# обработка пользовательского запроса +def process_query(query): + global results + right2_column.write(f'Вы ввели запрос: {query}') + nglobal_results = ss.elastic_output(query) + for result in nglobal_results: + ResultsList.append(result['articles']) + ResultsListSub.append([result['subcategory'], result['subsubcategory']]) + +# сохранение состояния сессии +def save_session_state(selected_category, selected_subcategory, selected_content): + session_state = { + 'selected_category': selected_category, + 'selected_subcategory': selected_subcategory, + 'selected_content': selected_content + } + return session_state + +# восстановление состояния сессии +def restore_session_state(): + session_state = st.session_state.get('session_state', None) + if session_state: + return session_state['selected_category'], session_state['selected_subcategory'], session_state['selected_content'] + else: + return None, None, None + +# чтение базы данных +def read_database(): + conn = sqlite3.connect('database/knowledge_base.db') + cursor = conn.cursor() + + cursor.execute("SELECT categories.name, subcategories.name, subsubcategories.name, articles.content " + "FROM categories " + "JOIN subcategories ON categories.id = subcategories.category_id " + "JOIN subsubcategories ON subcategories.id = subsubcategories.subcategory_id " + "JOIN articles ON subsubcategories.id = articles.subsubcategory_id") + + rows = cursor.fetchall() + + hierarchy = {} + for row in rows: + category = row[0] + subcategory = row[1] + subsubcategory = row[2] + content = row[3] + + if category not in hierarchy: + hierarchy[category] = {} + + if subcategory not in hierarchy[category]: + hierarchy[category][subcategory] = [] + + if content not in hierarchy[category][subcategory]: + hierarchy[category][subcategory].append(content) + + return hierarchy + +# Восстановление состояния сессии +selected_category, selected_subcategory, selected_content = restore_session_state() + +# Чтение базы данных +hierarchy = read_database() + +st.sidebar.title('Категории') + +query = st.sidebar.text_input('', label_visibility='collapsed') +if st.sidebar.button('🔍', key="my-button"): + process_query(query) + st.write("------------------") + try: + st.write('Краткий ответ: ', gpt.fetch_gpt_response(query, ResultsList[0]+ResultsList[1]+ResultsList[2])) + except: + st.write('Краткий ответ: ', gpt.fetch_gpt_response(query, ResultsList[0])) + + st.write("------------------") + st.write('Найденная информация: ', ) + + for i in range(len(ResultsList)): + expName = ResultsListSub[i][0] + ' - ' + ResultsListSub[i][1] + currentEsp = st.expander(expName, expanded=True) + with currentEsp: + st.write(ResultsList[i]) + st.write("------------------") + st.write('Информация из выбранных категорий: ', ) + + +# Выбор категории +selected_category = st.sidebar.selectbox('Выберите категорию', list(hierarchy.keys()), index=list(hierarchy.keys()).index(selected_category) if selected_category else 0) + +if selected_category in hierarchy and hierarchy[selected_category]: + subcategories = list(hierarchy[selected_category].keys()) + selected_subcategory = st.sidebar.selectbox('Выберите подкатегорию', subcategories, index=subcategories.index(selected_subcategory) if selected_subcategory in subcategories else 0) + +if selected_subcategory: + for content in hierarchy[selected_category][selected_subcategory]: + expName = selected_category + ' - ' + selected_subcategory + currentEsp = st.expander(expName, expanded=True) + with currentEsp: + st.write(content) + +# Сохранение состояния сессии +session_state = save_session_state(selected_category, selected_subcategory, selected_content) +st.session_state['session_state'] = session_state + diff --git a/app/streamlit.py b/app/streamlit.py deleted file mode 100644 index c8923ac..0000000 --- a/app/streamlit.py +++ /dev/null @@ -1,11 +0,0 @@ -from search import semantic_search as ss -from app import streamlit as st - -st.title('Умный ассистент') -query = st.text_input('Введите ваш запрос:') -def process_query(query): - st.write(f'Вы ввели запрос: {query}') - st.write(ss.SemanticSearch(query)) - -if st.button('Отправить запрос'): - process_query(query) \ No newline at end of file diff --git a/chatgpt/chatgpt.py b/chatgpt/chatgpt.py new file mode 100644 index 0000000..35a5e9e --- /dev/null +++ b/chatgpt/chatgpt.py @@ -0,0 +1,18 @@ +from openai import OpenAI + +api_key = '' + +client = OpenAI(api_key=api_key) + + +def fetch_gpt_response(question, answer): + messages = [{"role": "system", + "content": f"Дай ответ на вопрос {question} согласно контексту из базы знаний. Не придумывай лишней информации. Использую только то, что есть в базе знаний. Ответ дай максимально краткий."}, + {"role": "user", "content": answer}] + + gpt_response = client.chat.completions.create( + model="gpt-3.5-turbo", # gpt-4-turbo-preview + messages=messages + ) + + return gpt_response.choices[0].message.content \ No newline at end of file diff --git a/chatgpt/gpt_manager.py b/chatgpt/gpt_manager.py deleted file mode 100644 index 15df733..0000000 --- a/chatgpt/gpt_manager.py +++ /dev/null @@ -1,20 +0,0 @@ -from openai import OpenAI - -api_key = '' - -client = OpenAI(api_key=api_key) - - -def fetch_gpt_response(question_and_answer=None): - messages = [{"role": "system", - "content": "Согласно контексту из базы знаний дай ответ пользователя на поставленный вопрос. Не придумывай лишней информации. Использую только то, что есть в базе знаний. Ответ дай максимально кратким."}, - {"role": "user", "content": question_and_answer}] - - gpt_response = client.chat.completions.create( - model="gpt-3.5-turbo", # gpt-4-turbo-preview - messages=messages - ) - - return gpt_response - - diff --git a/database/knowledge_base.db b/database/knowledge_base.db new file mode 100644 index 0000000000000000000000000000000000000000..a7bae27744e7a77df60e1b882db580695bfacf1e GIT binary patch literal 184320 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 literal 0 HcmV?d00001 diff --git a/search/__init__.py b/elastic_search/__init__.py similarity index 100% rename from search/__init__.py rename to elastic_search/__init__.py diff --git a/search/semantic_search.py b/elastic_search/semantic_search.py similarity index 100% rename from search/semantic_search.py rename to elastic_search/semantic_search.py