-
Notifications
You must be signed in to change notification settings - Fork 0
/
streamlit_app.py
73 lines (57 loc) · 2.43 KB
/
streamlit_app.py
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
69
70
71
72
73
import streamlit as st
import openai
import pandas as pd
import numpy as np
from openai.embeddings_utils import get_embedding
from openai.embeddings_utils import cosine_similarity
import sys
import os
from dotenv import load_dotenv
# Laden der Umgebungsvariablen aus der .env-Datei
load_dotenv()
# Konfiguration der OpenAI API
openai.api_key = os.getenv("OPENAI_API_KEY")
model = "gpt-3.5-turbo"
# Einlesen der Daten aus der CSV-Datei
path_csv_Data = './embeddings.csv'
df = pd.read_csv(path_csv_Data, on_bad_lines='skip')
df['embedding'] = df['embedding'].apply(eval).apply(np.array)
# Textregeln
regel1 = '''Beantworte die Frage so wahrheitsgemäß wie möglich nur mit den Informationen, die im KONTEXT stehen.
Strukturiere und formatiere die Antwort leserlich und visuell mit den Informationen, die zur Verfügung stehen.
Ändere den Satzaufbau, um den Fragesteller besser zu informieren.
LINKS und EMAILs, die aus dem KONTEXT benutzt werden dürfen, dürfen NICHT VERÄNDERT werden.'''
regel2 = '''Wenn die Antwort nicht im KONTEXT zu finden ist, beantworte die Frage nicht und sage:
"Tut mir leid, leider konnte ich zu Ihrer Frage keine Daten finden."'''
prepromt = regel1 + regel2
# Funktion zur Generierung der Antwort
def get_response(message, df, model):
df["similarities"] = df['embedding'].apply(lambda x: cosine_similarity(x, get_embedding(message, engine="text-embedding-ada-002")))
top_3_answers = df.sort_values("similarities", ascending=False).iloc[:3]['Sentence'].tolist()
sim_kontext = 'KONTEXT:\n'
for i, answer in enumerate(top_3_answers):
sim_kontext += answer + '\n'
messages = [
{"role": "system", "content": "Du bist ein hilfreicher Website Q&A Bot." + prepromt},
{"role": "user", "content": message + '\n' + sim_kontext}
]
response = openai.ChatCompletion.create(
model=model,
messages=messages
)
response_text = response["choices"][0]["message"]["content"]
return response_text
# Streamlit App
def main():
st.title("Frage-Antwort-Bot")
st.write("Stellen Sie eine Frage und erhalten Sie eine Antwort!")
question = st.text_input("Frage eingeben:")
if st.button("Antwort erhalten"):
if question:
answer = get_response(question, df, model)
st.write("Antwort:")
st.write(answer)
else:
st.write("Bitte geben Sie eine Frage ein.")
if __name__ == "__main__":
main()